教程:将变量与 Lambda 调用操作一起使用 - Amazon CodePipeline
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

教程:将变量与 Lambda 调用操作一起使用

Lambda 调用操作可以使用来自另一个操作的变量作为其输入的一部分,并返回新变量及其输出。有关中操作变量的信息 CodePipeline,请参见Variables

在本教程结束时,您将具备:

  • Lambda 调用操作:

    • 消耗 CodeCommit 源CommitId操作中的变量

    • 输出三个新变量:dateTimetestRunIdregion

  • 一个手动审批操作,它使用 Lambda 调用操作中的新变量以提供测试 URL 和测试运行 ID

  • 使用新操作更新的管道

先决条件

在开始之前,您必须具有以下内容:

第 1 步:创建 Lambda 函数

使用以下步骤可创建 Lambda 函数和 Lambda 执行角色。创建 Lambda 函数后,可以将 Lambda 操作添加到您的管道中。

创建 Lambda 函数和执行角色
  1. 登录 Amazon Web Services Management Console 并打开 Amazon Lambda 控制台,网址为 https://console.aws.amazon.com/lambda/

  2. 选择创建函数。将 Author from scratch (从头开始创作) 保持选中状态:

  3. Function name (函数名称) 中,输入您的函数的名称,例如 myInvokeFunction。在 Runtime (运行时) 中,保持选中默认选项。

  4. 展开 Choose or create an execution role (选择或创建执行角色)。选择 Create a new role with basic Lambda permissions (创建具有基本 Lambda 权限的新角色)

  5. 选择创建函数

  6. 要使用来自另一个操作的变量,必须将它传递给 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(); };
  7. 选择保存

  8. 复制屏幕顶部的 Amazon 资源名称 (ARN)。

  9. 最后一步,打开 Amazon Identity and Access Management (IAM) 控制台,网址为 https://console.aws.amazon.com/iam/。修改 Lambda 执行角色以添加以下策略:。AWSCodePipelineCustomActionAccess有关创建 Lambda 执行角色或修改角色策略的步骤,请参阅第 2 步:创建 Lambda 函数

步骤 2:向您的管道添加 Lambda 调用操作和手动审批操作

在此步骤中,将 Lambda 调用操作添加到您的管道中。可以在名为 Test 的阶段中添加操作。操作类型是一个调用动作。然后,您可以在调用操作后面添加手动审批操作。

向管道添加 Lambda 操作和手动审批操作
  1. 打开 CodePipeline 控制台,网址为 https://console.aws.amazon.com/codepipeline/

    将显示与您的 Amazon 账户关联的所有管道的名称。选择要添加操作的管道。

  2. 将 Lambda 测试操作添加到您的管道中。

    1. 要编辑您的管道,请选择编辑。在现有管道中的源操作后面添加一个阶段。输入阶段的名称,例如 Test

    2. 在新阶段中,选择要添加操作的图标。在 Action name (操作名称) 中,输入调用操作的名称,例如 Test_Commit

    3. 对于操作提供程序,选择 Amazon Lambda

    4. Input artifacts (输入构件) 中,选择源操作输出构件的名称,例如 SourceArtifact

    5. 函数名称中,选择您创建的 Lambda 函数的名称。

    6. 用户参数中,输入提 CodeCommit 交 ID 的变量语法。此时将创建输出变量,该变量解析为每次管道运行时要复核和审批的提交。

      #{SourceVariables.CommitId}
    7. Variable namespace (变量命名空间) 中,添加命名空间名称,例如 TestVariables

    8. 选择完成

  3. 将手动审批操作添加到您的管道中。

    1. 如果您的管道仍处于编辑模式,则在调用操作后面添加一个阶段。输入阶段的名称,例如 Approval

    2. 在新阶段中,选择要添加操作的图标。在 Action name (操作名称) 中,输入审批操作的名称,例如 Change_Approval

    3. Action provider (操作提供程序) 中,选择 Manual approval (手动审批)

    4. 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 变量的变量语法,构建审批消息文本。对于此示例,使用 Lambda testRunId 输出变量的变量语法的 URL 具有 TestVariables 命名空间。输入以下消息。

      Make sure to review the code before approving this action. Test Run ID: #{TestVariables.testRunId}
  4. 选择 Done (完成) 以关闭操作的编辑屏幕,然后选择 Done (完成) 以关闭阶段的编辑屏幕。要保存管道,请选择 Done (完成)。已完成的管道现在包含一个结构,该结构带有源、测试、审批和部署阶段。

    选择 Release change (发布更改) 以通过管道结构运行最新更改。

  5. 当管道到达手动审批阶段时,选择 Review (审核)。解析的变量显示为提交 ID 的 URL。您的审批人可以选择该 URL 来查看提交。

  6. 当成功运行管道后,您还可以在操作执行历史记录页面上查看变量值。