本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:将变量与 Lambda 调用操作一起使用
Lambda 调用操作可以使用来自另一个操作的变量作为其输入的一部分,并返回新变量及其输出。有关中操作变量的信息 CodePipeline,请参见变量参考。
重要
作为创建管道的一部分,客户提供的 S3 工件存储桶将 CodePipeline 用于项目。(这与用于 S3 源操作的存储桶不同。) 如果 S3 工件存储桶与您的管道账户位于不同的账户中,请确保 S3 工件存储桶归其所有 Amazon Web Services 账户 ,该存储桶是安全且可靠的。
在本教程结束时,您将具备:
-
Lambda 调用操作:
-
消耗 CodeCommit 源
CommitId
操作中的变量 -
输出三个新变量:
dateTime
、testRunId
和region
-
-
一种手动批准操作,它使用您的 Lambda 调用操作中的新变量来提供URL测试和测试运行 ID
-
使用新操作更新的管道
先决条件
在开始之前,您必须具有以下内容:
-
您可以创建或使用带有 CodeCommit 源代码的管道教程:创建简单的管道(CodeCommit存储库)。
-
编辑现有管道,使 CodeCommit 源操作具有命名空间。将命名空间
SourceVariables
分配给操作。
第 1 步:创建 Lambda 函数
使用以下步骤可创建 Lambda 函数和 Lambda 执行角色。创建 Lambda 函数后,可以将 Lambda 操作添加到您的管道中。
创建 Lambda 函数和执行角色
登录 Amazon Web Services Management Console 并打开 Amazon Lambda 控制台,网址为https://console.aws.amazon.com/lambda/
。 -
选择 Create function (创建函数)。将 Author from scratch (从头开始创作) 保持选中状态:
-
在 Function name (函数名称) 中,输入您的函数的名称,例如
myInvokeFunction
。在 Runtime (运行时) 中,保持选中默认选项。 -
展开 Choose or create an execution role (选择或创建执行角色)。选择 Create a new role with basic Lambda permissions (创建具有基本 Lambda 权限的新角色)。
-
选择 Create function (创建函数)。
-
要使用来自另一个操作的变量,必须将它传递给 Lambda 调用操作配置中的
UserParameters
。您将在本教程的后面部分的管道中配置操作,但假设将传递变量,您将添加代码。const commitId = event["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters;
要生成新变量,请将输入上名为
outputVariables
的属性设置为putJobSuccessResult
。请注意,您不能将变量作为putJobFailureResult
的一部分生成。const successInput = { jobId: jobId, outputVariables: { testRunId: Math.floor(Math.random() * 1000).toString(), dateTime: Date(Date.now()).toString(), region: lambdaRegion } };
在您的新函数中,将 Edit code inline (编辑内联代码) 保持选中状态,然后将以下示例代码粘贴到
index.js
的下方。import { CodePipeline } from '@aws-sdk/client-codepipeline'; export const handler = async (event, context) => { const codepipeline = new CodePipeline({}); // Retrieve the Job ID from the Lambda action const jobId = event["CodePipeline.job"].id; // Retrieve UserParameters const params = event["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters; // The region from where the lambda function is being executed const lambdaRegion = process.env.AWS_REGION; // Notify CodePipeline of a successful job const putJobSuccess = async (message) => { const params = { jobId: jobId, outputVariables: { testRunId: Math.floor(Math.random() * 1000).toString(), dateTime: Date(Date.now()).toString(), region: lambdaRegion } }; try { await codepipeline.putJobSuccessResult(params); return message; } catch (err) { throw err; } }; // Notify CodePipeline of a failed job const putJobFailure = async (message) => { const params = { jobId: jobId, failureDetails: { message: JSON.stringify(message), type: 'JobFailed', externalExecutionId: context.invokeid } }; try { await codepipeline.putJobFailureResult(params); throw message; } catch (err) { throw err; } }; try { console.log("Testing commit - " + params); // Your tests here // Succeed the job return await putJobSuccess("Tests passed."); } catch (ex) { // If any of the assertions failed then fail the job return await putJobFailure(ex); } };
-
选择保存。
-
复制屏幕顶部的亚马逊资源名称 (ARN)。
-
最后一步,打开 Amazon Identity and Access Management (IAM) 控制台,网址为https://console.aws.amazon.com/iam/
。修改 Lambda 执行角色以添加以下策略:。AWSCodePipelineCustomActionAccess 有关创建 Lambda 执行角色或修改角色策略的步骤,请参阅第 2 步:创建 Lambda 函数 。
步骤 2:向您的管道添加 Lambda 调用操作和手动审批操作
在此步骤中,将 Lambda 调用操作添加到您的管道中。可以在名为 Test 的阶段中添加操作。操作类型是一个调用动作。然后,您可以在调用操作后面添加手动审批操作。
向管道添加 Lambda 操作和手动审批操作
-
打开 CodePipeline 控制台,网址为https://console.aws.amazon.com/codepipeline/
。 将显示与您的 Amazon 账户关联的所有管道的名称。选择要添加操作的管道。
-
将 Lambda 测试操作添加到您的管道中。
-
要编辑您的管道,请选择编辑。在现有管道中的源操作后面添加一个阶段。输入阶段的名称,例如
Test
。 -
在新阶段中,选择要添加操作的图标。在 Action name (操作名称) 中,输入调用操作的名称,例如
Test_Commit
。 -
对于操作提供程序,选择 Amazon Lambda。
-
在 Input artifacts (输入构件) 中,选择源操作输出构件的名称,例如
SourceArtifact
。 -
在函数名称中,选择您创建的 Lambda 函数的名称。
-
在用户参数中,输入提 CodeCommit 交 ID 的变量语法。此时将创建输出变量,该变量解析为每次管道运行时要复核和审批的提交。
#{SourceVariables.CommitId}
-
在 Variable namespace (变量命名空间) 中,添加命名空间名称,例如
TestVariables
。 -
选择完成。
-
-
将手动审批操作添加到您的管道中。
-
如果您的管道仍处于编辑模式,则在调用操作后面添加一个阶段。输入阶段的名称,例如
Approval
。 -
在新阶段中,选择要添加操作的图标。在 Action name (操作名称) 中,输入审批操作的名称,例如
Change_Approval
。 -
在 Action provider (操作提供程序) 中,选择 Manual approval (手动审批)。
-
在 f URLor review 中,URL通过添加变量和变
region
量的变量语法来CommitId
构造。确保您使用分配给提供输出变量的操作的命名空间。在此示例中, CodeCommit 动作的 w URL ith the variable 语法具有默认命名空间
SourceVariables
。Lambda 区域输出变量具有TestVariables
命名空间。URL看起来如下所示。https://#{TestVariables.region}.console.aws.amazon.com/codesuite/codecommit/repositories/MyDemoRepo/commit/#{SourceVariables.CommitId}
在 Comments (注释) 中,通过添加
testRunId
变量的变量语法,构建审批消息文本。在本示例中,LambdatestRunId
输出变量的URL带变量语法具有命名TestVariables
空间。输入以下消息。Make sure to review the code before approving this action. Test Run ID: #{TestVariables.testRunId}
-
-
选择 Done (完成) 以关闭操作的编辑屏幕,然后选择 Done (完成) 以关闭阶段的编辑屏幕。要保存管道,请选择 Done (完成)。已完成的管道现在包含一个结构,该结构带有源、测试、审批和部署阶段。
选择 Release change (发布更改) 以通过管道结构运行最新更改。
-
当管道到达手动审批阶段时,选择 Review (审核)。已解析的变量显示URL为提交 ID。您的批准者可以选择URL来查看提交。
-
当成功运行管道后,您还可以在操作执行历史记录页面上查看变量值。