GitLabCIの結果をGitHubにコミットする

2018-09-20  /  GitGitHubGitLab

hugoで生成したHTMLをコミットしたかったのでやってみた。

SSHのキーペアを作成する

既存のものは使い回したくないんで、新規に作成する。

$ ssh-keygen -f id_rsa_gl2gh

作った鍵は以下のように使用する。

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のログに残したいため。