我可以在执行过程中更改 gitlab-ci.yml 文件吗?
Can I change gitlab-ci.yml file mid execution?
这是我们简化的gitlab-ci.yml
stages:
- build
- deploy
# fetch home repo that'll run the pipeline processes
before_script:
- git clone git@git.org:home_repo/home_repo.git
- cd home_repo
build:
stage: build
needs: []
resource_group: $CI_PROJECT_NAME'_build'
script:
- ./pipeline.sh build
deploy_environment1:
stage: deploy
needs: [build]
resource_group: deploy_environment1
script:
- ./pipeline.sh deploy env1
deploy_environment2:
stage: deploy
needs: [build]
resource_group: deploy_environment2
script:
- ./pipeline.sh deploy env2
添加 5-10 个环境会使大小膨胀很多。我们该如何处理?
可能的方案一:
有一份工作将创建所有可用环境的列表并部署到它们。但是,我们无法很好地了解每个部署的进展情况。
deploy_environments:
stage: deploy
needs: [build]
resource_group: deploy_environments
script:
- ./pipeline.sh deploy to_all
可能的方案二:
before_script
获取所有环境的列表并根据需要插入尽可能多的 deploy_environment
作业定义。但我们不知道该怎么做。因此标题中的问题。
Can I change gitlab-ci.yml file mid execution?
不,不是 真的。最接近的是使用 dynamic child pipelines where the YAML for a child pipeline 由父管道中的另一个作业动态生成。
这样就可以达到你想要的效果了。
Adding 5-10 environments would blow up the size by a lot. How can we handle that?
替代(甚至结合)使用动态子管道,您可以使用 parallel matrix 进行简洁定义。
像这样:
deploy:
stage: deploy
script:
- ./pipeline.sh deploy $ENV_NAME
parallel:
matrix:
- ENV_NAME: [env1, env2]
这是我们简化的gitlab-ci.yml
stages:
- build
- deploy
# fetch home repo that'll run the pipeline processes
before_script:
- git clone git@git.org:home_repo/home_repo.git
- cd home_repo
build:
stage: build
needs: []
resource_group: $CI_PROJECT_NAME'_build'
script:
- ./pipeline.sh build
deploy_environment1:
stage: deploy
needs: [build]
resource_group: deploy_environment1
script:
- ./pipeline.sh deploy env1
deploy_environment2:
stage: deploy
needs: [build]
resource_group: deploy_environment2
script:
- ./pipeline.sh deploy env2
添加 5-10 个环境会使大小膨胀很多。我们该如何处理?
可能的方案一: 有一份工作将创建所有可用环境的列表并部署到它们。但是,我们无法很好地了解每个部署的进展情况。
deploy_environments:
stage: deploy
needs: [build]
resource_group: deploy_environments
script:
- ./pipeline.sh deploy to_all
可能的方案二:
before_script
获取所有环境的列表并根据需要插入尽可能多的 deploy_environment
作业定义。但我们不知道该怎么做。因此标题中的问题。
Can I change gitlab-ci.yml file mid execution?
不,不是 真的。最接近的是使用 dynamic child pipelines where the YAML for a child pipeline 由父管道中的另一个作业动态生成。
这样就可以达到你想要的效果了。
Adding 5-10 environments would blow up the size by a lot. How can we handle that?
替代(甚至结合)使用动态子管道,您可以使用 parallel matrix 进行简洁定义。
像这样:
deploy:
stage: deploy
script:
- ./pipeline.sh deploy $ENV_NAME
parallel:
matrix:
- ENV_NAME: [env1, env2]