[英]How do I convert this groovy class and run it in Jenkins as a library?
我有這個 groovy class,它有一個主要方法和一些其他方法。
public class secrets {
public static void main(String[] args) {
String secretName = args[0];
String secretType = args[1]; //username, password or b64_authkey
SecretsManagerClient sm = SecretsManagerClient.builder()
.region(Region.EU_WEST_1)
.build();
getSecret(sm, secretName, secretType);
sm.close();
}
public static String getSecret(SecretsManagerClient sm,String secretName, String secretType){
.......
嘗試在 Jenkins 中運行時出現錯誤:
groovy.lang.MissingMethodException: No signature of method: com.dev.libs.secrets.call() is applicable for argument types: (java.lang.String, java.lang.String,) values: [secret, username]
我知道我需要call
function,但我不確定在這種情況下如何使用它。 我怎樣才能轉換這個代碼?
假設您想對getSecret
方法生成的字符串 object 執行某些操作。 我進一步假設,您已經將您的secrets.groovy
文件放入共享庫(在我的示例中由名稱test-library
標識)並且在您的構建腳本中具有正確的@Library
注釋。
注意:我不得不“模擬”一些對象來測試我的代碼。 所以如果你願意,你基本上可以忽略前幾個代碼片段。
vars/Region.groovy
的模擬文件enum Region {
EU_WEST_1
}
vars/SecretsManagerClient.groovy
的模擬文件class SecretsManagerClient {
static SecretsManagerClientBuilder builder() {
new SecretsManagerClientBuilder()
}
def close() {
}
static class SecretsManagerClientBuilder {
SecretsManagerClientBuilder region(Region region) {
this
}
SecretsManagerClient build() {
new SecretsManagerClient()
}
}
}
vars/secrets.goovy
的代碼示例// probably some import for SecretsManagerClient and Region
//public class secrets {
def call(String secretName, String secretType) {
SecretsManagerClient sm = SecretsManagerClient.builder()
.region(Region.EU_WEST_1)
.build();
try {
return getSecret(sm, secretName, secretType);
} finally {
sm.close();
}
}
static String getSecret(SecretsManagerClient sm, String secretName, String secretType) {
"secret"
}
//}
我使用了一個非常簡單的構建腳本來調用構建步驟並回顯getSecret
方法的結果。
// import library named "test-library" in settings (mind the underscore at the end!)
@Library('test-library')_
// run on master node (or any other label you might choose)
node('master') {
// create a stage
stage('Get secret from new step') {
// run our custom build step named "secrets", which will use "call" function to call "getSecret"
def theSecret = secrets "name", "type"
// print result
sh "echo ${theSecret}"
}
}
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/jenkins_home/workspace/Test-Job
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Get secret from new step)
[Pipeline] sh
+ echo secret
secret
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.