簡體   English   中英

Jenkinsfile,從控制台輸出返回特定行

[英]Jenkinsfile, return specific line from console output

我在 Jenkins 中有一個多分支管道,使用 Jenkinsfile。 我讓它運行一個 Maven 作業,然后將工件發送到 S3。 我想在成功構建后發送一封電子郵件通知,其中包含一個動態指向 S3 中的工件的鏈接。 我寧願通過 S3 而不是 Jenkins 指向工件,因為 1)這可以確保工件正確存儲在 S3 中,並且 2)S3 具有更長的存儲空間。 有沒有簡單的方法可以做到這一點? 我在想也許掃描構建的控制台輸出以查找將工件上傳到 S3 的行(請參閱下面的非工作代碼,我收到“執行成功后條件時出錯”並且沒有收到電子郵件),但我我是編碼/Jenkins 的新手,不知道如何通過控制台輸出過濾工件。 我是否過於復雜了,有沒有更簡單的方法可以做到這一點? 和/或您能幫我修復此代碼片段以使其正常工作嗎? 謝謝!

post {
    success {
       script {
          def file = currentBuild.rawBuild.log
          def data = file.filterLine { line ->
             line.contains('Uploaded to repo.XXX: s3://XXX-artifacts')
          }
          emailext (
             subject: '$JOB_NAME build',
             body: "$JOB_NAME, job $BUILD_ID.\n$BUILD_URL\nhttps://XXX-artifacts.s3.us-west-2.amazonaws.com" + data,
             to: env.EmailList)
    }
  }
}

我能夠使用 manager.getLogMatcher 解決這個問題

post {
    success {
        script {
            def S3_url = manager.getLogMatcher ("(.*)Uploaded(.*)+s3(.*)+zip(.*)")
            if (S3_url.matches()) {
              S3_url = S3_url.group(0)
            ....
            }
        }
    }
}

manager.getLogMatcher 搜索控制台輸出,在這種情況下,它正在尋找包含“Uploaded”、“s3”和“.zip”的特定行。 然后我可以操縱該結果(此處未顯示全部)以將 URL 創建為變量 S3_url,然后我只需將其包含在 emailext 中以代替“”https ....com“+數據”在原帖中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM