CircleCIからGitHubへのPushする時のToken周りのこと
CircleCIなどCI環境で何かしらのスクリプトを実行し、GitHubのrepositoryにpushしたい/pullしたい時のCircleCI/GitHubの設定周りについてのメモ。
何も設定せずにgit push
など書き込み系のコマンドを実行するとThe key you are authenticating with has been marked as read only.
のエラーで失敗する。
git push -f "https://${GITHUB_TOKEN}@github.com/owner/repository.git" HEAD:branch
のコマンドを使えば無事pushは成功する。
今回 releases-hub-gradle-plugin を使う時、plugin内で git push
を実行しているところにAPI tokenを使った形で実装されていないため、CircleCIとGitHub側にSSH keyを登録する必要があった。
GitHub and Bitbucket Integration - CircleCI
手順はこちらに書いてある通りだが補足してメモしておくと
ssh keyを作成する
ssh keyを作成する(手元の環境で実行するでOK)
ssh-keygen -m PEM -t rsa -C "your_email@example.com"
GithubでDeploy Keyを設定
PushしたいGitHub RepositoryのSetting -> Deploy Keyから Add Deploy Key
さきほど作成したssh keyの公開鍵(id_rsa.pub)を使ってDeploy Keyを作成。(Allow Write Accessにcheckをいれて作成する)
CircleCIでAdd SSH Key
CircleCI側のrepository settingのページで SSH Permissions
から Add SSH Key
Hostnameに github.com
を入力し 秘密鍵(id_rsa)を入力する。
config.ymlでadd_ssh_keys
CircleCI/GitHubで公開鍵/秘密鍵を作成した後共にFingerprintが出力されるので、.circleci/config.yml
に設定する。
update_library_version: <<: *android_env steps: - add_ssh_keys: fingerprints: - "a8:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX" - checkout - *extend_path - run: ./gradlew upgradeDependencies -PgitHubWriteToken=$GITHUB_TOKEN
今回 upgradeDependencies
の中で git push
する必要があったのでそのjobに add_ssh_keys
を設定した。