circleciコマンドのlocal実行でsshキーをコンテナに渡す

カテゴリ: CircleCI

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!
こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。