View a markdown version of this page

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

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

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

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

重要

作为创建管道的一部分,客户提供的 S3 工件存储桶将用于存放 CodePipeline 工件。(这与用于 S3 源操作的存储桶不同。) 如果 S3 项目存储桶与您的管道账户位于不同的账户中,请确保 S3 工件存储桶归安全且可靠的账户所有。 Amazon Web Services 账户

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

  • Lambda 调用操作:

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

    • 输出三个新变量:dateTime、testRunId 和 region

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

  • 使用新操作更新的管道

先决条件

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

第 1 步:创建 Lambda 函数

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

创建 Lambda 函数和执行角色
  1. 登录 Amazon Web Services 管理控制台 并打开 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。您将在本教程的后面部分在管道中配置操作,但您将在假定传递变量的情况下添加代码。

    要生成新变量,请将输入上名为 outputVariables 的属性设置为 putJobSuccessResult。请注意,您不能将变量作为 putJobFailureResult 的一部分生成。

    const putJobSuccess = async (message) => { const params = { jobId: jobId, outputVariables: { testRunId: Math.floor(Math.random() * 1000).toString(), dateTime: Date(Date.now()).toString(), region: lambdaRegion } };

    在新函数中,在代码选项卡上,将以下示例代码粘贴到 index.mjs 下方。

    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); } };
  7. 允许该函数自动保存。

  8. 复制屏幕顶部的函数 ARN 字段中包含的 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. 在中 FunctionName,添加您创建的 Lambda 函数的 ARN。

    6. 在 Variable namespace (变量命名空间) 中,添加命名空间名称,例如 TestVariables。

    7. 在输出构件中,添加输出构件名称,如 LambdaArtifact。

    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. 当成功运行管道后,您还可以在操作执行历史记录页面上查看变量值。