Jenkins 共享库现在可以在循环内工作

问题描述 投票:0回答:1

在 Jenkins 文件内的循环中使用我的共享库代码时出现问题。

我在 vars/codeSigning.groovy 中有一个 Jenkins 共享库函数,如下所示

void windows(String filePath) {
    String signFile = 'sign_windows.ps1'
    writeFile(file: signFile, text: libraryResource('sign_windows.ps1'))
    File signFilePath = new File(signFile)
    withCredentials([string(credentialsId: 'SM_API_KEY', variable: 'SM_API_KEY'), string(credentialsId: 'SM_CLIENT_CERT_PASSWORD', variable: 'SM_CLIENT_CERT_PASSWORD')]) {
        echo "Signing file: ${filePath}..."
        powershell label: "Signing file ${filePath}", script: """./${signFilePath} -FilePath "${filePath}" -CertificateName "COMPANY Incorporated" """
    }
}

当我在 Jenkins 文件中调用这样的函数时,它工作得很好

stage('CTC - Pre Build Stage') {
   steps {
      script {
         codeSigning.windows('pathtofile')
      }
   }
}

当我像这样运行它时,从 Jenkins 收到一条错误消息

java.lang.NoSuchMethodError:在其中找不到这样的 DSL 方法“windows” 步骤 [....] 或全局变量 [codeSigning, ...]

stage('Sign SharedScripts') {
   steps {
      unstash 'SharedScripts'
      script {
         def filesToSign = []
         def foundFiles = findFiles(glob: "scripts/**/*")
         foundFiles.each { filename ->
            if ("${filename}".endsWith(".ps1")) {
               filesToSign.add(filename)
            }
         }
         filesToSign.each { fileToSign ->
            codeSigning.windows(fileToSign)
         }
      }
   }
}
jenkins groovy jenkins-pipeline jenkins-shared-libraries
1个回答
0
投票

findFiles
步骤返回文件信息对象数组,而不是您可能期望的字符串列表。所以你会得到不匹配的方法签名。这应该可以解决它:

            codeSigning.windows(fileToSign.path)
© www.soinside.com 2019 - 2024. All rights reserved.