もがき系プログラマの日常

もがき系エンジニアの勉強したこと、日常のこと、気になっている技術、備忘録などを紹介するブログです。

CricleCIから踏み台サーバを経由して対象サーバへデプロイ

はじめに

こんばんは。

またまた備忘録です。

しかも今回はちょっとした小ネタレベルです。

関わったプロジェクトで、踏み台サーバを経由して本番サーバへデプロイしたいということになり、こんな感じで良いかな?という、以下の方法でまとまりました。

本題

1. CircleCIにPrivate Keyを登録する

CircleCI -> Settings -> Corporation -> ProjectのSSH Permissionsのページで、private keyを登録します。

f:id:kojirooooocks:20190513033154p:plain

2. CircleCI用に使用するssh configファイルを作成

# vi /path/to/project/.circleci/circleci_ssh_config

Host bastion_host
  HostName ************
  User     ************
  IdentityFile /home/circleci/.ssh/id_rsa_{sshkeyを登録した際に表示されるfingerprintsで、「:」を抜いたもの}
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null
Host prod_server
  HostName     ************
  User         ************
  IdentityFile /home/circleci/.ssh/id_rsa_{sshkeyを登録した際に表示されるfingerprintsで、「:」を抜いたもの}
  ProxyCommand ssh -W %h:%p bastion_host
  StrictHostKeyChecking no
  UserKnownHostsFile=/dev/null

3. CircleCIのconfig.ymlにsshkeyとsshconfigを登録する

executors:
  deploy:
    working_directory: ~/workspace

commands:
  # sshKeyをCircleCIのconfigに設定する
  deploy_ssh_setting:
    steps:
      - add_ssh_keys:
          fingerprints:
            - "{sshkeyを登録した際に表示されるfingerprints}"
      - run: cat ~/workspace/.circleci/circleci_ssh_config >> ~/.ssh/config

jobs:
  deploy:
    executor:
      name: deploy
    steps:
      - checkout
      - deploy_ssh_setting

これで一応狙ったことは出来ます。

以前あげたLaravel-Deployerでのデプロイでまさにこの方法でbackend_serverへデプロイしてます。

終わり

もっとスマートなやり方があればぜひ教えてくださいm( )m

小さなネタになりましたが、現場からは以上です。