如何在启动新管道之前强制GitLab运行完整的管道?
我有一个与我的项目相关联的运行程序,以避免并发构建。GitLab在启动新管道之前是否要处理整个管道 concurrent设置为=1(运行程序的配置文件) 不幸的是,较早启动的管道受到新启动管道的干扰。因此,最终构建是有缺陷的 编辑新配置文件:如何在启动新管道之前强制GitLab运行完整的管道?,git,continuous-integration,gitlab,gitlab-ci,Git,Continuous Integration,Gitlab,Gitlab Ci,我有一个与我的项目相关联的运行程序,以避免并发构建。GitLab在启动新管道之前是否要处理整个管道 concurrent设置为=1(运行程序的配置文件) 不幸的是,较早启动的管道受到新启动管道的干扰。因此,最终构建是有缺陷的 编辑新配置文件: before_script: - echo %CI_BUILD_REF% - echo %CI_PROJECT_DIR% - xcopy /y /s "C:/Bauen" "%CI_PROJECT_DIR%" stages: - crea
before_script:
- echo %CI_BUILD_REF%
- echo %CI_PROJECT_DIR%
- xcopy /y /s "C:/Bauen" "%CI_PROJECT_DIR%"
stages:
- createPBLs
- build
- package
create PBLs:
stage: createPBLs
script:
- ./run_orcascript.cmd
only:
- tags
- master
build:
stage: build
script:
- ./run_pbc.cmd
only:
- tags
except:
- master
build_master:
stage: build
script:
- ./run_pbcm.cmd
only:
- master
package:
stage: package
script:
- ./cpfiles.cmd
artifacts:
expire_in: 1 week
name: "%CI_COMMIT_REF_NAME%"
paths:
- GitLab-Build
only:
- tags
- master
目前没有办法做到这一点,目前GitLab上存在一个问题 您可以改为在gitlab runner
config.toml
文件中添加limit=1
,这将强制gitlab runner一次只接受一个作业
我看到您没有在阶段之间传递工件,但是如果您的构建
阶段依赖于createPBLs
阶段中的任何内容,那么您可以使用
和的组合,用于在阶段之间传递数据
例如:
before_script:
- echo %CI_COMMIT_SHA%
- echo %CI_PROJECT_DIR%
stages:
- createPBLs
- build
- package
create PBLs:
stage: createPBLs
script:
- md "C:\HierBauen\%CI_COMMIT_SHA%\"
- xcopy /y /s "C:/Bauen" "C:/HierBauen/%CI_COMMIT_SHA%"
- xcopy /y /s "%CI_PROJECT_DIR%" "C:\HierBauen\%CI_COMMIT_SHA%"
- cd "C:\HierBauen\%CI_COMMIT_SHA%"
- ./run_orcascript.cmd
artifacts:
name: createPBLS_%CI_COMMIT_SHA%
untracked: true
expire_in: 1 day
only:
- tags
- master
build:
stage: build
script:
- cd "C:\HierBauen\%CI_COMMIT_SHA%"
- ./run_pbc.cmd
dependencies:
- createPBLs
artifacts:
name: build_%CI_COMMIT_SHA%
untracked: true
expire_in: 1 day
only:
- tags
except:
- master
build_master:
stage: build
script:
- cd "C:\HierBauen\%CI_COMMIT_SHA%"
- ./run_pbcm.cmd
dependencies:
- createPBLs
artifacts:
name: build_%CI_COMMIT_SHA%
untracked: true
expire_in: 1 day
only:
- master
package:
stage: package
script:
- cd "C:\HierBauen\%CI_COMMIT_SHA%"
- ./cpfiles.cmd
dependencies:
- build_master
artifacts:
expire_in: 1 week
paths:
- GitLab-Build
name: "%CI_COMMIT_REF_NAME%"
only:
- tags
- master
这很糟糕。我怎样才能重建管道,使两条不同的管道不会互相妨碍?工件只能从工作区中的运行程序中点击,对吗?@Hendouz是的,我已经更新了答案以给出一个示例。请注意,工件将上载到GitLab服务器,因此这可能需要一些时间-编辑上载的内容,以便只在阶段之间移动基本组件。感谢您的提示。但是,我有以下问题:如您所见,我的项目不是在运行程序的工作区中构建的,而是在另一个目录中构建的。还有构建脚本(例如run_orcascript.cmd、run_pbc.cmd、/run_pbcm.cmd)。你上面说:未追踪:正确。那么这些文件也被跟踪了?gitlab ci/runner是否可以在它自己的目录以外的目录中访问untracked:true,在该目录中它可以提取存储库@Rekovni@Hendouz啊,在使用GitLab Runner时可能会有问题,因为理想情况下,构建都将包含在自己的构建目录中,如果这样做有意义的话。如果可能的话,您可以在脚本之前执行
,并复制运行生成所需的所有文件?(因此它不依赖于构建之外的那些)。否则,您总是会遇到两条管道相互碰撞的问题,试图做出与您所发现的相同的更改。无法在本地完成。gitlab.com上最后一个(希望是)相关的公开问题:提到了两个解决方法:和
before_script:
- echo %CI_COMMIT_SHA%
- echo %CI_PROJECT_DIR%
stages:
- createPBLs
- build
- package
create PBLs:
stage: createPBLs
script:
- md "C:\HierBauen\%CI_COMMIT_SHA%\"
- xcopy /y /s "C:/Bauen" "C:/HierBauen/%CI_COMMIT_SHA%"
- xcopy /y /s "%CI_PROJECT_DIR%" "C:\HierBauen\%CI_COMMIT_SHA%"
- cd "C:\HierBauen\%CI_COMMIT_SHA%"
- ./run_orcascript.cmd
artifacts:
name: createPBLS_%CI_COMMIT_SHA%
untracked: true
expire_in: 1 day
only:
- tags
- master
build:
stage: build
script:
- cd "C:\HierBauen\%CI_COMMIT_SHA%"
- ./run_pbc.cmd
dependencies:
- createPBLs
artifacts:
name: build_%CI_COMMIT_SHA%
untracked: true
expire_in: 1 day
only:
- tags
except:
- master
build_master:
stage: build
script:
- cd "C:\HierBauen\%CI_COMMIT_SHA%"
- ./run_pbcm.cmd
dependencies:
- createPBLs
artifacts:
name: build_%CI_COMMIT_SHA%
untracked: true
expire_in: 1 day
only:
- master
package:
stage: package
script:
- cd "C:\HierBauen\%CI_COMMIT_SHA%"
- ./cpfiles.cmd
dependencies:
- build_master
artifacts:
expire_in: 1 week
paths:
- GitLab-Build
name: "%CI_COMMIT_REF_NAME%"
only:
- tags
- master