【CI/CD】GCEにdocker-composeをデプロイする by GithubActions

SSH鍵を作成(ローカル)

// bambootunaは任意のユーザー名
$ ssh-keygen -t rsa -f ~/.ssh/my-ssh-key -C bambootuna
  • ~/.ssh/my-ssh-key
  • ~/.ssh/my-ssh-key.pub
    ができる

GCEにSSHの公開鍵を設定する

~/.ssh/my-ssh-key.pubの内容をGCEセキュリティーにペースト

GCE作成時にSSH公開鍵を設定する

なおGCEの使用イメージは

GCEの使用イメージ

CIのシークレット環境変数にSSH鍵をセット

SSHKey: ~/.ssh/my-ssh-keyをbase64エンコードした文字列
SSHKeyPub: ~/.ssh/my-ssh-keyをbase64エンコードした文字列
をそれぞれセット

※base64エンコード
base64 -i [ファイルパス]

workflow作成

name: Deploy docker-compose to GCE

on:
  push:
    branches: [ master ]

jobs:
  build-deploy:
    name: Build Deploy
    runs-on: ubuntu-latest
    steps:
      - name: Check out code
        uses: actions/checkout@v2
      - name: Setup SSH
        run: |
          # 初期状態では.sshがなかったので作成
          mkdir ~/.ssh
          # SSH鍵を環境変数からデコード
          echo ${SSH_KEY} | base64 -d > ~/.ssh/my-ssh-key
          echo ${SSH_KEY_PUB} | base64 -d > ~/.ssh/my-ssh-key.pub
          chmod 600 ~/.ssh/my-ssh-key
          eval "$(ssh-agent -s)"
          ssh-keyscan -H ${SERVER_HOST} >> ~/.ssh/known_hosts
          ssh-add ~/.ssh/my-ssh-key
        env:
          SSH_KEY: ${{ secrets.SSHKEY }}
          SSH_KEY_PUB: ${{ secrets.SSHKEYPUB }}
          SERVER_HOST: 35.111.111.111 # 接続先のGCEの外部IP
      - name: Deploy
        run: |
          ssh worker@${SERVER_HOST} -i ~/.ssh/my-ssh-key 'bash -s' < deploy.sh ${GIT_REPOSITORY}
        env:
          SERVER_HOST: 35.111.111.111 # 接続先のGCEの外部IP
          GIT_REPOSITORY: https://github.com/dockersamples/example-voting-app

デプロイ用シェルスクリプト作成

#!/bin/bash

# 第一引数はgitリポジトリを指定(以下例)
# sh deploy.sh https://github.com/dockersamples/example-voting-app

# 初回のみClone、以降はPullする
if cd app; then
  git pull;
else
  git clone $1 app;
  cd app
fi

# 実験時のGCEでdocekr-composeコマンドが使えなかったため、それ用のdocker imageを使用した
# ※デーモン(-d)にしないとCIがいつまでも終わらないので注意
docker run \
--rm -v /var/run/docker.sock:/var/run/docker.sock \
-v "$PWD:/$PWD" -w="/$PWD" \
docker/compose:1.22.0 \
up -d

コメント

タイトルとURLをコピーしました