gitlab-ci.yml部署在多个主机上 [英] gitlab-ci.yml deployment on multiple hosts

查看:370
本文介绍了gitlab-ci.yml部署在多个主机上的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我将源代码托管在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆