GitLabCIの結果をGitHubにコミットする
hugoで生成したHTMLをコミットしたかったのでやってみた。
SSHのキーペアを作成する
既存のものは使い回したくないんで、新規に作成する。
$ ssh-keygen -f id_rsa_gl2gh
作った鍵は以下のように使用する。
- 公開鍵 -> GitHubのDeploy keyとして設定する
- 秘密鍵 -> GitLab CIのVariableに設定する
GitHubでのDeploy keyの設定
コミットしたいリポジトリの設定から、作成した公開鍵をDeploy keyに追加する。
追加したあと、SSHで接続の確認をする。
$ ssh -i id_rsa_gl2gh [email protected]
PTY allocation request failed on channel 0
Hi kawaken/kawaken.me! You've successfully authenticated, but GitHub does not provide shell access.
Connection to github.com closed.
普段使っている鍵と違い、ユーザ名と特定のリポジトリ名が表示されている。
GitLabCIのVariableの設定
GitLabCIでは実行中の環境変数を外部から設定できるようになっている。プロジェクトのSettings -> CI/CD
のVariableの設定に、Key/Valueの組み合わせを登録する。
Key名をSSH_PRIVATE_KEY
にして、秘密鍵を登録する。
UI上は短い一行の値しか入力できないように見えるが、複数行の内容でも問題なく設定できる。
GitLab CIの設定
Using SSH keys with GitLab CI/CD | GitLab におおまかな手順は載っているが、ちょっと修正が必要になる。
自分は以下のような設定になった。
before_script:
# SSH用のディレクトリ作成
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
# github.comのSSH host keysを保存する
- apt-get update -y && apt-get install openssh-client -y
- ssh-keyscan -t rsa github.com >> ~/.ssh/known_hosts
# ssh-agentの設定
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
# git のユーザ情報設定
- git config --global user.email "[email protected]"
- git config --global user.name "Kentaro Kawano"
to_github:
stage: build
script:
- rm -fr public
- git clone [email protected]:kawaken/kawaken.me.git public
- hugo
- cd public
- export MESSAGE="update $(date +'%F %T')"
- git add -A .
- git status
- git commit -m "${MESSAGE}"
- git push origin master
only:
- master
更新対象のリポジトリをhugoの出力ディレクトリとし、変更をすべてコミット&プッシュするようにした。
git status
を途中で実行しているのは、何が対象となったかをGitLabのJobのログに残したいため。