Коротко — есть два основных способа «внешне» запустить pipeline / джоб в GitLab:
1) Project trigger (встроенный Trigger Token) — удобен, если у вас есть только одна задача «запустить pipeline из внешней системы».
2) API с токеном пользователя (Personal Access Token / Project Access Token / OAuth) — даёт больше гибкости и прав.
Где получить токен
- Project trigger: в проекте -> Settings -> CI / CD -> Pipeline triggers -> Add trigger. Сгенерируется token и имя.
- Personal Access Token (PAT): в профиле -> Preferences -> Access Tokens (или Profile Settings -> Access Tokens). Необходим scope: api (или минимум необходимый для вызова нужного метода).
- Project Access Token (новая опция в некоторых версиях): Project -> Settings -> Access Tokens — полезно для сервисов без привязки к пользователю.
Как передать в запросе
1) Запуск pipeline через Trigger Token (проще). HTTP POST:
- URL:
https://gitlab.example.com/api/v4/projects/:id/trigger/pipeline
(:id — numeric project id или URL-encoded path, напр. namespace%2Fproject)
- Form-данные (application/x-www-form-urlencoded):
token=TRIGGER_TOKEN
ref=branch_or_tag
variables[VAR_NAME]=value (можно многократно)
Пример curl:
curl -X POST "https://gitlab.com/api/v4/projects/12345/trigger/pipeline" \
-F token=AbCdEfGh123456 \
-F ref=master \
-F "variables[RUN_SPECIAL]=1"
Этот вариант не использует заголовок Authorization — токен передаётся в теле как token.
2) Запуск pipeline через API и Personal Access Token. HTTP POST:
- URL:
POST https://gitlab.example.com/api/v4/projects/:id/pipeline?ref=master
- Заголовок:
PRIVATE-TOKEN: <your_personal_access_token>
либо Authorization: Bearer <token>
- Тело можно передать как JSON или параметры запроса. Для переменных:
variables[key]=value или в JSON variables: [{ "key":"NAME","value":"val" }, ...]
Пример curl:
curl -X POST "https://gitlab.com/api/v4/projects/12345/pipeline" \
-H "PRIVATE-TOKEN: xxxxxxyourPAT" \
-H "Content-Type: application/json" \
-d '{"ref":"master","variables":[{"key":"RUN_SPECIAL","value":"1"}]}'
Как запустить конкретный джоб
GitLab API запускает pipeline; чтобы исполнился нужный job — используйте переменные и правила в .gitlab-ci.yml. Пример job, который выполняется только если переменная set:
my_job:
script: ....
rules:
- if: '$RUN_SPECIAL == "1"'
when: always
- when: never
Альтернативы/дополнения
- Если нужно «play» manual job (trigger ручной job) — есть API для /projects/:id/jobs/:job_id/play, но для этого нужен токен пользователя с правами (PRIVATE-TOKEN).
- Для многоступенчатых сценариев можно запускать child pipelines, использовать triggers внутри .gitlab-ci.yml и т.д.
Безопасность
- Храните токены в защищённом хранилище и используйте HTTPS.
- Ограничьте права токена (минимально необходимый scope). Trigger token действует на проекте и даёт возможность запускать pipeline от имени триггера — не даёт всех прав пользователя, но тоже должен храниться безопасно.
Если хотите — пришлите версию GitLab (gitlab.com или self-hosted + версия) и пример .gitlab-ci.yml: подскажу конкретный curl и как настроить job, чтобы срабатывал только при внешнем запуске.