毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。
0. はじめに
GitLab CI/CDパイプラインで外部のサーバーにSSH接続してCD(Continuous Delivery)したかった。
以下を参考にしました。
Using SSH keys with GitLab CI/CD | GitLab
https://docs.gitlab.com/ee/ci/ssh_keys/
GitLab Runnerで任意のSSH接続を行いたい - Qiita
https://qiita.com/fukasawah/items/9c257f0bc2dfe1d6823f
OpenSSHの警告メッセージを黙らせる – Siguniang's Blog
https://siguniang.wordpress.com/2014/02/28/get-rid-of-openssh-warning-message/
1. .gitlab-ci.yaml
以下の様な.gitlab-ci.yamlになりました。
default:
image: ${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/ubuntu:20.04
variables:
USER: user
SERVER_IP: "192.0.2.129"
.ssh_before_script:
before_script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s) && echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh && chmod 700 ~/.ssh
- echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
connect:
stage: test
extend: .ssh_before_script
script:
- ssh $USER@$SERVER_IP 'ls -la'
2. 解説
Dependency Proxyを使っていない場合は、imageの${CI_DEPENDENCY_PROXY_GROUP_IMAGE_PREFIX}/
を削除してください。
GitLab.comでも使えるはずです。
SSH接続の前処理を再利用しやすいようにYAMLアンカーを使ってステージの外に出しました(.ssh_before_script)。
SSHを利用するジョブでextendを使って追加します。
SSH鍵秘密鍵は、「GitLabのプロジェクト」>「設定」>「CI/CD」>「変数」でSSH_PRIVATE_KEY
変数に入れてください。
ssh-agentがインストールされていない場合は、aptでインストールします。
SSH Fingerprintのチェック回避の為にStrictHostKeyChecking no
を~/.ssh/config
に書きました。ssh-keyscanが不要になります。
3. まとめ
.gitlab-ci.yamlでextendを使ったことがありませんでしたが、やってみるとすっきり書けて良さそうです。
活用していきたいです。