【问题标题】:How to trigger a specific job in gitlab如何在 gitlab 中触发特定作业
【发布时间】:2019-11-04 02:12:16
【问题描述】:

我想在管道中运行一个特定的作业,我认为为该作业分配一个标签,然后在 post 方法中再次指定这个标签将满足我的需求。问题是当我使用 api(post) 触发时,管道中的所有作业都是触发事件,尽管只有其中一个标记为 .

gitlab-ci.yml:

工作1: 脚本: - 回声“你好世界!” 标签:[myTag]

工作2: 脚本: - 回声“你好 gitlab!”


API 调用: curl -X POST -F token="xxx" -F ref="myTag" https://gitlab.com/api/v4/projects/12345678/trigger/pipeline

【问题讨论】:

    标签: post tags gitlab gitlab-ci gitlab-ci-runner


    【解决方案1】:

    向您的触发器 api 调用添加一个变量,如下所示:

    https://docs.gitlab.com/ee/ci/triggers/#making-use-of-trigger-variables

    然后使用only 属性 在您的 gitlab.yml 文件中 如图所示:

    https://docs.gitlab.com/ee/ci/variables/#environment-variables-expressions

    那么只有当变量存在时才会执行作业

    例如

    job1:
      script: echo "HELLO"
      only:
        variables:
          - $variables[API_CALL]=true
    

    【讨论】:

    • 非常感谢,但我真正想要的是从 api 中选择工作(将其作为参数传递)。
    • 据我所知这是不可能的。
    • 按照docs.gitlab.com/ee/ci/variables/…应该是only: variables: - API_CALL == "true"
    • 取决于你的 gitlab 版本,答案差不多一年了
    • 嘿,如何为 curl 请求定义可变变量?
    【解决方案2】:

    GitLab 中的更改可能使上述答案不起作用。

    only:
      variables:
        - $variables[....]
    

    语法触发 CI Lint。

    对于像我一样来到这里的其他人,这是我触发特定工作的方式:

    job1:
      script: 
        - echo "HELLO for job1"
        - "curl 
          --request POST
          --form token=$CI_JOB_TOKEN
          --form ref=master
          --form variables[TRIGGER_JOB]=job2
          https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/trigger/pipeline"
      except:
        - pipelines
    
    job2:
      script: echo "HELLO for job2"
      only:
        variables:
          - $TRIGGER_JOB == "job2"
    

    ⚠️ 请注意 job1 中的 except - pipelines,否则,您将进入无限子管道循环!

    【讨论】:

      【解决方案3】:

      通过使用变量你可以做到:

      使用此 curl 命令通过变量触发管道

      curl --request POST --form token=${TOKEN} --form ref=master --form "variables[TRIGERRED_JOB]=job1" "https://gitlab.com/api/v4/projects/${CI_PROJECT_ID}/trigger/pipeline"
      

      当然你必须相应地设置变量。

      用适当的变量定义你的工作:

      job1:
        script: echo "HELLO for job1"
        only:
          variables:
            - $variables[TRIGERRED_JOB] == "JOB1"
      
      job2:
        script: echo "HELLO for job2"
        only:
          variables:
            - $variables[TRIGERRED_JOB] == "JOB2"
      

      如果您从另一个/相同的作业中运行 curl,您可以使用 ${CI_JOB_TOKEN} 而不是 $TOKEN 和

      https://docs.gitlab.com/ee/ci/triggers/#making-use-of-trigger-variables

      【讨论】:

        猜你喜欢
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-09
        • 2017-10-10
        • 2022-12-09
        • 1970-01-01
        • 2018-05-15
        相关资源
        最近更新 更多