Могу ли я передать параметры заданию через вызов REST API в API gitlab, чтобы запустить конкретное задание? У меня есть сценарий Python, который выполняется как часть задания, и я хотел бы передать параметры этому сценарию. Я хотел бы вызвать это задание через API gitlab. как будет выглядеть запрос?
например, исходя из документации, команда curl для запуска конвейера выглядит так
curl --request POST \
"https://gitlab.example.com/api/v4/projects/project_id/trigger/pipeline?token=**************&ref=main"
Вопрос: в моем примере ниже у меня есть test-job1, который запускает скрипт Python, называемый mydumbscript.py, и я передаю несколько параметров, $arg1 ... . могу ли я передать этот параметр через API gitlab и запустить это конкретное задание?
Я создал проект в gitlab, скажем, myproject, и вот пример файла .gitlab-ci.yml.
build-job:
stage: build
script:
- echo "Hello, $GITLAB_USER_LOGIN!"
test-job1:
stage: test
script:
- python3 myproject/script/mydumbscript.py $arg1 $arg2 $arg3
test-job2:
stage: test
script:
- echo "This job tests something, but takes more time than test-job1."
- echo "After the echo commands complete, it runs the sleep command for 20 seconds"
- echo "which simulates a test that runs 20 seconds longer than test-job1"
- sleep 20
deploy-prod:
stage: deploy
script:
- echo "This job deploys something from the $CI_COMMIT_BRANCH branch."
environment: production
Из документации gitlab:
Вы можете передать любое количество переменных CI/CD в вызове API триггера. Эти переменные имеют наивысший приоритет и переопределяют все переменные с тем же именем. Параметр имеет вид переменные[ключ]=значение, например:
curl --request POST \
--form token=TOKEN \
--form ref=main \
--form variables[UPLOAD_TO_S3] = "true" \
"https://gitlab.example.com/api/v4/projects/123456/trigger/pipeline"
Переменные CI/CD в запущенных конвейерах отображаются на странице каждого задания, но просматривать значения могут только пользователи с ролью владельца и сопровождающего.
Ключом в примере является переменная, которую вы определите в своем конвейере, когда он начнет работать. вы можете добавить несколько строк, например строку переменных --form.
К вашему сведению, эту и другую информацию можно найти здесь: https://docs.gitlab.com/ee/ci/triggers/#pass-cicd-variables-in-the-api-call
Спасибо. для моего варианта использования, как мне выбрать конкретное задание (в моем случае test-job1) и передать аргументы $arg1, $arg2... и т. д.
если у вас есть переменные --form[$arg1] = "значение arg 1" в завитке, они будут доступны при запуске этого этапа. Если вы ПРОСТО хотите запустить этот этап, вам нужно задать условия для заданий, чтобы только этот этап выполнялся, когда определенная переменная определена или имеет определенное значение. Надеюсь, это поможет. Мы используем gitlab в качестве основного CI/CD, поэтому у меня есть хороший опыт создания этих конвейеров.
К вашему сведению, информация здесь может помочь вам указать, когда определенные задания выполняются в конвейере GitLab. Помните, что они запускаются различными условиями, и это можно проверить в заданиях конвейера, чтобы решить, включено ли задание или нет. docs.gitlab.com/ee/ci/jobs/job_control.html
вы абсолютно можете передавать переменные через вызов API Curl.