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

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

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

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

重要

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

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

  • Lambda 调用操作:

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

    • 输出三个新变量:dateTimetestRunIdregion

  • 一种手动批准操作,它使用您的 Lambda 调用操作中的新变量来提供URL测试和测试运行 ID

  • 使用新操作更新的管道

先决条件

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

第 1 步:创建 Lambda 函数

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

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

  2. 选择 Create function (创建函数)。将 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. 选择 Create function (创建函数)

  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 的下方。

    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)。

  9. 最后一步,打开 AWS 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/

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

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

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

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

    3. 对于操作提供程序,选择 AWS 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. 在 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 变量的变量语法,构建审批消息文本。在本示例中,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 (审核)。已解析的变量显示URL为提交 ID。您的批准者可以选择URL来查看提交。

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