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の使用イメージは
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
コメント