首页 > 解决方案 > gitlab-ci - 具有不同分支的多个阶段的作业

问题描述

跟随塞纳里奥。我有 1 个生产分支和 2 个开发分支,应该使用不同的环境变量进行部署

- prod
- dev1
- dev2

我想将部署分为 2 个不同的阶段

- build
- deploy

如何配置 gitlab-ci 文件,存储每个分支的脚本和阶段?

我已经尝试了几件事,但没有得到有效的工作 ci。

 stages:
 - build
 - deploy

 variables:
 IMAGE: my_image

 # Production
 prod:
   stage: build
   script:
   - docker build -t $IMAGE --build-arg RAILS_ENV=production .
   only:
   - prod

   stage: deploy
   script:
   - docker push $IMAGE
   - docker run -e "some production relevated env vars"
   only:
   - prod

 # Development 1
 dev1:
   stage: build
   script:
   - docker build -t $IMAGE --build-arg RAILS_ENV=staging .
   only:
   - dev1

   stage: deploy
   script:
   - docker push $IMAGE
   - docker run -e "some dev1 relevated env vars"
   only:
   - dev1

 # Development 2
 dev2:
   stage: build
   script:
   - docker build -t $IMAGE --build-arg RAILS_ENV=staging .
   only:
   - dev2

   stage: deploy
   script:
   - docker push $IMAGE
   - docker run -e "some dev2 relevated env vars"
   only:
   - dev2

是否有可能以这种方式拆分工作?

标签: gitlab-cicontinuous-deployment

解决方案


我找到了解决方案。只需为每个环境添加一个作业。

 stages:
 - build
 - deploy

 variables:
 IMAGE: my_image

 # Production
 prod-build:
   stage: build
   script:
   - docker build -t $IMAGE --build-arg RAILS_ENV=production .
   only:
   - prod

 prod-deploy:
   stage: deploy
   script:
   - docker push $IMAGE
   - docker run -e "some production relevated env vars"
   only:
   - prod

 # Development 1
 dev1-build:
   stage: build
   script:
   - docker build -t $IMAGE --build-arg RAILS_ENV=staging .
   only:
   - dev1

 dev2-deploy:
   stage: deploy
   script:
   - docker push $IMAGE
   - docker run -e "some dev1 relevated env vars"
   only:
   - dev1

 # Development 2
 dev2-build:
   stage: build
   script:
   - docker build -t $IMAGE --build-arg RAILS_ENV=staging .
   only:
   - dev2

 dev2-deploy:
   stage: deploy
   script:
   - docker push $IMAGE
   - docker run -e "some dev2 relevated env vars"
   only:
   - dev2

推荐阅读