我有一个docker- compose文件,该文件构建了两个容器,一个节点应用程序和一个ngnix服务器。现在,我想在Gitlab运行程序的帮助下在服务器上自动化构建和运行过程。我对与CI相关的事物还很陌生,因此请原谅我的方法:
我想在gitlab.com上创建多个存储库,并为每个存储库创建一个Dockerfile。我现在是否必须将gitlab- runner实例与这些项目中的每一个相关联才能构建映像,将其推送到docker repo并让服务器从那里拉出它?然后,我不得不以某种方式将docker- compose文件推送到服务器上,然后从那里组成所有内容。
所以我的问题是:
首先,您显然可以在https://gitlab.com以及自托管的GitLab实例上使用GitLab CI / CD功能。除了您要注册运行程序的主机之外,它没有任何改变:
您可以根据需要添加任意数量的运行程序(我认为是这样,并且每个项目至少有5-6个运行程序没有问题)。您只需要为您的项目注册每个赛跑者。为此,请参阅注册跑步者。
至于共享跑步者还是特定跑步者,如果您想尝试GitLab CI / CD,我认为您应该坚持分享跑步者。
GitLab.com上的共享跑步者以自动缩放模式运行,并由DigitalOcean提供支持。自动扩展意味着减少了启动构建的等待时间,并为每个项目隔离了VM,从而最大程度地提高了安全性。 它们可免费用于公共开源项目,对于私人项目,每个组每月限制为2000 CI分钟。阅读有关所有GitLab.com计划的信息。
GitLab.com上的共享跑步者以自动缩放模式运行,并由DigitalOcean提供支持。自动扩展意味着减少了启动构建的等待时间,并为每个项目隔离了VM,从而最大程度地提高了安全性。
它们可免费用于公共开源项目,对于私人项目,每个组每月限制为2000 CI分钟。阅读有关所有GitLab.com计划的信息。
不过,您可以在任何机器上安装自己的跑步机,例如laptotp。您可以将其与Docker一起部署以快速入门。
最后,是的,gitlab-ci.yml如果您使用sshexecutor并已docker- compose安装在服务器上,则可以在文件中使用docker-compose 。但是我建议使用docker执行程序并使用docker:dind(Docker中的Docker)映像
gitlab-ci.yml
ssh
docker- compose
docker
docker:dind
Docker中的Docker是什么? 尽管通常不建议在Docker内部运行Docker,但是>有一些合理的用例,例如Docker本身的开发。
Docker中的Docker是什么?
尽管通常不建议在Docker内部运行Docker,但是>有一些合理的用例,例如Docker本身的开发。
这是一个示例用法,docker-compose尽管没有:
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
script
我的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以获得有关Runner配置的更多信息。
注意:这里使用的所有变量都是 秘密变量 。有关说明,请参见https://docs.gitlab.com/ee/ci/variables/
我希望它能回答您的问题