ノードアプリとngnixサーバーの2つのコンテナーを構築するdocker-composeファイルがあります。ここで、Gitlabランナーの助けを借りて、サーバーでのビルドと実行のプロセスを自動化したいと思います。私はCI関連のものにかなり慣れていないので、私のアプローチを許してください:
Gitlab.comに複数のリポジトリを作成し、それぞれにDockerfileを作成したいと思います。イメージをビルドするために、gitlab-runnerインスタンスをこれらの各プロジェクトに関連付けて、Dockerリポジトリにプッシュし、サーバーにそこからプルさせる必要がありますか?そして、どういうわけか、docker-composeファイルをサーバーにプッシュして、そこからすべてを作成する必要があります。
だから私の質問は:
まず第一に、GitLab CI/CD機能は https://gitlab.com とセルフホストのGitLabインスタンスで明らかに使用できます。ランナーを登録するホストを除いて、何も変更されません。
必要な数のランナーを追加できます(そう思います。少なくとも、プロジェクトごとに5〜6人のランナーが問題なく存在します)。これらのランナーをそれぞれプロジェクトに登録する必要があります。詳細については、 ランナーの登録 を参照してください。
共有ランナーと特定のランナーについては、GitLab CI/CDを試してみたい場合は、共有ランナーに固執する必要があると思います。
GitLab.comの共有ランナーは自動スケールモードで実行され、DigitalOceanを利用しています。自動スケーリングとは、ビルドを起動するための待機時間を短縮し、プロジェクトごとにVMを分離することで、セキュリティを最大化することを意味します。
これらはパブリックオープンソースプロジェクトに無料で使用でき、プライベートプロジェクトの場合はグループあたり月額2000CI分に制限されています。すべてのGitLab.comプランについてお読みください。
ただし、laptotpなど、文字通りどのマシンにも独自のランナーをインストールできます。クイックスタートのために Dockerでデプロイ できます。
最後に、ssh
executorを使用し、サーバーにgitlab-ci.yml
をインストールしている場合は、docker-compose
ファイルでdocker-composeを使用できます。ただし、docker
executorを使用し、 docker:dind
(DockerのDocker)イメージを使用することをお勧めします
DockerのDockerとは何ですか?
Docker内でDockerを実行することは一般的に推奨されていませんが、Docker自体の開発など、いくつかの正当なユースケースがあります。
docker-compose
を使用しない使用例を次に示します。
image: docker:latest
services:
- name: docker:dind
command: ["--experimental"]
before_script:
- apk add --no-cache py-pip # <-- add python package install pip
- pip install docker-compose # <--- add docker-compose
- echo "$CI_REGISTRY_PASSWORD" | docker login -u "$CI_REGISTRY_USER" --password-stdin # <---- Login to your registry
build-master:
stage: build
script:
- docker build --squash --pull -t "$CI_REGISTRY_USER"/"$CI_REGISTRY_IMAGE":latest .
- docker Push "$CI_REGISTRY_USER"/"$CI_REGISTRY_IMAGE":latest
only:
- master
build-dev:
stage: build
script:
- docker build --squash --pull -t "$CI_REGISTRY_USER"/"$CI_REGISTRY_IMAGE":"$CI_COMMIT_REF_SLUG" .
- docker Push "$CI_REGISTRY_USER"/"$CI_REGISTRY_IMAGE":"$CI_COMMIT_REF_SLUG"
except:
- master
ご覧のとおり、Dockerイメージを作成してタグを付け、Dockerレジストリにプッシュしますが、任意のレジストリにプッシュできます。そしてもちろん、script
宣言でいつでもdocker-composeを使用できます
私のGitリポジトリは次のようになります:
/my_repo
|---- .gitignore
|---- .gitlab-ci.yml
|---- Dockerfile
|---- README.md
そして、私のランナーのconfig.tomlは次のようになります。
[[runners]]
name = "4Gb Digital Ocean vps"
url = "https://gitlab.com"
token = "efnrong44d77a5d40f74fc2ba84d8"
executor = "docker"
[runners.docker]
tls_verify = false
image = "docker:dind"
privileged = false
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
shm_size = 0
[runners.cache]
ランナー構成の詳細については、 https://docs.gitlab.com/runner/configuration/advanced-configuration.html を参照してください。
注:ここで使用されるすべての変数は秘密変数です。説明については https://docs.gitlab.com/ee/ci/variables/ を参照してください
それがあなたの質問に答えることを願っています