我们可以在 gitlab-ci.yml 中使用动态作业名称吗?

lep*_*eil 7 variables jobs continuous-integration dynamic gitlab

我必须从 jenkins 迁移到 gitlab,我希望能够使用动态作业名称,以便在管道摘要中直接获得一些信息,而无需单击每个作业等......在 jenkins 中,我们可以立即看到参数传递给我们的工作,这在 gitlab-ci 中不是这种情况。

我的测试运行器在 Windows 上,我尝试按如下方式定义 yml:

job_%myParam%:
  stage: build
  script:
    - set>varList.txt
  artifacts:
    paths:
    - varList.txt
Run Code Online (Sandbox Code Playgroud)

当我用 开始我的工作时%myParam%=true,该变量不会在工作名称中解释,因此它采用 job_%myParam% 的名称而不是预期的“job_true”。

这甚至可能吗?

谢谢:)

Phi*_*zen 7

现在可以通过Gitlab 15.11 中添加的作业输入参数来实现这一点

\n

job_fourtytwo为了达到您想要的结果 \xe2\x80\x93 例如,让您的作业在特定运行中动态命名:

\n
    \n
  1. 像这样定义你的工作:

    \n
    # jobs/dump_env.yaml\n\n"job_$[[ inputs.myParam ]]":\n  stage: build\n  script:\n  - set>varList.txt\n  artifacts:\n    paths:\n    - varList.txt\n
    Run Code Online (Sandbox Code Playgroud)\n
  2. \n
  3. myParam包含作业时设置:

    \n
    # e.g. ./.gitlab-ci.yml\n\ninclude:\n- local: jobs/dump_env.yml\n  inputs:\n    myParam: fourtytwo\n
    Run Code Online (Sandbox Code Playgroud)\n
  4. \n
\n
\n

您还可以为输入定义描述和默认值,如果包含中未提供输入,则将假定该描述和默认值:

\n
# jobs/dump_env.yaml\n\nspec:\n  inputs:\n    myParam:\n      description: My awesome custom job prefix\n      default: fourtytwo\n---\n"job_$[[ inputs.myParam ]]":\n# \xe2\x80\xa6\n
Run Code Online (Sandbox Code Playgroud)\n

请参阅定义可包含的 CI/CD 配置文件的输入参数博客文章或上面链接的 gitlab 文档参考以获取更多示例。

\n


Kin*_*ang 6

不,GitLab CI 中不可能有动态作业名称。


小智 6

从 gitlab 12.9 开始,这可以使用trigger子管道来完成——尽管有点涉及:

引用 gitlab 文档中的示例:

generate-config:
  stage: build
  script: generate-ci-config > generated-config.yml
  artifacts:
    paths:
      - generated-config.yml

child-pipeline:
  stage: test
  trigger:
    include:
      - artifact: generated-config.yml
        job: generate-config
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您将定义job_%myParam%in job.yml.in,然后将脚本设置generate-ci-configeg sed "s/%myParam%/$PARAM/g" job.yml.in

这当然只是更改名称可能有点多,而且它们将是与附加阶段相关的成本;但它确实回答了这个问题,并且可能有助于做更多事情,比如在同一管道中从不同版本的参数开始。

  • AFAICT 这种方法还应该允许在运行时完全动态地定义 Gitlab 作业,即不仅是它们的名称,还包括它们的作用。很不错! (2认同)