运行 gitlab-ci.yml 仅当合并请求到 master 时
Run gitlab-ci.yml only when merge request to master made
我目前在 GitLab 和 Heroku 中有我的项目。我想做的是,一旦我向我的功能分支请求合并请求(我们称之为 crud-on-spaghetti
),我想自动 运行 这个分支上的测试(npm test
基本上,使用 Mocha/Chai),在他们成功后,将此 crud-on-spaghetti
与 master
合并,提交并将其推送到 origin/master
(在 GitLab 上是远程的)和 [=18 之后=](基本上,将它推送到 Heroku 中的主分支,我的应用程序存储在那里)。我在 GitLab CI 上阅读了几篇文章,我认为这更适合我(而不是 Heroku CI,因为我没有 DEV 和 PROD 实例)。
所以,截至目前,我手动执行此操作。这是我现在的 .gitlab-ci.yml
文件(还不是 committed/pushed):
stages:
- test
- deploy
test_for_illegal_bugs:
stage: test
script:
- npm test
deploy_to_dev:
stage: deploy
only:
- origin master
script:
- git commit
- git push origin master
- git pull heroku master --rebase
- git push heroku master
因此,我的问题是:我究竟需要在 .gitlab-ci.yml
中写什么才能使所有这些 "manipulations"(上文)自动化?
PS。还有另一个(理论上的)后续问题:GitLab-CI Runner 是如何触发的?例如,如果我希望它在与 master 合并请求时触发,我是否使用 .gitlab-ci.yml
中的 only: ...
?
尝试
only:
- master
origin
只是遥控器的名称。 master
是分支的名称。
runner 由 GitLab 触发-CI 提交被推送到存储库的那一刻,可惜不是合并请求。
您可以使用 trigger
触发管道,然后从 integrations
中的合并请求事件调用该触发器。
限制合并请求的阶段:
要让您的 test
阶段仅在打开合并请求 (MR) 时执行,请使用
only:
- merge_requests
根据Gitlab docs,您可以进一步限制它只对具有特定目标分支的 MR 执行,例如只有 master
的 MR
only:
- merge_requests
except:
variables:
- $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != "master"
这为所有不是 master
的目标分支添加了一个例外。
或为此使用 rules:
:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
将阶段限制为分支:
正如@marcolz 已经提到的,这是通过
实现的
only:
- master
只执行推送到 master 分支的阶段。
我目前在 GitLab 和 Heroku 中有我的项目。我想做的是,一旦我向我的功能分支请求合并请求(我们称之为 crud-on-spaghetti
),我想自动 运行 这个分支上的测试(npm test
基本上,使用 Mocha/Chai),在他们成功后,将此 crud-on-spaghetti
与 master
合并,提交并将其推送到 origin/master
(在 GitLab 上是远程的)和 [=18 之后=](基本上,将它推送到 Heroku 中的主分支,我的应用程序存储在那里)。我在 GitLab CI 上阅读了几篇文章,我认为这更适合我(而不是 Heroku CI,因为我没有 DEV 和 PROD 实例)。
所以,截至目前,我手动执行此操作。这是我现在的 .gitlab-ci.yml
文件(还不是 committed/pushed):
stages:
- test
- deploy
test_for_illegal_bugs:
stage: test
script:
- npm test
deploy_to_dev:
stage: deploy
only:
- origin master
script:
- git commit
- git push origin master
- git pull heroku master --rebase
- git push heroku master
因此,我的问题是:我究竟需要在 .gitlab-ci.yml
中写什么才能使所有这些 "manipulations"(上文)自动化?
PS。还有另一个(理论上的)后续问题:GitLab-CI Runner 是如何触发的?例如,如果我希望它在与 master 合并请求时触发,我是否使用 .gitlab-ci.yml
中的 only: ...
?
尝试
only:
- master
origin
只是遥控器的名称。 master
是分支的名称。
runner 由 GitLab 触发-CI 提交被推送到存储库的那一刻,可惜不是合并请求。
您可以使用 trigger
触发管道,然后从 integrations
中的合并请求事件调用该触发器。
限制合并请求的阶段:
要让您的 test
阶段仅在打开合并请求 (MR) 时执行,请使用
only:
- merge_requests
根据Gitlab docs,您可以进一步限制它只对具有特定目标分支的 MR 执行,例如只有 master
only:
- merge_requests
except:
variables:
- $CI_MERGE_REQUEST_TARGET_BRANCH_NAME != "master"
这为所有不是 master
的目标分支添加了一个例外。
或为此使用 rules:
:
rules:
- if: '$CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "master"'
将阶段限制为分支:
正如@marcolz 已经提到的,这是通过
实现的 only:
- master
只执行推送到 master 分支的阶段。