以前、ECS/FargateでSSHするためのコンテナ(devops)を作るというブログを書きました。目的としては rails console
、aws cli
やブランチ切り替えてテストなど、ソースコードを配置してまるごとappコンテナと同じコンテナを作りたいため、毎回CircleCIでbuildするたびに設定を自動化する上で、githubの鍵ってどうやって配置するのかといろいろ調べていましたが、公式には書いておらず。。そこで Environment Variables
で環境変数として指定すると空白と改行が入ってしまい、非常に辛かったので SSH Permissions
の fingerprints
を使って実装してみました。
■SSH Permissions
https://circleci.com/docs/ja/2.0/add-ssh-key/
1 2 3 4 5 6 7 |
version: 2 jobs: deploy-job: steps: - add_ssh_keys: fingerprints: - "ハッシュ値を指定" |
1 2 |
circleci@19xxxxxxxxx:~/.ssh$ ls config id_rsa id_rsa_a1xxxxxxxxx id_rsa_circleci_remote_docker_engine known_hosts |
秘密鍵をまずはCircleCI >Settings > SSH Permissions
から秘密鍵を指定し、 Fingerprint
のハッシュ値をメモしてください。あとはconfig.ymlにハッシュ値を指定してあげれば、コンテナ内の ~/.ssh/id_rsa_a1xxxxxxxxx
と配置されます。あとはこれを頑張ってroot/.ssh配下に移動するように仕込むだけですね!
■CircleCI
- .circleci/config.yml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
## Pre build_and_push_docker_image_app_devops_stg: steps: - aws-ecr/build-and-push-image: account-url: AWS_ECR_ACCOUNT_URL_STG aws-access-key-id: AWS_ACCESS_KEY_ID_STG aws-secret-access-key: AWS_SECRET_ACCESS_KEY_STG region: AWS_REGION repo: 'app-stg' dockerfile: docker/stg/app/Dockerfile tag: "${CIRCLE_SHA1}" ~省略~ deploy_app_devops_stg: working_directory: ~/app executor: default steps: - setup_remote_docker - checkout - add_ssh_keys: fingerprints: - "ハッシュ値を指定" - run: name: find mv ssh key id_rsa,echo authorized_keys and copy config-ssh command: | find /home/circleci/.ssh -type f | grep '[0-9]' | xargs -I% mv % . \ && echo ${PUBLIC_KEY_PRE} >> authorized_keys \ && cp docker/stg/app/common/.ssh/config-ssh config-ssh ~省略~ - build_and_push_docker_image_app_devops_stg |
27行目のfindコマンドを使って正規表現(0-9)で ~/app
ディレクトリに移動してます。そこからDockerfileで以下のように id_rsa_a1xxxxxxxxx
をid_rsa_githubにファイル名を変更してます。
- Dockerfile
1 2 3 4 5 |
~省略~ # Add id_rsa_github RUN mv id_rsa_* id_rsa_github RUN mv id_rsa_github /root/.ssh/ RUN chmod 600 /root/.ssh/id_rsa_github |
- 確認
■まとめ
CircleCIはLinux力が試される…!!!
0件のコメント