74 lines
1.8 KiB
Markdown
74 lines
1.8 KiB
Markdown
|
---
|
||
|
owning-stage: "~devops::verify"
|
||
|
description: 'GitLab CI Events Proposal 4: Creating events via CI files'
|
||
|
---
|
||
|
|
||
|
# GitLab CI Events Proposal 4: Creating events via CI files
|
||
|
|
||
|
Each project can have its own event configuration file. Let's call it `.gitlab-ci-event.yml` for now.
|
||
|
In this file, we can define events in the following format:
|
||
|
|
||
|
```yaml
|
||
|
events:
|
||
|
- package/published
|
||
|
- issue/created
|
||
|
```
|
||
|
|
||
|
When this file is changed in the project repository, it is parsed and the events are created, updated, or deleted.
|
||
|
This is highly similar to [Proposal 1](proposal-1-using-the-gitlab-ci-file.md) except that we don't need to
|
||
|
track pipeline creations every time.
|
||
|
|
||
|
1. Upsert events to the database when `.gitlab-ci-event.yml` is updated.
|
||
|
1. Create [EventStore subscriptions](../../../development/event_store.md) to handle the events.
|
||
|
|
||
|
## Filtering jobs
|
||
|
|
||
|
We can filter jobs by using the `rules` keyword. For example:
|
||
|
|
||
|
```yaml
|
||
|
test_package_published:
|
||
|
script: echo testing published package
|
||
|
rules:
|
||
|
- events: ["package/published"]
|
||
|
|
||
|
test_package_removed:
|
||
|
script: echo testing removed package
|
||
|
rules:
|
||
|
- events: ["package/removed"]
|
||
|
```
|
||
|
|
||
|
Otherwise, we can make it work either a CI variable;
|
||
|
|
||
|
```yaml
|
||
|
test_package_published:
|
||
|
script: echo testing published package
|
||
|
rules:
|
||
|
- if: $CI_EVENT == "package/published"
|
||
|
|
||
|
test_package_removed:
|
||
|
script: echo testing removed package
|
||
|
rules:
|
||
|
- if: $CI_EVENT == "package/removed"
|
||
|
```
|
||
|
|
||
|
or an input like in the [Proposal 3](proposal-3-using-the-gitlab-ci-events-folder.md);
|
||
|
|
||
|
```yaml
|
||
|
spec:
|
||
|
inputs:
|
||
|
event:
|
||
|
default: push
|
||
|
|
||
|
---
|
||
|
|
||
|
test_package_published:
|
||
|
script: echo testing published package
|
||
|
rules:
|
||
|
- if: $[[ inputs.event ]] == "package/published"
|
||
|
|
||
|
test_package_removed:
|
||
|
script: echo testing removed package
|
||
|
rules:
|
||
|
- if: $[[ inputs.event ]] == "package/removed"
|
||
|
```
|