Как запустить и передать параметры заданию в gitlab ci/cd через gitlab api?

Могу ли я передать параметры заданию через вызов 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

вы абсолютно можете передавать переменные через вызов API Curl.

LhasaDad 24.03.2024 20:14
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
729
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Из документации 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... и т. д.

kishi 24.03.2024 20:45

если у вас есть переменные --form[$arg1] = "значение arg 1" в завитке, они будут доступны при запуске этого этапа. Если вы ПРОСТО хотите запустить этот этап, вам нужно задать условия для заданий, чтобы только этот этап выполнялся, когда определенная переменная определена или имеет определенное значение. Надеюсь, это поможет. Мы используем gitlab в качестве основного CI/CD, поэтому у меня есть хороший опыт создания этих конвейеров.

LhasaDad 24.03.2024 20:49

К вашему сведению, информация здесь может помочь вам указать, когда определенные задания выполняются в конвейере GitLab. Помните, что они запускаются различными условиями, и это можно проверить в заданиях конвейера, чтобы решить, включено ли задание или нет. docs.gitlab.com/ee/ci/jobs/job_control.html

LhasaDad 24.03.2024 21:55

Другие вопросы по теме