首页 文章

如何使用gitlab ci构建,推送和拉出多个docker容器?

提问于
浏览
0

我有一个docker-compose文件,它构建了两个容器,一个节点应用程序和一个ngnix服务器 . 现在我想在gitlab runners的帮助下自动化服务器上的构建和运行过程 . 我对CI相关的东西很新,所以请原谅我的方法:

我想在gitlab.com上创建多个存储库,并为每个存储库提供一个dockerfile . 我现在是否必须将gitlab-runner实例与这些项目中的每一个相关联以构建映像,将其推送到docker repo并让服务器从那里拉出来?然后我不得不以某种方式推动服务器上的docker-compose文件并从那里编写所有内容 .

所以我的问题是:

  • 我能在一台服务器上为我的所有回购运行多个(2或3)gitlab-runner吗?

  • 我需要特定或共享的跑步者,究竟有什么区别?

  • 为什么所有教程都使用自托管gitlab实例而不是仅仅使用gitlab repos(是不是可以使用gitlab-runner和gitlab.com repos?)

  • 是否可以在gitlab-runner管道中使用docker-compose并立即构建所有内容?

对于那种非结构化的写作很抱歉,但我对这些技术有很多疑问 .

提前致谢

1 回答

  • 5

    首先,您可以在https://gitlab.com以及自托管的GitLab实例上使用GitLab CI / CD功能 . 它不会改变任何东西,除了你将注册你的跑步者的主机:

    您可以根据需要添加尽可能多的跑步者(我想是这样,至少我每个项目有5-6名跑步者没有问题) . 您只需要为项目注册每个跑步者 . 请参阅Registering Runners .

    至于共享跑步者与特定跑步者,我认为如果你想尝试GitLab CI / CD,你应该坚持分享跑步者 .

    GitLab.com上的Shared Runners以自动缩放模式运行,由DigitalOcean提供支持 . 自动调节意味着减少等待时间以启动构建,并为每个项目隔离虚拟机,从而最大限度地提高安全性 . 它们可以免费用于公共开源项目,每个组每月限制为2000 CI分钟用于私人项目 . 阅读所有GitLab.com计划 .

    您可以在任何机器上安装自己的跑步者,例如您的laptotp . 您可以deploy it with Docker快速入门 .

    最后,是的,如果使用 ssh executor并在服务器上安装了 docker-compose ,则可以在 gitlab-ci.yml 文件中使用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_USER":"$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]
    

    有关Runner配置的更多信息,您可以查看https://docs.gitlab.com/runner/configuration/advanced-configuration.html .

    注意:这里使用的所有变量都是秘密变量 . 有关说明,请参阅https://docs.gitlab.com/ee/ci/variables/

    我希望它能回答你的问题

相关问题