GitLab CI/CD から ssh でデプロイ先サーバーへ接続し、デプロイ先サーバーでコマンドを実行する

● Macなどローカルマシンで秘密鍵と公開鍵を作成します

# 鍵の作成
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa__deploy_from_gitlab_cicd

# 公開鍵
cat ~/.ssh/id_rsa__deploy_from_gitlab_cicd.pub

# 秘密鍵
cat ~/.ssh/id_rsa__deploy_from_gitlab_cicd

表示される公開鍵、秘密鍵をクリップボードにコピーしておきます

● デプロイ先のサーバーマシンにSSH接続して authorized_keys に公開鍵を登録します

cd .ssh
vi authorized_keys
(ここでviから先ほどクリップボードにコピーした鍵をペーストする。)

● 公開鍵の前に command="<実行したいコマンド>" を記述する

(例)例えば次のように設定すると

command="echo 'SSH OK!!!'; pwd" ssh-rsa AAAAB3NzaC1yc2EAAAA...........(省略)...........== Gitlab_CICD

SSH接続するとコマンドを実行してすぐ切断されます。

(実行例)

SSH OK!!!
/var/www/vhosts/my-host.com

これを使ってデプロイするコマンドを記述しておきます。

例) .bash_profileを読み込んでパスを設定した後、deploy.sh を実行する場合

command="source ~/.bash_profile; echo '' ; echo '● SSH Command Start ↓' ; sh deploy.sh ; echo '● SSH Command End ↑' ; echo''; " ssh-rsa AAAAB3NzaC1yc2EAAAA...........(省略)...........== Gitlab_CICD

deploy.sh の内容は好きに作成してください。

設定後にssh正しく接続できるか確認します

(コマンド例)

ssh -tt <ユーザー名>@<サーバIP> -p <ポート番号> -i ~/.ssh/id_rsa__deploy_from_gitlab_cicd

● Gitlab管理画面に接続して秘密鍵を登録します

グループかプロジェクトの「Settings」→「CI/CD」→「Variable」から「Add Variable」をクリックします。
次のような設定で作成します

Key   : id_rsa__deploy_from_gitlab_cicd
Value : <先程のコピーした秘密鍵>
Type  : File

合わせて「SSH_IP_ADDRESS」「SSH_USER」に変数を設定しておいても良いでしょう。

● Gitlab管理画面 CI/CD → Editor から YAML ファイルを編集する

管理画面から編集します。 編集が完了すると対象のリポジトリの .gitlab-ci.yml に保存され、 Job が1つ実行されます。

YML ファイルサンプル

(build のステージは省略しています。デプロイの前にビルドが通ることを確認した方が良いでしょう)

stages:
  - deploy

cache:
  paths:
    - node_modules/

deploy_production:
  stage: deploy
  image: kroniak/ssh-client
  before_script:
    - apk add curl
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
    - echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa
    - chmod 600 ~/.ssh/id_rsa
  script:
    - ip addr show
    - curl -s http://httpbin.org/ip
    - curl -s inet-ip.info
    - pwd
    - ssh -tt $SSH_USER@$SSH_IP_ADDRESS -p 22 -i ~/.ssh/id_rsa

● WARNING: terminal is not fully functional エラーとなるときは

接続先のターミナルを

.bash_profile

# change TERM
export TERM=xterm

としておきましょう。

No.2091
10/29 23:32

edit