如何在来自任何分支的合并请求中触发gitlab-ci中的作业以开发/掌握?

时间:2018-12-28 16:17:57

标签: continuous-integration gitlab-ci gitlab-ci-runner

我是gitlab-ci的新手,我想根据对gitlab进行的操作在远程服务器(我使用ssh)上启动一些脚本。有2个脚本:

  1. 比方说脚本A,当从任何分支到develop分支的合并请求被接受时;
  2. 然后,当从任何分支到master分支接受合并请求时,我想执行脚本B。

我已经尝试过的是按照文档中的建议hereonly: [merge_requests]文件中使用.gitlab-ci.yml关键字,但是它没有用,因为没有触发作业。

这是我的文件:

before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - eval $(ssh-agent -s)
  - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
  - mkdir -p ~/.ssh
  - chmod 700 ~/.ssh
  - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
  - chmod 644 ~/.ssh/known_hosts


build:
   stage: build
   tags:
    - alextag
  only:
    - merge_requests
  script:
    - echo "Check if merge_request working here"

test:
  stage: test
  only:
    - branches
  tags:
    - alextag
  script: 
    - sh alex2.sh
    - echo "$USER"

test作业中的脚本与当前分支上的每次提交/推送一样工作正常,但是当我合并到另一个分支或开发/掌握时,build作业不会触发。

您知道如何使此功能起作用吗?欢迎任何帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

我终于找到了解决问题的办法。我正在使用的Gitlab实例的版本为 11.4 ,但是在版本 11.6中引入了merge_requests作业属性。
请参阅Pipeline for merge request和与该功能关联的issue

请注意,此属性仅在合并请求为created时触发作业,而不在合并请求为accepted/merged时触发作业。您可以使用gitlab api获取有关合并请求的所有信息。