GitLabCIでデプロイ先サーバーのコマンドをSSH経由で実行する方法です。
前回記事を書いたftpアップロードの後にコマンドを実行する必要があったので作りました。
.gitalb-ci.yml
いきなりですが、ファイルから。
.gitlab-ci.yml
stages:
- exec
deploy-exec:
stage: exec
image: alpine:latest
variables:
SSH_SERVER: ''
SSH_PORT: '22'
SSH_USER: ''
SSH_PRIVATE_KEY: ''
SSH_CMD: ''
before_script:
- 'command -v ssh-agent >/dev/null || ( apk add --update openssh )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan -p $SSH_PORT -H $SSH_SERVER >> ~/.ssh/known_hosts
- chmod 644 ~/.ssh/known_hosts
script:
- ssh $SSH_USER@$SSH_SERVER -p $SSH_PORT "$SSH_CMD"
only:
- main
変数
見ればわかりますね(省略
GitLab CI設定のvariablesに設定してください。
解説
- 小さいのでイメージはalpineを使います
- ssh-agentをインストールします
- $SSH_PRIVATE_KEYをセットします
- SSH先サーバーを
.ssh/known_hosts
にセットします
むにゃむにゃ
必要になったので作りました。これで、GitLab上でファイル更新をすると、アップロード、デプロイ先でのスクリプト実行が一気に走るようになりました。めでたしめでたし