我有一个项目,我有几个分支,主分支,开发分支,然后n动态功能分支。
例如,我的GitLab CI Pipeline中的docker-build作业使用source命令从名为.main.env或.develop.env(取决于分支名称)的文件中获取before_script部分中的一些环境变量。
docker-build:
image: docker:latest
stage: package
tags:
- deployment
before_script:
- source .${CI_COMMIT_REF_NAME}.env # || source .develop.env
services:
- docker:dind
script:
- docker build --build-arg SPRING_ACTIVE_PROFILE=$SPRING_ACTIVE_PROFILE -t $TAG_COMMIT -t $TAG_LATEST . -f Dockerfile
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker push $TAG_COMMIT
- docker push $TAG_LATEST
正如你所看到的,我尝试添加条件命令source .develop.env
,以防第一个命令中的文件找不到,但这不起作用。它仍然抛出一个错误,说文件.SOME_FEATURE_分支.env无法找到。
现在我想知道是否有更好的方法来解决这个问题,而不是仅仅为特性分支做另一个工作,只是获取.develop.env文件的源代码?
2条答案
按热度按时间pxyaymoc1#
也许更好的方法是显式地检查文件是否存在。
您还可以使用
rules:variables:
完成类似的操作,如果您希望将shell脚本从CI环境的细节中分离出来,这将非常方便。rseugnpd2#
当第一个源运行失败时,错误将被写入STDERR。然后它将继续执行第二个源。如果你想取消第一个源命令中的错误消息,你可以将STDOUT重定向到/dev/null。