概要
Gitlab CI を使って対象のサーバに ssh してデプロイスクリプトなどを実行することができるようになります
環境
- Ubuntu 22.04
- Gitlab 16.10.6
ssh サーバの設定
基本的にはパスワードなどは聞かれないように事前に設定しておく必要があります
git credentials
-
git config --global credential.helper store
これで認証情報を保存しておいて毎回パスワードを聞かれないようにしましょう
認証情報は CI から投入しても OK です
docker
- sudo gpasswd -a user01 docker
デフォルトだとユーザは docker グループに入っていないので sudo 権限が必要です
sudo のパスワードなしを設定しても OK です
ノンパスSSH鍵の作成と登録
Runner から対象のサーバに ssh ログインする際にパスワードを入力することができません
なのでパスワードが設定されていない秘密鍵と公開鍵を使ってログインできるようにします
なお以下で紹介しますが SSH するユーザターゲットホストは 192.168.100.10 とします
-
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa
ここで作成した id_rsa (秘密鍵) を Gitlab の CI の変数として登録します
登録する際の注意としては Protected な変数として登録しないようにしましょう
id_rsa.pub は SSH する対象のサーバ (192.168.100.10) の ~/.ssh/authorized_keys
に記載します
CI の設定
Runner の executor は docker を想定しています
以下の例ではリポジトリで管理してる shell/deploy.sh をターゲットホストの /tmp/deploy.sh に配置して実行しています
またターゲットホスト上のシェルに変数を与えたい場合は一度 export してから渡すと ssh 先のマシンにも伝わります
stages:
- deploy
variables:
ENV: $ENV
SSH_PRIVATE_KEY: $SSH_PRIVATE_KEY
deploy:
stage: deploy
image: python:alpine3.19
before_script:
- 'command -v ssh-agent >/dev/null || ( 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
script:
- scp -P 22 "${CI_PROJECT_DIR}/shell/deploy.sh" user01@192.168.100.10:/tmp/deploy.sh
- ssh -p 22 -tt user01@192.168.100.10 -C "chmod +x /tmp/deploy.sh"
- export ENV=${ENV}
- ssh -p 22 -tt user01@192.168.100.10 -C "ENV=${ENV} /tmp/deploy.sh"
when: manual
最後に
Gitlab CI で ssh する方法を紹介しました
パスワードなどの入力が必要な場合は入力させないような対応が必要です
0 件のコメント:
コメントを投稿