我需要在多个服务器上部署我的应用程序。
我已经在gitlab-ci上托管了我的源代码。我有设置环境变量和.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发布于 2020-01-03 02:17:32
为了使用不同的环境变量运行相同的作业,您可以使用Yaml Anchors。
例如:
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这样,在deploy stage上,3个作业将(并行)运行。
如果变量包含敏感数据,则可以将其保存在Settings > CI/CD > Variable中。如果没有,只需将它们写入您的.gitlab-ci.yml
https://stackoverflow.com/questions/59546865
复制相似问题