さて、タイトルはほとんど自明です。
要約すると、ビルドが成功した場合、ブランチ(つまり、dev)を別のブランチ(つまり、本番)にマージする必要があります。
最も簡単な解決策は、マージリクエストを作成し、[パイプラインが成功したときにマージ]ボタンをクリックすることです。これにより、ビルド後にブランチがマージされます。これは私がお勧めするものです。
以下は、自動マージにはお勧めしない実用的なソリューションです。書き込みアクセス権を持つデプロイキーを作成し、秘密キーをプロジェクト変数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
@ 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
GitLabバージョン8.15の時点では、これを行う簡単な方法はありません。これを行う唯一の方法は、APIとWebhookを活用することです。
これはあなたがしなければならないことの基本的な要点です:
1 . Webhookを作成 プッシュイベントをフックします。
2.プッシュがマージを実行するブランチに属しているかどうかを確認します。
3 . マージを作成 リクエストしてすぐに 受け入れる オプション"merge_when_build_succeeds": true
。
このようにして、ビルドが成功した場合にブランチをマージします。セットアップが最も快適なものではありませんが、機能するはずです。