🎃

Circle CI の デプロイ用コンテナにSSHする手順

に公開

Circle CIではデプロイ用コンテナが動的に作成されます。デフォルトでGitHubやBitBucket連携を行った場合はその環境上でコンテナが作成されますし、セルフホストランナーといわれる別のローカル環境(といってもほとんどの場合はどこかのクラウドになると思います)を用いることも可能です。

デプロイがしっぱした際、CircleCI上で実行ログが確認できますが、時にはSSHで直接環境にログインを行い原因を調査したい時があり、このためにSSH付きでデプロイ用コンテナを起動させることが可能です。

https://circleci.com/docs/ssh-access-jobs/
こちらに手順があるのですが、GitHubとのSSH連携手順が抜けており、これだけでは作業がお行えないため以下に完全版の手順をメモしておきます。

さっそくやってみる

0. 環境準備

まずはDeployが失敗するワークフローを作成します。以下のブログを参考にLambdaのDeployが成功する環境を整えた後CircleCIから環境変数設定を削除しておけば一番簡単です。
https://zenn.dev/kameoncloud/articles/641dbdd496a59d

1. SSH の鍵生成

では次にDeploy用コンテナへログインするためのSSH鍵を生成します。

ssh-keygen -t rsa -b 4096 -f my_circleci_key

パスフレーズは空欄のままでよいので何も入力せずにEnterを押します。
my_circleci_key,my_circleci_key.pub2つのファイルが生成されます。

2. Github への鍵登録

https://circleci.com/docs/ssh-access-jobs/
の手順にはその記載がなかったのですが、Deploy用コンテナはGitHub上で作成されるため、GitHubにあらかじめSSHでログインできるようになっている必要があります。
Settingsをクリックします。

左ペインのDeploy keysをクリックします。

Add deploy keyをクリックします。

適当な名前を付けて先ほど作成されたmy_circleci_key.pubの中身を貼り付けて保存します。

3. CircleCI への鍵登録

次にGitHubに登録した公開鍵と同じ内容をCircleCIに登録します。
画面右上のUser Settingsをクリックします。

左ペインからJob SSH KeysをクリックしAdd SSH Keysをクリックします。

無事鍵が登録されています。

4. 失敗したジョブの再起動

意図的に失敗したWorkflowの画面からjobを特定してクリックします。


Step3が正しく成功しているとRerun job with SSHが選択可能となっており実行します。

以下の様にSSH環境の構築がステップとして増えています。

Wait for SSH sessionをクリックするといかが表示されます。

You can now SSH into this box if your SSH public key is added:
    $ ssh -p 42285 107.22.10.237

Use the same SSH public key that you've added in your User Settings or that you use for your VCS-provider (e.g., GitHub).

Job SSH keys can be added in your User Settings at https://app.circleci.com/settings/user/job-ssh-keys

Host keys:
- SHA256:xxxx (rsa-sha2-512)
- SHA256:xxxx (rsa-sha2-256)
- SHA256:xxxx (RSA)
- SHA256:xxxx (ED25519)
Authorized keys:
- SHA256:xxxx (RSA)

This box will stay up for 2h0m0s, or until 10m0s passes without an active SSH session.

この環境は2時間維持されますが、ログインしないと10分で破棄されるようになっています。

5. SSH でログイン

ssh -p 42285 107.22.10.237をログイン用IPアドレスが出ていますが、そのまえにGitHubへのSSHを行います。
C:\\Users\\h.kameda/.ssh/に先ほど作成されたmy_circleci_keyid_rsaという名前にリネームして配置します。
このパスの場所は環境ごとに異なりますが、不明な方はssh -vT git@github.comを実行してください。
この状態でsshログインを実行するとペアとなっている秘密鍵が特定されDeploy用コンテナ環境にログインが可能です。

ssh -p 42285 107.22.10.237
circleci@3612b255c5ee:~$
circleci@3612b255c5ee:~$ ls
bin  project
circleci@3612b255c5ee:~$ cd project/
circleci@3612b255c5ee:~/project$ ls
aws  awscliv2.zip  index.mjs  node_modules  package.json  package-lock.json  README.md  template.yaml  test-local.js

Discussion