GITLAB CI 管道,仅使用 git 标签运行作业
Posted
技术标签:
【中文标题】GITLAB CI 管道,仅使用 git 标签运行作业【英文标题】:GITLAB CI pipeline, run job only with git tag 【发布时间】: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
【问题讨论】:
好吧,我误解了你的问题。查看此链接:***.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 作业。
【参考方案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_TAG
与prod/*
发生变化,则计算结果为true
。因此,只有同时满足这两个条件时,才会将其添加到管道中。
rules:
- if: $CI_COMMIT_TAG
changes:
- prod/*
【讨论】:
【参考方案2】:如果我正确理解了这个问题,您不想在运行 sync_s3:prod
的情况下运行 sync_s3:nonprod
作业。 (?)
要实现这一点,在 sync_s3:nonprod
作业上,您应该能够从 sync_s3:prod
和 when: 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 作业。以上是关于GITLAB CI 管道,仅使用 git 标签运行作业的主要内容,如果未能解决你的问题,请参考以下文章
仅当 git 标签不以字符串“Release”或“Test”开头时才在 Gitlab CI 中启动管道