web-dev-qa-db-ja.com

Gitlab CI SSH経由でアプリケーションをデプロイする方法

Hosted Gitlabを使用してGitリポジトリをホストしています。最近では、これを使用してビルド/デプロイPHPおよびJavaアプリケーションをサーバーに。

ビルドが完了したら、SSHを使用してアプリケーションを展開します。これは、最終ビルドのコンテンツ(PHPファイル)をSSH経由でサーバーにアップロードする場合もあれば、コンパイルされた.jarファイルをアップロードし、リモートサーバーでコマンドを実行してサービスを再起動する場合もあります。

ビルド環境として独自のDockerコンテナーをセットアップしました。これには、ビルドを完了するために必要なJava、PHP、Composer、Mavenなどが含まれます。このイメージを使用してビルドを実行しています。

私が知りたいのは、gitlab-ci.yamlファイルで指定できる展開コマンドを実行するために他の外部サーバーにSSHで接続するにはどうすればよいですか?

19
SheppardDigital

SSHキーをgitlab-ci.yaml内の秘密変数として保存し、ビルド中にそれを使用してSSHコマンドを実行できます。詳細については、ドキュメントを参照してください here

SSHアクセスを取得したら、rsyncscpなどのコマンドを使用して、サーバーにファイルをコピーできます。この例を別の投稿で見つけました here これは参考として使用できます。

32
Adam Mulvany

ちょうど例として、要件がすでにインストールされているサーバーがあり、sshを使用してそのサーバーにデプロイしたいとします。

image: ubuntu:latest
stages:
  - deploy
deploy_QA:
  stage: deploy
  environment: 
    name: Staging
    url: "$QA_URL"
  before_script:
  - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
  - mkdir -p ~/.ssh
  - eval $(ssh-agent -s)
  - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
  script:
    - ssh-add <(echo "$PRIVATE_KEY")
    - ssh -o StrictHostKeyChecking=no user@"$QA_SERVER" 'rm -rf /var/www/html/*'
    - scp -P22 -r . ubuntu@"$QA_SERVER":/var/www/html

まず、この例では、ubuntuイメージを使用しています。また、gitlabシークレット変数を使用していることにも注意してください。 $ QA_URL、$ PRIVATE_KEY、$ DB_CONNECTION、$ QA_SERVER。重要なのは$ PRIVATE_KEYとQA_SERVERです。秘密鍵は、QA_SERVERで認証する必要があるものです(秘密鍵を使用している場合)。そして明らかに、QA_SERVERはコードをデプロイするアドレスです。

新しい変数アクセスを作成するには、gitlab-> settings-> CI/CDにアクセスします。



before_script内では、sshキーの作成と追加を行っていますが、コマンドラインを無効にしてパスワードを要求しています。 'StrictHostKeyChecking no'

ssh-add <(echo "$PRIVATE_KEY")

Sshキーをエージェントに追加します。

ssh -o StrictHostKeyChecking=no user@"$QA_SERVER" 'rm -rf /var/www/html/*'

必須ではありません:この行は/ var/www/html scp -P22 -r内のファイルを削除するためにsshを使用します。 ubuntu @ "$ QA_SERVER":/ var/www/html最後に、ファイルは現在のディレクトリから/ var/www/htmlにコピーされます。

パーミッションに注意してください、それはコピーしたいディレクトリに依存します。

5
Johan Durán

Gitlab.comでsshを扱うのは簡単ではありません。

それが、.gitlab-ci.ymlのSSHヘルパーを書いた理由です。
こちらで確認できます https://gitlab.com/x4v13r/gitlab-ci

ちょうどinclude:それを.gitlab-ci.ymlに追加すると、次のようになります:

ssh_runroot myhostname $ MYHOST_PKEY "touch foo; cp foo bar; ls -al; rm foo bar; ls -al"

2
Xavier D