本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:将变量与 Lambda 调用操作一起使用
Lambda 调用操作可以使用来自另一个操作的变量作为其输入的一部分,并返回新变量及其输出。有关中操作变量的信息 CodePipeline,请参见Variables。
在本教程结束时,您将具备:
-
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/
。 -
选择创建函数。将 Author from scratch (从头开始创作) 保持选中状态:
-
在 Function name (函数名称) 中,输入您的函数的名称,例如
myInvokeFunction
。在 Runtime (运行时) 中,保持选中默认选项。 -
展开 Choose or create an execution role (选择或创建执行角色)。选择 Create a new role with basic Lambda permissions (创建具有基本 Lambda 权限的新角色)。
-
选择创建函数。
-
要使用来自另一个操作的变量,必须将它传递给 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
的下方。var AWS = require('aws-sdk'); exports.handler = function(event, context) { var codepipeline = new AWS.CodePipeline(); // Retrieve the Job ID from the Lambda action var jobId = event["CodePipeline.job"].id; // Retrieve the value of UserParameters from the Lambda action configuration in CodePipeline, // in this case it is the Commit ID of the latest change of the pipeline. var params = event["CodePipeline.job"].data.actionConfiguration.configuration.UserParameters; // The region from where the lambda function is being executed. var lambdaRegion = process.env.AWS_REGION; // Notify CodePipeline of a successful job var putJobSuccess = function(message) { var params = { jobId: jobId, outputVariables: { testRunId: Math.floor(Math.random() * 1000).toString(), dateTime: Date(Date.now()).toString(), region: lambdaRegion } }; codepipeline.putJobSuccessResult(params, function(err, data) { if(err) { context.fail(err); } else { context.succeed(message); } }); }; // Notify CodePipeline of a failed job var putJobFailure = function(message) { var params = { jobId: jobId, failureDetails: { message: JSON.stringify(message), type: 'JobFailed', externalExecutionId: context.invokeid } }; codepipeline.putJobFailureResult(params, function(err, data) { context.fail(message); }); }; var sendResult = function() { try { console.log("Testing commit - " + params); // Your tests here // Succeed the job putJobSuccess("Tests passed."); } catch (ex) { // If any of the assertions failed then fail the job putJobFailure(ex); } }; sendResult(); };
-
选择保存。
-
复制屏幕顶部的 Amazon 资源名称 (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 (手动审批)。
-
在 URL for review (用于审查的 URL) 中,通过为
CommitId
变量和region
变量添加变量语法,来构建 URL。确保您使用分配给提供输出变量的操作的命名空间。在此示例中,带有 CodeCommit 动作变量语法的 URL 具有默认命名空间
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 (审核)。解析的变量显示为提交 ID 的 URL。您的审批人可以选择该 URL 来查看提交。
-
当成功运行管道后,您还可以在操作执行历史记录页面上查看变量值。