2017-08-11 122 views
0

我有一个项目kuma组织与子模块:如何配置Jenkins多分支管道作为子模块构建?

  • kuma
    • Jenkinsfile(配置测试的Kuma)
    • locales
    • kumascript
      • Jenkinsfile(配置测试kumascript)
    • 一堆其他文件

我想配置詹金斯多分支管道是手表上kumascript回购分支机构,为:

  1. 检查退出kuma的主分支
  2. 将区域设置更新为主分支中的提交(常规git submodule update --init
  3. 更新kumascript子模块的分支在kumascript分支

测试

  • 运行Jenkinsfile这可能吗?有一个更好的方法吗?

  • 回答

    0

    以下是我的工作。

    首先,Jekinsfile是在签出之前从结账中读取的,因此易于使用kumascript子模块中的一个,并且从不同的回购中读取它要困难得多(不可能?)。

    在詹金斯2.68与Git插件3.4.1,我设置了一个多分支管道。在一个来源是Git的,指向kumascript库:

    Jenkins Git setup

    “发现分支”发现树枝在仓库中,并开始建立他们。

    “清除存储库并强制克隆”解决了jgit在检出之前未取出子模块存储库的问题,因此目标提交不可用。它使看起来像这样在詹金斯记录一个错误:

    > git fetch --no-tags --progress https://github.com/mdn/kumascript +refs/heads/*:refs/remotes/origin/* 
    Checking out Revision 998d9e539127805742634ef1c850221cf04ca2c7 (build-with-locales-1340342) 
    org.eclipse.jgit.errors.MissingObjectException: Missing unknown 998d9e539127805742634ef1c850221cf04ca2c7 
    at org.eclipse.jgit.internal.storage.file.WindowCursor.open(WindowCursor.java:158) 
    at org.eclipse.jgit.lib.ObjectReader.open(ObjectReader.java:227) 
    at org.eclipse.jgit.revwalk.RevWalk.parseAny(RevWalk.java:859) 
    at org.eclipse.jgit.revwalk.RevWalk.parseCommit(RevWalk.java:772) 
    

    这个问题出现在https://issues.jenkins-ci.org/browse/JENKINS-45729予以报道,并报道固定在Git的客户端插件2.5.0。

    擦除回购看起来会强制完整提取,并且在安装到父项目时可能需要。

    Jenkins现在已配置为为存储库中的每个分支创建构建。要将其作为子模块检出,父项目需要在Jenkins文件中手动检出。我用詹的“管道语法”工具来帮助构建命令

    Jenkins pipeline syntax tool

    一些格式化之后,这正好在我Jenkinsfile

    stage("Prepare") { 
         // Checkout Kuma project's master branch 
         checkout([$class: 'GitSCM', 
            userRemoteConfigs: [[url: 'https://github.com/mozilla/kuma']], 
            branches: [[name: 'refs/heads/master']], 
            extensions: [[$class: 'SubmoduleOption', 
               disableSubmodules: false, 
               parentCredentials: false, 
               recursiveSubmodules: true, 
               reference: '', 
               trackingSubmodules: false]], 
               doGenerateSubmoduleConfigurations: false, 
            submoduleCfg: [] 
           ]) 
    
         // Checkout KumaScript in subfolder 
         dir('kumascript') { 
          checkout scm 
         } 
        } 
    

    这将检查出来的kuma项目及其子模块,并然后使用“vanilla”结帐签出所请求的分支,但在子模块目录中:

    从此,如果我想在kuma中运行命令EPO,我运行它:

    stage('Build') { 
         sh 'make build-kumascript VERSION=latest' 
        } 
    

    ,如果我想在kumascript子模块运行它,我把它包在dir

    stage('Lint') { 
         dir('kumascript') { 
         sh 'make lint VERSION=latest' 
         sh 'make lint-macros VERSION=latest' 
         } 
        } 
    
    相关问题