2017-08-11 104 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' 
         } 
        } 
    
    相關問題