如何在成功构建时将Gitlab runner合并代码转换为分支

StL*_*Lia 7 git merge gitlab gitlab-ci-runner

那么标题几乎是不言自明的.

总之,如果构建成功,我希望将分支(即dev)合并到另一个分支(即生产).

如果你想知道为什么,请看看这个问题:https:
//stackoverflow.com/questions/42109335/gitlab-runner-starts-merge-automate-merge?noredirect=1#comment71394445_42109335

kar*_*ser 7

我尝试了@ jakub-kania解决方案,但我总是得到id_rsa invalid format.我认为gitlab秘密变量以某种方式被搞砸了.

我通过直接将部署密钥传递给ssh-add而不创建ssh密钥来实现它.这是工作解决方案:

merge to master:
  stage: deploy
  image: alpine
  only:
    - dev-branch
  before_script:
    - apk add --update git openssh-client
    - mkdir ~/.ssh
    - ssh-keyscan -p 2222 <gitlab.domain.com> > ~/.ssh/known_hosts
    - eval `ssh-agent -s`
    - ssh-add <(echo "$GITLAB_DEPLOY_KEY")
    - ssh -T git@<gitlab.domain.com> -p 2222
    - git config --global user.email "$GITLAB_USER_EMAIL"
    - git config --global user.name "$GITLAB_USER_ID"
    - git remote set-url origin ssh://git@<gitlab.domain.com>:2222/path/to/repo.git
  script:    
    - git checkout master
    - git reset --hard origin/master
    - git merge $CI_BUILD_REF
    - git push origin master
Run Code Online (Sandbox Code Playgroud)

  • 此外 `&lt;(...)` 是一个 bash 特性,在 alpine 中不起作用,因为它有一个 `sh` shell。使用`echo "$GITLAB_DEPLOY_KEY" | ssh-add -` 代替 (3认同)
  • 可能值得一提的是 $CI_BUILD_REF 已被折旧,您应该使用 $CI_COMMIT_REF_NAME 代替。 (2认同)

Jak*_*nia 6

最简单的解决方案是创建一个Merge Request并单击"Pipeline Succeeds时合并"按钮,这将在构建后合并分支.这是我推荐的那个.

以下是我不推荐用于自动合并的工作解决方案.它要求您创建具有写访问权限的部署密钥,并将私钥保存为项目变量GITLAB_DEPLOY KEY,也可以ssh-keyscan在服务器上执行并将其保存到GITLAB_PUBLIC_KEY变量.

mergetomaster:
  stage: deploy
  image: alpine
  only:
   - dev
  script:
   - apk add --update git openssh-client
   - mkdir ~/.ssh
   - echo $GITLAB_DEPLOY_KEY > ~/.ssh/id_rsa
   - chmod 400 ~/.ssh/id_rsa
   - echo $GITLAB_PUBLIC_KEY > ~/.ssh/known_hosts
   // Steal the identity of person that triggered the build
   - git config --global user.email "$GITLAB_USER_EMAIL"
   - git config --global user.name "$GITLAB_USER_ID"
   - git remote set-url origin <ssh-repository-url>
   - git checkout master
   - git reset --hard origin/master
   - git merge $CI_BUILD_REF
   - git push origin master
Run Code Online (Sandbox Code Playgroud)


Fai*_*iry 3

从 GitLab 8.15 版本开始,没有简单的方法可以做到这一点。实现此目的的唯一方法是利用 API 和 Webhooks。

这是您必须做的基本要点:

1.创建一个用于挂钩推送事件的Webhook 。

2.检查推送是否属于您要合并的分支。

3.创建合并请求并立即使用选项接受它"merge_when_build_succeeds": true。

这样,如果构建成功,它将合并分支。设置起来并不是最舒服的事情,但它应该可以工作。