Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 在多台主机上部署gitlab-ci.yml_Docker_Gitlab_Gitlab Ci - Fatal编程技术网

Docker 在多台主机上部署gitlab-ci.yml

Docker 在多台主机上部署gitlab-ci.yml,docker,gitlab,gitlab-ci,Docker,Gitlab,Gitlab Ci,我需要在多台服务器上部署我的应用程序 我已经在gitlab ci上托管了我的源代码。 我已经设置了environnement变量和.gitlab-ci.yml文件 它适用于单个服务器:我可以构建docker映像并将这些映像推送到注册表。 然后我将在kubernetes基础设施上部署这些映像。 所有操作都在.gitlab-ci.yml中描述 我需要做的是为每台服务器重复.gitlab-ci.yml步骤。 我需要为每个服务器设置一组不同的环境变量。我将需要一个docker映像为每个服务器,为我的应用

我需要在多台服务器上部署我的应用程序

我已经在gitlab ci上托管了我的源代码。 我已经设置了environnement变量和.gitlab-ci.yml文件

它适用于单个服务器:我可以构建docker映像并将这些映像推送到注册表。 然后我将在kubernetes基础设施上部署这些映像。 所有操作都在.gitlab-ci.yml中描述

我需要做的是为每台服务器重复.gitlab-ci.yml步骤。 我需要为每个服务器设置一组不同的环境变量。我将需要一个docker映像为每个服务器,为我的应用程序的每次升级

有没有办法用gitlab ci做到这一点

谢谢

**编辑**

这是我的.gitlab-ci.yml:

stages:
  - build
  - deploy

build:
  stage: build
  script:
  - docker image build -t my_ci_registry_url/myimagename .
  - docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" "${CI_REGISTRY}"
  - docker push my_ci_registry_url/myimagename

deploy:
  stage: deploy
  environment: production
  script:
  - kubectl delete --ignore-not-found=true secret mysecret
  - kubectl create secret docker-registry mysecret --docker-server=$CI_REGISTRY --docker-username=$CI_REGISTRY_USER --docker-password=$CI_REGISTRY_PASSWORD
  - kubectl apply -f myapp.yml
  - kubectl rollout restart deployment/myapp-deployment

为了使用不同的环境变量运行相同的作业,可以使用

例如:

stages:
  - build
  - deploy

.deploy: &deploy
  stage: deploy
  environment: production
  script:
  - some use of $SPECIAL_ENV    # from `variables` defined in each job
  - some use of $OTHER_SPECIAL_ENV   # from `variables` defined in each job

build:
  stage: build
  script:
  - ...

deploy env 1:
  variables:
    SPECIAL_ENV: $SPECIAL_ENV_1   # from `CI/CD > Variable`
    OTHER_SPECIAL_ENV: $OTHER_SPECIAL_ENV-1    # from `CI/CD > Variable`
  <<: *deploy

deploy env 2:
  variables:
    SPECIAL_ENV: $SPECIAL_ENV_2   # from `CI/CD > Variable`
    OTHER_SPECIAL_ENV: $OTHER_SPECIAL_ENV_2   # from `CI/CD > Variable`
  <<: *deploy

deploy env 3:
  variables:
    SPECIAL_ENV: $SPECIAL_ENV_3   # from `CI/CD > Variable`
    OTHER_SPECIAL_ENV: $OTHER_SPECIAL_ENV_3   # from `CI/CD > Variable`
  <<: *deploy
这样,在部署阶段,3个作业将并行运行。
如果变量包含敏感数据,则可以将其保存在“设置”>“CI/CD”>“变量”中。如果没有,只需将它们写在.gitlab ci.yml中,就可以使用不同的环境变量运行同一个作业

例如:

stages:
  - build
  - deploy

.deploy: &deploy
  stage: deploy
  environment: production
  script:
  - some use of $SPECIAL_ENV    # from `variables` defined in each job
  - some use of $OTHER_SPECIAL_ENV   # from `variables` defined in each job

build:
  stage: build
  script:
  - ...

deploy env 1:
  variables:
    SPECIAL_ENV: $SPECIAL_ENV_1   # from `CI/CD > Variable`
    OTHER_SPECIAL_ENV: $OTHER_SPECIAL_ENV-1    # from `CI/CD > Variable`
  <<: *deploy

deploy env 2:
  variables:
    SPECIAL_ENV: $SPECIAL_ENV_2   # from `CI/CD > Variable`
    OTHER_SPECIAL_ENV: $OTHER_SPECIAL_ENV_2   # from `CI/CD > Variable`
  <<: *deploy

deploy env 3:
  variables:
    SPECIAL_ENV: $SPECIAL_ENV_3   # from `CI/CD > Variable`
    OTHER_SPECIAL_ENV: $OTHER_SPECIAL_ENV_3   # from `CI/CD > Variable`
  <<: *deploy
这样,在部署阶段,3个作业将并行运行。
如果变量包含敏感数据,则可以将其保存在“设置”>“CI/CD”>“变量”中。如果没有,只需将它们写在.gitlab ci.yml中

您可以添加当前的.gitlab-ci.yml吗?这样就更容易提供帮助了?所以您只需要多个部署阶段?每个服务器之间将发生什么变化?每个服务器之间唯一的变化是变量。我不知道是否应该将它们存储到配置文件、环境变量或其他文件中……您可以添加您当前的.gitlab-ci.yml,以便更容易提供帮助吗?所以您只需要多个部署阶段?每个服务器之间将发生什么变化?每个服务器之间唯一的变化是变量。我不知道是否应该将它们存储到配置文件、环境变量或其他…谢谢,但我想将变量存储在设置>CI/CD>变量中,但无法创建变量数组。。。谢谢为什么需要使用数组?只需为您拥有的每个环境定义具有特殊名称的变量,然后通过定义将在锚中使用的通用名称在您的工作中使用它们。如果您事先不知道服务器的数量,该怎么办?如果生产服务器处于自动缩放配置,该怎么办?谢谢,但我想在“设置”>“CI/CD”>“变量”中存储变量,但无法创建变量数组。。。谢谢为什么需要使用数组?只需为您拥有的每个环境定义具有特殊名称的变量,然后通过定义将在锚中使用的通用名称在您的工作中使用它们。如果您事先不知道服务器的数量,该怎么办?如果生产服务器处于自动缩放配置中,该怎么办?