TL/DR:
我的目标是拥有一个 Gitlab (CE-12.4.2) 管道,它只在合并请求上执行一些作业,而其他作业始终(在合并请求和所有正常推送上)。怎么.gitlab-ci.yml看才能做到这一点?
我的用例: 我有一个运行大量作业的大管道(测试、验证、dep、构建、doc 等)。现在我已经添加了一个登台环境(使用 kubernetes)并让管道构建一个新的映像并将其部署在登台环境中。这使我可以立即打开更改后的(网络)应用程序并查看更改的行为和外观,而无需在本地检查它们。现在构建映像并将其部署到登台对于每次推送都会占用大量资源,因此我只希望在有人创建合并请求供我查看时部署到登台。
一个非常简单的例子:
install:
script: ...
test:
script: ...
build-image:
script: ...
only: [merge_requests]
deploy-staging:
script: ...
only: [merge_requests]
Run Code Online (Sandbox Code Playgroud)
对于所有正常推送,应执行作业install和test。
对于合并-要求,工作install,test,build-image并deploy-staging应执行。
我尝试过的: Gitlab 具有only: [merge_requests]在作业上定义的此功能,这会导致仅在为合并请求执行管道时才执行该作业。听起来正是我正在寻找的,但有一个很大的问题。一旦将该属性应用于管道中的一个作业,该管道中没有该属性的所有其他作业将在合并请求中执行时从管道中删除。起初对我来说这似乎是一个错误,但实际上是记录在案的行为:
In the above example, the pipeline contains only a test job. Since the build and deploy jobs don’t have the only: [merge_requests] parameter, they will not run in the merge …Run Code Online (Sandbox Code Playgroud)