首页 > 解决方案 > 如何在詹金斯管道中使用invokeLambda的输出?

问题描述

我正在从 jenkins 声明性管道中调用 lambda 函数。现在我想在其他管道中使用它的输出。我正在尝试以下代码:

def health=invokeLambda([awsAccessKeyId: 'xxxx', awsRegion: 'rrrrr', awsSecretKey: 'kkkkk', functionName: 'yyyyyy', payload: '', synchronous: true]);

当我尝试我 echo "$health"得到空值时。

有谁知道如何在 jenkinsfile 中使用 lambda 函数的输出?

标签: jsonjenkinsaws-lambdajenkins-pipelinejsonpath

解决方案


我假设您使用的是AWS Lambda 插件,这是一个相对较旧的插件,专为自由式作业而非管道设计。
虽然您可以在管道脚本中使用它,但您将无法获得返回值,因为该插件旨在使用结果更新环境变量 - 这在自由式作业中有效,但在管道中不受支持。

为了实现您想要的,您可以使用新的面向管道的 AWS Steps 插件,其中包含许多 AWS 相关步骤,这些步骤专为管道使用而设计,并允许轻松访问这些步骤的输出。与旧插件相比,它也更安全并允许更多功能 - 特别是对于管道。

在您的情况下,您可以使用invokeLambda将返回您期望的输出的步骤:

withAWS(region:'eu-central-1', credentials:'nameOfSystemCredentials') {
    def result = invokeLambda(
            functionName: 'myLambdaFunction',
            payload: [ "key": "value", "anotherkey" : [ "another", "value"] ]
    )
}

推荐阅读