web-dev-qa-db-ja.com

ビルドが成功したときにGitlabランナーマージコードをブランチにするにはどうすればよいですか?

さて、タイトルはほとんど自明です。

要約すると、ビルドが成功した場合、ブランチ(つまり、dev)を別のブランチ(つまり、本番)にマージする必要があります。

7
StLia

最も簡単な解決策は、マージリクエストを作成し、[パイプラインが成功したときにマージ]ボタンをクリックすることです。これにより、ビルド後にブランチがマージされます。これは私がお勧めするものです。

以下は、自動マージにはお勧めしない実用的なソリューションです。書き込みアクセス権を持つデプロイキーを作成し、秘密キーをプロジェクト変数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
7
Jakub Kania

@ jakub-kaniaソリューションを試しましたが、常にid_rsa invalid format。 gitlabの秘密変数はどういうわけかねじ込まれていると思います。

Sshキーを作成せずに、デプロイメントキーをssh-addに直接渡すことで機能させました。これが実用的な解決策です:

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
7
karser

GitLabバージョン8.15の時点では、これを行う簡単な方法はありません。これを行う唯一の方法は、APIとWebhookを活用することです。

これはあなたがしなければならないことの基本的な要点です:

1 . Webhookを作成 プッシュイベントをフックします。

2.プッシュがマージを実行するブランチに属しているかどうかを確認します。

3 . マージを作成 リクエストしてすぐに 受け入れる オプション"merge_when_build_succeeds": true

このようにして、ビルドが成功した場合にブランチをマージします。セットアップが最も快適なものではありませんが、機能するはずです。

1
Fairy