GitlabCi部署在多个服务器上

时间:2016-07-24 15:34:34

标签: gitlab gitlab-ci gitlab-ci-runner

我使用Gitlab运行程序,可以在单个服务器上正常运行。 gitlab-ci.yml很简单:

stages:
  - test
  - deploy

test:
  stage: test
  image: php
  tags:
      - docker
  script:
      - echo "Run tests..."
deploy:
    stage: deploy
    tags:
      - shell
    script:
      - sh deploy.sh

正如我所说,这对单个服务器来说很好,但是在另一台服务器上部署相同的应用程序?我尝试使用相同的gitlab-runner配置(相同的conf.toml)但是它只是随机更新其中一个。

是否有某种方式gitlab Ci由超过1个跑步者触发并根据gitlab-ci.yml部署所有这些?

3 个答案:

答案 0 :(得分:4)

您可以从不同的服务器注册多个运行程序(例如标记为 serverA serverB )并具有多个部署作业,每个作业由不同的运行程序执行。这是因为您可以在作业中设置多个标签,并且只使用具有所有标签的跑步者。

stages:
  - test
  - deploy

test:
  stage: test
  image: php
  tags:
      - docker
  script:
      - echo "Run tests..."

deployA:
    stage: deploy
    tags:
      - shell
      - serverA
    script:
      - sh deploy.sh

deployB:
    stage: deploy
    tags:
      - shell
      - serverB
    script:
      - sh deploy.sh

但是,考虑到其中一个部署作业失败的情况 - 这最终会导致服务器上有两个不同版本的代码。根据您的情况,这可能是也可能不是问题。

答案 1 :(得分:2)

是的,只需为同一阶段设置两个作业:

stages:
  - deploy

deploy:one:
  stage: deploy
  script:
    - echo "Hello CI one"

deploy:two:
  stage: deploy
  script:
    - echo "Hello CI two"

如有必要,您可以在跑步者身上使用tags来选择使用哪一个。

答案 2 :(得分:0)

自 2016 年以来,您现在拥有 Environments and deployments

<块引用>

环境描述了代码的部署位置。

每次 GitLab CI/CD 将一个版本的代码部署到环境中时,都会创建一个部署。

亚搏体育app:

  • 提供每个环境的完整部署历史记录。
  • 跟踪您的部署,以便您始终了解服务器上部署的内容。

它有 integrates well with Prometheis,而且,对于 GitLab 13.11(2021 年 4 月),您甚至:

<块引用>

在 UI 中更新部署冻结期

在 GitLab 13.2 中,我们添加了在项目的 CI/CD 设置中创建 deploy freeze 时间段的功能。

此功能可帮助团队避免意外部署、减少不确定性并降低部署风险。

但是,无法更新部署冻结。

在 GitLab 13.11 中,我们添加了编辑现有部署冻结的功能。这样,您就可以更新冻结期以满足您的业务需求。

https://about.gitlab.com/images/13_11/update_deploy_freeze_1.png -- Update a deploy freeze period in the UI

参见 DocumentationIssue

如“gitlab-ci.yml deployment on multiple hosts”所示,可以使用YAML anchors触发多环境并行部署,即“多台服务器”。