我正在使用 gitlab runner 部署应用程序 -shared gitlab runner 并且并发数为 4
/etc/gitlab-runner/config.toml
concurrent = 4
check_interval = 0
executor = shell
所有作业都在不同的阶段运行。
.gitlab-ci.yml
stages:
- build-prod-stage
- deploy-prod-stage
BUILD_PROD_JOB:
stage: build-prod-stage
variables:
GIT_CLEAN_FLAGS: none
script:
- xxxxxx
- xxxxx
DEPLOY_PROD_JOB:
variables:
GIT_CLEAN_FLAGS: none
stage: deploy-prod-stage
script:
- xxxxxx
- xxxxxx*
通常,BUILD_PROD_JOB 和 DEPLOY_PROD_JOB 在同一个构建目录中运行。但有时它们彼此使用不同的目录
gitlab-runner 日志
构建生产任务 正在获取更改,并将 git 深度设置为 50... 已在 /xxxx/gitlab-runner/builds/(gitlab-runner 名称)/ 中初始化空的 Git 存储库1/(存储库名称)/.git/.....
部署_生产_作业 正在获取更改,并将 git 深度设置为 50... 已在 /xxxx/gitlab-runner/builds/(gitlab-runner 名称)/ 中初始化空的 Git 存储库0/(存储库名称)/.git/....
我猜到了为什么会发生这些事情。
- BUILD_PROD_JOB 在其他作业正在运行时开始运行。因此,CI_CONCURRENT_ID 为 1
- DEPLOY_PROD_JOB 在其他作业完成后开始运行,因此 CI_CONCURRENT_ID 为 0
在这种情况下,我可以强制“DEPLO_PROD_JOB”在与“BUILD_PROD_JOB”相同的 build_dir 中运行吗?
- BUILD_PRODJOB --> /xxxx/gitlab-runner/builds/(gitlab-runner 名称)/1/(存储库名称)/.git/
- DEPLOY_PRODJOB --> /xxxx/gitlab-runner/builds/(gitlab-runner 名称)/1/(存储库名称)/.git/
答案1
您需要使用工件和依赖项在作业之间传递数据:
stages:
- build-prod-stage
- deploy-prod-stage
BUILD_PROD_JOB:
stage: build-prod-stage
variables:
GIT_CLEAN_FLAGS: none
script:
- xxxxxx
- xxxxx
artifacts:
paths:
- path-to-the-folder-you-want-to-share-between-jobs
DEPLOY_PROD_JOB:
variables:
GIT_CLEAN_FLAGS: none
stage: deploy-prod-stage
script:
- xxxxxx
- xxxxxx*
needs:
- job: BUILD_PROD_JOB
artifacts: true