数時間グーグルしようとしていますが、見つかりません。私はJava/Springアプリケーション(重要な場合は+ MySQL)を持っており、そのためのCIを作成しようとしています。
私は何をどのように行うかを知っています:
質問は:
VPSでdockercomposeを強制してGitlabから新しいイメージをプルし、サーバーを再起動するにはどうすればよいですか? VPSでアプリフォルダー内でdocker-compose pull && docker-compose up
を実行する必要があることは知っていますが(間違っている場合は修正してください)、Gitlabで自動的に作成する方法が文字通りわかりません。
VPSでdockercomposeを強制してGitlabから新しいイメージをプルし、サーバーを再起動するにはどうすればよいですか?
@ m-uu、サーバーを再起動する必要はまったくありません。docker-compose up
新しいイメージをプルして、サービスを再起動します
VPSでdocker-composepull && docker-composeをアプリフォルダー内で実行する必要があることはわかっていますが(間違っている場合は修正してください)、Gitlabで自動的に作成する方法が文字通りわかりません。
はい、あなたは正しい道を進んでいます。私のGitlabCI構成ファイルを見てください。Javaプロジェクトの場合は変更するのは難しいことではないと思います。ビルド方法、レジストリにプッシュしてサーバーにイメージをデプロイする方法を教えてください。 。行う必要があることの1つは、SSHキーを生成し、パブリックをサーバー(.ssh/authorized_keys)にプッシュし、プライベートをGITLABパイプラインシークレット変数( https://docs.gitlab.com/ee/ci/variables/ #secret-variables )
cache:
key: "cache"
paths:
- junte-api
stages:
- build
- build_image
- deploy
build:
image: golang:1.7
stage: build
script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" > ~/key && chmod 600 ~/key
- ssh-add ~/key
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
- go get -u github.com/kardianos/govendor
- mkdir -p $GOPATH/src/github.com/junte/junte-api
- mv * $GOPATH/src/github.com/junte/junte-api
- cd $GOPATH/src/github.com/junte/junte-api
- govendor sync
- go build -o junte-api
- cd -
- cp $GOPATH/src/github.com/junte/junte-api .
build_image:
image: docker:latest
stage: build_image
script:
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker build -t $CI_REGISTRY_IMAGE .
- docker Push $CI_REGISTRY_IMAGE
deploy-dev:
stage: deploy
image: junte/ssh-agent
variables:
# should be set up at Gitlab CI env vars
SSH_PRIVATE_KEY: $SSH_DEV_PRIVATE_KEY
script:
# copy docker-compose yml to server
- scp docker-compose.dev.yml root@SERVER_IP:/home/junte/junte-api/
# login to gitlab registry
- ssh root@SERVER_IP docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
# then we cd to folder with docker-compose, run docker-compose pull to update images, and run services with `docker-compose up -d`
- ssh root@SERVER_IP "cd /home/junte/junte-api/ && docker-compose -f docker-compose.dev.yml pull api-dev && HOME=/home/dev docker-compose -f docker-compose.dev.yml up -d"
environment:
name: dev
only:
- dev
DockerをサポートするGitlabランナーも必要です。インストール方法はGitlabドキュメントで確認してください。
ステージについて:
build
-必要なものを構築するために変更するだけですbuild_image
-非常に簡単です。gitlabレジストリにログインし、新しいイメージを作成してレジストリにプッシュするだけです。 cache
の部分を見てください。ステージ間でファイルをキャッシュする必要があり、異なる場合があります。deploy-dev
-あなたが尋ねたことについてのその部分。ここで最初の6つのコマンドは、sshをインストールし、VPSにアクセスするための秘密鍵ファイルを作成するだけです。それをコピーして、SSH_PRIVATE_KEYをGitlabUIのシークレット変数に追加するだけです。最後の3つのSSHコマンドはあなたにとってもっと興味深いものです。