仅当合并请求到master时才运行gitlab-ci.yml

时间:2017-05-24 15:19:06

标签: node.js heroku gitlab gitlab-ci

我目前正在 GitLab Heroku 中拥有我的项目。我想要做的就是当我向我的功能分支请求合并请求时(让我们称之为crud-on-spaghetti),我想在这个分支上自动运行测试(npm test基本上,使用Mocha / Chai),在成功之后,将crud-on-spaghettimaster合并,提交并将其推送到origin/master(在GitLab上远程)和git push heroku master之后(基本上,将它推送到Heroku中的主分支,我的应用程序存储在那里)。我已经阅读了几篇关于GitLab CI的文章,我认为这更适合我(而不是Heroku CI,因为我没有DEV和PROD实例)。

所以,截至目前,我是手动完成的。现在这是我的.gitlab-ci.yml文件(尚未提交/推送):

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中我需要写什么才能自动化所有这些"操作" (上图)?

PS。另一个(理论上的)后续问题:GitLab-CI Runner是如何触发的?例如,如果我希望它在与主服务器合并请求时触发,我是否使用only: ...中的.gitlab-ci.yml执行此操作?

2 个答案:

答案 0 :(得分:3)

尝试

only:
  - master

origin只是遥控器的名称。 master是分支的名称。

在将提交推送到存储库的时刻,GitLab-CI会触发转轮,因此不会在合并请求时发生。

您可以使用trigger触发管道,然后在integrations中的合并请求事件中调用该触发器。

答案 1 :(得分:3)

限制合并请求的阶段:

要仅在打开合并请求(MR)时执行test阶段,请使用

   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分支的阶段。