如何在 Jenkins 中将此 groovy class 和 运行 转换为库?

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 函数,但我不确定在这种情况下如何使用它。我如何转换此代码?

假设您想对 getSecret 方法生成的 String 对象执行某些操作。我进一步假设,你 已经将您的 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}"
  }
}

输出

[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