如何通过GitLab API触发Job并向Python脚本传递参数
如何通过GitLab REST API触发指定Job并传递参数
一、先调整.gitlab-ci.yml配置
你当前的test-job1直接使用$arg1无法接收外部传递的参数,需要先修改配置,明确声明要接收的变量:
build-job: stage: build script: - echo "Hello, $GITLAB_USER_LOGIN!" test-job1: stage: test # 声明要接收的变量,可设置默认值或留空 variables: ARG1: "" ARG2: "" ARG3: "" # 可选:添加规则,仅当触发时指定特定变量才运行该Job rules: - if: '$TRIGGER_TEST_JOB == "true"' when: always - when: never 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 API触发请求格式
GitLab API无法直接触发单个Job,只能触发整个流水线,但可以通过变量控制仅运行目标test-job1。
必要准备
- 拥有GitLab私有令牌(Personal Access Token),权限需包含
api和read_repository - 获取项目ID(可在项目主页的「设置」→「通用」中找到)
curl请求示例
curl --request POST \ --header "PRIVATE-TOKEN: 你的私有令牌" \ --header "Content-Type: application/json" \ --data '{ "ref": "main", # 替换为你要触发的分支/tag名称 "variables": [ {"key": "TRIGGER_TEST_JOB", "value": "true"}, # 对应上述rules中的触发条件 {"key": "ARG1", "value": "参数1内容"}, {"key": "ARG2", "value": "参数2内容"}, {"key": "ARG3", "value": "参数3内容"} ] }' \ https://你的GitLab域名/api/v4/projects/项目ID/pipeline
关键说明
- 变量传递:通过
variables字段传递的变量会成为全局流水线变量,所有Job都能访问;如果只想让test-job1访问,可改用job_variables字段(GitLab 13.10及以上版本支持)。 - Job过滤:通过
rules配置,只有当TRIGGER_TEST_JOB为true时才运行test-job1,其他Job会自动跳过,实现仅触发目标Job的效果。 - 变量命名:GitLab CI中变量通常使用大写,避免与系统内置变量冲突。
内容的提问来源于stack exchange,提问作者kishi
相关产品推荐
相关产品推荐

