CircleCIではcircleciコマンドをインストールすることで、ローカルのPCから.circleci/config.yml
ファイルの定義に基づいたジョブの実行を行うことができます。
ローカルでのテスト中でターゲットのサーバへログインするために、sshのキーファイルをdockerコンテナに受け渡したい場合があります。
この場合、以下のように--volumeオプションを指定して、ホストOS上のキーファイルをコンテナに渡すことができます。
ファイルの準備
まず、手元のPCの適当な場所にターゲットサーバへログインするためのSSHキーを設置します。
[localpc]$ ls /path/to/sshkey_dir
id_rsa
次に.circleci/config.ymlファイルを作成します。
今回はsshキーがデフォルトの設置場所である~/.ssh/id_rsa
にあることを前提として、sshコマンドやscpコマンドを書いています。
接続先サーバは環境変数で指定しています。
# .circleci/config.yml
version: 2
jobs:
build:
docker:
- image: circleci/python:3.6
steps:
- checkout
- run:
name: check key file
command: ls -al /home/circleci/.ssh
- run:
name: test ssh login.
command: ssh -oStrictHostKeyChecking=no -p ${PORT} ${USER}@${SERVER} ls -al
- run:
name: scp to server.
command: scp -rp -oStrictHostKeyChecking=no -P ${PORT} ~/project ${USER}@${SERVER}:${DIR}
circleciコマンドによる実行
準備ができたら、localのcircleciコマンドを実行してみます。
環境変数は--env
オプションで指定し、キーファイルは--volume
オプションでマウント元/先ディレクトリを指定することでコンテナに受け渡しています。
[localpc]$ circleci build \
--env SERVER=11.22.33.44 \
--env PORT=22 \
--env USER=ec2-user \
--env DIR=/usr/local/bin/app \
--volume /path/to/sshkey_dir:/home/circleci/.ssh
実行結果の例です。コマンドの出力よりsshコマンドによるターゲットサーバへのログインやscpでのコピーが行えたかを確認できます。
[localpc]$ circleci build \
--env SERVER=11.22.33.44 \
--env PORT=22 \
--env USER=ec2-user \
--env DIR=/usr/local/app \
--volume /path/to/sshkey_dir:/home/circleci/.ssh
Build-agent version 0.1.750-336e0196 (2018-09-13T19:48:06+0000)
Starting container circleci/python:3.6
using image circleci/python@sha256:af628d8a68ec537739541b80a60587dc77ccbaf8909482e4f8e6e0f673198f1b
Using build environment variables:
BASH_ENV=/tmp/.bash_env-localbuild-1552823340
CI=true
CIRCLECI=true
CIRCLE_BRANCH=master
CIRCLE_BUILD_NUM=
CIRCLE_JOB=build
CIRCLE_NODE_INDEX=0
CIRCLE_NODE_TOTAL=1
CIRCLE_REPOSITORY_URL=...
CIRCLE_SHA1=...
CIRCLE_SHELL_ENV=...
CIRCLE_WORKING_DIRECTORY=...
====>> check key file
#!/bin/bash -eo pipefail
ls -al /home/circleci/.ssh
total 16
drwxr-xr-x 5 circleci circleci 160 Mar 17 11:39 .
drwxr-xr-x 1 circleci circleci 4096 Mar 17 11:49 ..
-rw------- 1 circleci circleci 1679 Nov 23 08:23 id_rsa
====>> test ssh login.
#!/bin/bash -eo pipefail
ssh ${USER}@${SERVER} -oStrictHostKeyChecking=no ls -al
total 72
drwx------ 8 root root 4096 Mar 17 20:41 .
drwxr-xr-x 3 root root 4096 Mar 2 13:02 ..
====>> scp to server.
#!/bin/bash -eo pipefail
scp -rp -oStrictHostKeyChecking=no -P ${PORT} ~/project/ ${USER}@${SERVER}:${DIR}
...
Success!
こちらもおススメ