Pipelines/Triggering pipelines
https://docs.gitlab.com/ee/ci/triggers/
Authentication tokens
Доступные методы аутентификации:
- Trigger token - уникальный токен, который генерируется при добавлении нового триггера (может быть использован для webhook)
- CI job token - тот же токен можно использовать внутри gitlab-ci.yml через переменную
$CI_JOB_TOKEN
Используя переменную $CI_PIPELINE_SOURCE
можно управлять тем какие джобы будут запускаться а какие нет
Она может принимать два значения
pipeline
trigger
В соответствии с тем как был запущен пайплайн
В Settings > CI/CD > Triggers можно создать новый триггер
Будет создан токен который можно будет использовать в gitlab-ci.yml
Чтобы стриггерить триггер нужно отправить POST в API endpoint
POST /projects/:id/trigger/pipeline
Айди можно посмотреть в Settings > CI/CD
vandud@macbook: ~ [0]$ curl -X POST -F token=064f70a02674ffba2a476144d39fdd -F ref=main https://gitlab.com/api/v4/projects/27896306/trigger/pipeline
{"id":331734189,"project_id":27896306,"sha":"cfd5def867391ad8635ab7216492f6742f6240f0","ref":"main","status":"created","created_at":"2021-07-05T07:19:28.256Z","updated_at":"2021-07-05T07:19:28.256Z","web_url":"https://gitlab.com/vandud/gitlabci-project-dependency-test/-/pipelines/331734189","before_sha":"0000000000000000000000000000000000000000","tag":false,"yaml_errors":null,"user":{"id":2745541,"name":"Ivan Dudin","username":"vandud","state":"active","avatar_url":"https://assets.gitlab-static.net/uploads/-/system/user/avatar/2745541/avatar.png","web_url":"https://gitlab.com/vandud"},"started_at":null,"finished_at":null,"committed_at":null,"duration":null,"queued_duration":null,"coverage":null,"detailed_status":{"icon":"status_created","text":"created","label":"created","group":"created","tooltip":"created","has_details":false,"details_path":"/vandud/gitlabci-project-dependency-test/-/pipelines/331734189","illustration":null,"favicon":"https://gitlab.com/assets/ci_favicons/favicon_status_created-4b975aa976d24e5a3ea7cd9a5713e6ce2cd9afd08b910415e96675de35f64955.png"}}
Токен и ref можно указывать ключами в самом урле
Можно использовать webhook payload при триггеринге, а внутри пайплайна использовать этот пэйлоад через переменную окружения $TRIGGER_PAYLOAD
Можно передать в webhook'e для пайплайна переменные окружения и они будут доступны в пайплайне
Это можно использовать например для идентификации причин запуска пайплайна т.к. переменная видна в web-ui (положить в переменную описание причины)
Можно добавить определенным джобам условие на наличие определенной переменной
upload_package:
stage: package
script:
- if [ -n "${UPLOAD_TO_S3}" ]; then make upload; fi
curl --request POST \
--form token=TOKEN \
--form ref=main \
--form "variables[UPLOAD_TO_S3]=true" \
"https://gitlab.example.com/api/v4/projects/9/trigger/pipeline"
А еще можно засунуть курл в крон и получится "Pipeline schedules"
No Comments