Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在启动新管道之前强制GitLab运行完整的管道?_Git_Continuous Integration_Gitlab_Gitlab Ci - Fatal编程技术网

如何在启动新管道之前强制GitLab运行完整的管道?

如何在启动新管道之前强制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

我有一个与我的项目相关联的运行程序,以避免并发构建。GitLab在启动新管道之前是否要处理整个管道

concurrent设置为=1(运行程序的配置文件)

不幸的是,较早启动的管道受到新启动管道的干扰。因此,最终构建是有缺陷的

编辑新配置文件:

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