簡體   English   中英

我如何轉換這個 groovy class 並在 Jenkins 中作為庫運行?

[英]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注釋。

注意:我不得不“模擬”一些對象來測試我的代碼。 所以如果你願意,你基本上可以忽略前幾個代碼片段。

Jenkins共享庫代碼

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"
}

//}

Jenkins 管道構建腳本

我使用了一個非常簡單的構建腳本來調用構建步驟並回顯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}"
  }
}

Output

[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.

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