CircleCI 上のリポジトリでは、最初から以下のようなリモート設定がされているようです。
origin git@github.com:user/repo.git (fetch)
origin git@github.com:user/repo.git (push)
さてこの方法には以下のような方法があります。
GitHub Personal Access Token を使う (2020-01 追記)
ssh を使う
GitHub Personal Access Token
こっちのほうが楽かもしれない。
準備
まず、GitHub で Personal Access Token を取得します。もし対象のリポジトリがプライベートならrepo
にチェック、パブリックならpublic_repo
にだけチェックを入れトークンを生成します。
step で push する
git push
を実行するには、 git ユーザーのメールと名前は最低限設定する必要があるのでそれらを設定します。またorigin
は上記の通りgit@...
となっているのでhttps:
スキーマの方にユーザー情報を付け加えたやつに変更します。変更するコマンドは以下です。
git remote set-url origin <新URL>
その後はこのorigin
に向かってgit push
するだけです。
steps:
- ...
- run:
name: git push
command: |
git config --global user.email "$GIT_AUTHOR_EMAIL"
git config --global user.name "$GIT_AUTHOR_NAME"
git remote set-url origin https://$GIT_AUTHOR_NAME:$GITHUB_PERSONAL_ACCESS_TOKEN@github.com//.git
git push origin master:****
ssh
github.com に ssh できるようにする
対象のプロジェクトの設定の
SSH Permissions
Add SSH Key
から以下のように「Hostname」にはgithub.com
を設定し、「Private Key」には自分がいつも使っている秘密鍵の内容をコピペして追加します。
一覧画面のそのホストの行にフィンガープリントが一緒に置いてあるはずなのでそれをコピーしておきます。
.circleci/config.yaml の編集
ssh
時に鍵認証できる必要があるので.ssh/config
を編集する必要があります。これにはsteps
でadd_ssh_keys
を設定しておきます。以下のような感じです。
jobs:
- checkout
- add_ssh_keys:
fingerprints:
- '**:**:**:**:**:**:**:**:**:**:**:**:**:**:**:**'
この'**:**:...
の部分に先ほどコピーしたフィンガープリントを置きます。これでここを実行した時に~/.ssh/config
に以下のような設定が追加されます。
Host github.com
IdentitiesOnly yes
IdentityFile /home/circleci/.ssh/id_rsa_********************************
step で push する
git push
を実行するには、 git ユーザーのメールと名前は最低限設定する必要があるのでそれらを設定した上でgit push
します。
steps:
- ...
- run:
name: git push
command: |
git config --global user.email "$GIT_AUTHOR_EMAIL"
git config --global user.name "$GIT_AUTHOR_NAME"
# add とかするならここで
export GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"
git push origin master:****