gitlab-ci.yml部署在多个主机上 [英] gitlab-ci.yml deployment on multiple hosts
问题描述
我需要将应用程序部署在多台服务器上。
我将源代码托管在gitlab-ci上。
我已经设置了环境变量和.gitlab-ci.yml文件
它对于单个服务器非常有用:我可以构建docker映像并将其推送到一个注册表。
然后我将这个映像部署在kubernetes基础架构上。
所有操作均在.gitlab-ci.yml中进行了描述。
我需要做的是为每个服务器重复 .gitlab-ci.yml步骤。
我需要为每个服务器使用不同的环境变量集。 (对于我的应用程序的每次升级,每台服务器我都需要一个docker映像。)
是否可以使用gitlab-ci做到这一点?
谢谢
**编辑**
这是我的.gitlab-ci.yml:
阶段:
-建立
-部署
构建:
阶段:构建
脚本:
-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
部署:
阶段:部署
环境:生产
脚本:
-kubectl delete --ignore-not-found = true秘密mysecret
-kubectl创建秘密docker-registry mysecret- -docker-server = $ CI_REGISTRY --docker-用户名= $ CI_REGISTRY_USER --docker-password = $ CI_REGISTRY_PASSWORD
-kubectl套用-f myapp.yml
-kubectl推出重新启动部署/ myapp-deployment
要使用不同的环境变量运行同一作业,可以使用 Yaml锚点。
例如:
阶段:
-构建
-部署
.deploy:& deploy
阶段:部署
环境:生产
脚本:
-$ SPECIAL_ENV的某些用法#来自每个作业中定义的变量
-$ OTHER_SPECIAL_ENV的某些用法#来自每个作业中定义的变量
构建:
阶段:build
脚本:
-...
部署环境1:
变量:
SPECIAL_ENV:$ SPECIAL_ENV_1#来自`CI / CD>变量`
OTHER_SPECIAL_ENV:$ OTHER_SPECIAL_ENV-1#来自`CI / CD>变量
< ;;:*部署
部署环境2:
变量:
SPECIAL_ENV:$ SPECIAL_ENV_2#来自`CI / CD>变量`
OTHER_SPECIAL_ENV:$ OTHER_SPECIAL_ENV_2#来自`CI / CD>变量
< ;;:*部署
部署环境3:
变量:
SPECIAL_ENV:$ SPECIAL_ENV_3#来自`CI / CD>变量`
OTHER_SPECIAL_ENV:$ OTHER_SPECIAL_ENV_3#来自`CI / CD> Variable`
<< :: * deploy
在 deploy
阶段,将运行3个作业(并行)。
您可以将变量保存在 Settings>中。 CI / CD变量
(如果其中包含敏感数据)。如果没有,只需将它们写在您的 .gitlab-ci.yml
中
I need to deploy my application on multiple servers.
I have hosted my source code on gitlab-ci. I have setup envrionnement variables and .gitlab-ci.yml file
It works great for a single server: I can build docker images and push this images to a registry. Then i am deploying this images on a kubernetes infrastructure. All operations are described in .gitlab-ci.yml
What i need to do is to "repeat" .gitlab-ci.yml steps for each server. I need a different set of envrionment variables for each server. (I will need one docker image for each server, for each upgrade of my application).
Is there a way to do this with gitlab-ci ?
Thanks
** EDIT **
Here is my .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
In order to run same job with different environment variables you can use Yaml Anchors.
For example:
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
That way on deploy
stage the 3 jobs will run (parallel).
You can save the variables in Settings > CI/CD > Variable
if they contain sensitive data. If not, just write them in your .gitlab-ci.yml
这篇关于gitlab-ci.yml部署在多个主机上的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!