【问题标题】:GITLAB CI pipeline, run job only with git tagGITLAB CI 管道,仅使用 git 标签运行作业
【发布时间】:2022-01-03 18:28:31
【问题描述】:

需要 GitLab 专家的帮助。我在下面有一个以下管道。 我希望“sync_s3:prod”作业只有在我推送新的 git 标签时才会运行。但是gitlab同时触发了 工作。为什么它的行为是这样的?我只为一项工作创建 $git_commit_tag 规则。有什么想法吗?

stages:
  - sync:nonprod
  - sync:prod

.sync_s3:
  image:
    name: image
    entrypoint: [""]
  script:
    - aws configure set region eu-west-1
    - aws s3 sync ${FOLDER_ENV} s3://img-${AWS_ENV} --delete

sync_s3:prod:
  stage: sync:prod
  rules:
    - if: $CI_COMMIT_TAG
      changes:
        - prod/*
  extends: .sync_s3
  variables:
    AWS_ENV: prod
    FOLDER_ENV: prod/
  tags:
    - gaming_prod

sync_s3:nonprod:
  stage: sync:nonprod
  rules:
    - changes:
        - pp2/*
  extends: .sync_s3
  variables:
    AWS_ENV: nonprod
    FOLDER_ENV: pp2/
  tags:
    - gaming_nonprod

【问题讨论】:

  • 好吧,我误解了你的问题。查看此链接:stackoverflow.com/questions/42796018/…
  • But gitlab trigger both jobs 什么时候?在标签管道上还是在提交管道上?
  • @KamilCuk 当我执行“git push origin newtag”时,它会触发这两个工作。但正如你所见,我只为一项工作编写了这条规则。
  • 所以你推送了一个标签?您说I expect "sync_s3:prod" job will run only when i will push new git tag,这是真的,您的工作是在标签上运行的,似乎您的要求得到了满足。所以你想在标签上运行other作业?
  • 是的,我不想在标签上运行其他作业。我想要完全执行的操作: - 仅当我更改“pp2”文件夹中的文件时才运行非生产作业。 - 仅当有新的 git 标签时才运行 prod 作业。

标签: gitlab gitlab-ci pipeline cicd


【解决方案1】:

正如@slauth 在他的answer 中已经提到的,规则需要在管道的每个步骤中进行调整。我仅将此作为答案发布,作为上述原始答案的补充。 为了防止在存在 git-tag 时运行管道步骤,您需要为相应的作业显式设置规则。

stages:
  - sync:nonprod
  - sync:prod

.sync_s3:
  image:
    name: image
    entrypoint: [""]
  script:
    - aws configure set region eu-west-1
    - aws s3 sync ${FOLDER_ENV} s3://img-${AWS_ENV} --delete

sync_s3:prod:
  stage: sync:prod
  rules:
    - if: $CI_COMMIT_TAG
      changes:
        - prod/*
  extends: .sync_s3
  variables:
    AWS_ENV: prod
    FOLDER_ENV: prod/
  tags:
    - gaming_prod

sync_s3:nonprod:
  stage: sync:nonprod
  rules:
    - changes:
        - pp2/*
    - if: $CI_COMMIT_TAG
      when: never
  extends: .sync_s3
  variables:
    AWS_ENV: nonprod
    FOLDER_ENV: pp2/
  tags:
    - gaming_nonprod

进一步说明:

以下rule 的计算结果类似于逻辑与,因此如果$CI_COMMIT_TAGprod/* 发生变化,则计算结果为true。因此,只有同时满足这两个条件时,才会将其添加到管道中。

rules:
    - if: $CI_COMMIT_TAG
      changes:
        - prod/*

【讨论】:

    【解决方案2】:

    如果我正确理解了这个问题,您不想在运行 sync_s3:prod 的情况下运行 sync_s3:nonprod 作业。 (?)

    要实现这一点,在 sync_s3:nonprod 作业上,您应该能够从 sync_s3:prodwhen: never 复制相同的规则:

    stages:
      - sync:nonprod
      - sync:prod
    
    .sync_s3:
      image:
        name: image
        entrypoint: [""]
      script:
        - aws configure set region eu-west-1
        - aws s3 sync ${FOLDER_ENV} s3://img-${AWS_ENV} --delete
    
    sync_s3:prod:
      stage: sync:prod
      rules:
        - if: $CI_COMMIT_TAG
          changes:
            - prod/*
      extends: .sync_s3
      variables:
        AWS_ENV: prod
        FOLDER_ENV: prod/
      tags:
        - gaming_prod
    
    sync_s3:nonprod:
      stage: sync:nonprod
      rules:
        - if: $CI_COMMIT_TAG
          changes:
            - prod/*
          when: never
        - changes:
            - pp2/*
      extends: .sync_s3
      variables:
        AWS_ENV: nonprod
        FOLDER_ENV: pp2/
      tags:
        - gaming_nonprod
    

    【讨论】:

    • 我想要完全执行的操作: - 仅当我更改“pp2”文件夹中的文件时才运行非生产作业。 - 仅当有新的 git 标签时才运行 prod 作业。
    猜你喜欢
    • 1970-01-01
    • 2021-12-17
    • 2022-11-04
    • 2020-10-26
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-12
    • 1970-01-01
    相关资源
    最近更新 更多