我有一个docker-compose文件,该文件构建了两个容器,一个节点应用程序和一个ngnix服务器。现在,我想在Gitlab运行程序的帮助下在服务器上自动化构建和运行过程。我对与CI相关的事物还很陌生,因此请原谅我的方法:

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

所以我的问题是:

  • 我可以在一台服务器上为我的所有存储库运行多个(2或3)gitlab-runner吗?
  • 我需要一个特定的或共享的运行者吗,区别到底是什么?
  • 为什么所有教程都使用自托管的Gitlab实例而不是仅使用gitlab仓库(是否无法将gitlab-runner与gitlab.com仓库一起使用?)
  • 是否可以在gitlab-runner管道中使用docker-compose并立即构建所有内容?
  • 最佳答案

    首先,您显然可以在https://gitlab.com以及自托管的GitLab实例上使用GitLab CI/CD功能。除了您要注册运行程序的主机之外,它没有任何改变:

  • https://gitlab.com/如果您使用GitLab而不托管它
  • https://your-custom-domain/,如果您托管自己的GitLab实例

  • 您可以根据需要添加任意数量的运行程序(我认为是这样,并且每个项目至少有5-6个运行程序没有问题)。您只需要为您的项目注册每个赛跑者即可。参见Registering Runners

    至于共享运行者还是特定运行者,如果您想尝试使用GitLab CI/CD,我认为您应该坚持分享运行者。



    不过,您可以在任何机器上(例如laptotp)将自己的运行程序安装在任何机器上。您可以deploy it with Docker快速入门。

    最后,是的,如果您使用gitlab-ci.yml执行程序并在服务器上安装了ssh,则可以在docker-compose文件中使用docker-compose。
    但我建议使用docker执行程序并使用 docker:dind (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以获得有关Runner配置的更多信息。



    我希望它能回答您的问题

    关于docker - 如何使用Gitlab CI构建,推送和拉取多个Docker容器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50683869/

    10-16 18:33