gitlabをあるプロジェクトで使っていますが、自動デプロイについて色々調べなんとかできたのでメモしておきます。
結論から書きますと下記のような手順でいけます。
1.まずデプロイしたいサーバーに鍵認証でログインできる環境を作ります。
2.秘密鍵(クライアント側)の情報を吐き出し、Setting→CI/CD→variablesでkey=SSH_PRIVATE_KEY、value=吐き出した秘密鍵の文字列を登録します。
3. .gitlab-ci.yamlというyamlファイルに以下のように記述してプッシュすればOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
stages: - deploy deploy: stage: deploy image: php:7.3-apache script: - apt-get update -qq - apt-get install -qq git # Setup SSH deploy keys - 'which ssh-agent || ( apt-get install -qq openssh-client )' - eval $(ssh-agent -s) - ssh-add <(echo "$SSH_PRIVATE_KEY") - mkdir -p ~/.ssh - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' - ssh-keyscan -p22 -H $HOST > ~/.ssh/known_hosts - ssh $USER@$HOST "cd /var/www/html/プロジェクトのディレクトリ && sudo git pull origin master" |
以下、簡単なコマンド解説です。
Contents
ssh-agent
eval `ssh-agent`
などを使うことによって後続の秘密鍵の登録処理などを自動的に行うことができるようです。
ssh-add
秘密鍵の登録です。通常だとクライアント側でssh-keygenを登録した時に実行されますが、同一の鍵を登録する時にこのコマンドを入力します。
ssh-keycan
一般的にSSHでサーバーにログインするときは以前に接続した情報との照合が行われ、初めての場合には確認画面が入ります。この情報が ~/.ssh/known_hosts に登録されるのですが、ssh-keyscanコマンドにより、 ~/.ssh/known_hosts に即座に追加することがでます。
echo -e “Host *\n\tStrictHostKeyChecking no\n\n” > ~/.ssh/config
ssh/configに「StrictHostKeyChecking no」の入力をしておくことどで権限のメッセージを出さないようにすることができます。
参考リンク