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:****
