Docker 在多台主机上部署gitlab-ci.yml
我需要在多台服务器上部署我的应用程序 我已经在gitlab ci上托管了我的源代码。 我已经设置了environnement变量和.gitlab-ci.yml文件 它适用于单个服务器:我可以构建docker映像并将这些映像推送到注册表。 然后我将在kubernetes基础设施上部署这些映像。 所有操作都在.gitlab-ci.yml中描述 我需要做的是为每台服务器重复.gitlab-ci.yml步骤。 我需要为每个服务器设置一组不同的环境变量。我将需要一个docker映像为每个服务器,为我的应用程序的每次升级 有没有办法用gitlab ci做到这一点 谢谢 **编辑** 这是我的.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映像为每个服务器,为我的应用
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”>“变量”中存储变量,但无法创建变量数组。。。谢谢为什么需要使用数组?只需为您拥有的每个环境定义具有特殊名称的变量,然后通过定义将在锚中使用的通用名称在您的工作中使用它们。如果您事先不知道服务器的数量,该怎么办?如果生产服务器处于自动缩放配置中,该怎么办?