如何从 CDK 上的 CodePipeline 获取源工件?

2024-04-04

我正在使用官方 AWS 文档来使用 CDK 创建管道:https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html#cdk_pipeline_define https://docs.aws.amazon.com/cdk/latest/guide/cdk_pipeline.html#cdk_pipeline_define(与文档略有不同,我使用了 CodeStar 连接,正如代码注释所建议的那样)

这会自动创建一个自变异管道,具有三个阶段:Source、Synth 和 UpdatePipeline。那太棒了。

我想添加一个带有 CodeBuild 操作的新阶段。我希望 CodeBuild 操作基于源目录中的 buildspec.yml 文件。

在控制台上,我可以通过单击“添加新阶段”、“添加操作”并从下拉菜单中选择输入工件来轻松完成此操作。

然而,在 CDK 上,使用推荐的设置并没有简单的方法来访问输入工件。

我通过强迫设法做到了buildPipeline()并这样做:

import * as cdk from "@aws-cdk/core";
import {
  CodePipeline,
  ShellStep,
  CodePipelineSource,
} from "@aws-cdk/pipelines";
import * as codebuild from "@aws-cdk/aws-codebuild";
import * as codepipelineActions from "@aws-cdk/aws-codepipeline-actions";


export class PipelineStack extends cdk.Stack {
  public readonly source: cdk.CfnOutput

  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    const source = CodePipelineSource.connection("someuser/somerepo", "master", {
      connectionArn: "arn:aws:codestar-connections:us-east-1:REDACTED:connection/REDACTED"
    });

    const synthShellStep = new ShellStep("Synth", {
      input: source,
      commands: [
          "cd infrastructure",
          "npm run ci",
          "npm run build",
          "npx cdk synth"
      ],
      "primaryOutputDirectory": "infrastructure/cdk.out"
    });

    const pipeline = new CodePipeline(this, "Pipeline", {
      pipelineName: "FancyPipeline",
      synth: synthShellStep
    });

    // Need to build the pipeline to access the
    // source artifact
    pipeline.buildPipeline();

    const sourceStage = pipeline.pipeline.stage("Source");
    if (sourceStage) {
      const sourceOutputs = sourceStage.actions[0].actionProperties.outputs;
      if (sourceOutputs && sourceOutputs.length > 0) {
        const sourceArtifact = sourceOutputs[0];


        const codeBuildProject = new codebuild.PipelineProject(this, 'DockerBuildProject', {
          environment: {
            privileged: true
          }
        });

        const buildAction = new codepipelineActions.CodeBuildAction({
          actionName: 'DockerBuild',
          project: codeBuildProject,
          input: sourceArtifact,
          environmentVariables: {
            AWS_DEFAULT_REGION: {
              value: this.region
            },
            AWS_ACCOUNT_ID: {
              value: this.account
            },
            IMAGE_REPO_NAME: {
              value: "somereponame"
            },
            IMAGE_TAG: {
              value: "latest"
            }
          }
        });

        pipeline.pipeline.addStage({
          stageName: "DockerBuildStage",
          actions: [buildAction],
        });
      }
    }
  }
}

但这总体感觉很尴尬,而且我无法打电话addStage() on the CodePipeline不再建造。当然有更好的方法来做我想做的事情吗?

任何帮助/建议将不胜感激。谢谢。


The codepipelineActions.CodeBuildAction方法接受一个名为outputs这是此操作的输出工件列表。 TypeScript 源here https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_codepipeline.ActionProperties.html。我认为在文档的 python 版本中更容易理解(链接here https://docs.aws.amazon.com/cdk/api/v2/python/aws_cdk.aws_codepipeline_actions/CodeBuildAction.html).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 CDK 上的 CodePipeline 获取源工件? 的相关文章

  • 发布到 AWS...Visual Studio 2017 中缺失

    我正在尝试将 lambda 函数发布到 AWS 但我的 VS 解决方案资源管理器的项目右键单击菜单在 Visual Studio 2017 中没有 发布到 AWS 选项 这是一天前出现的 如何或可以将 发布到 AWS 添加到 Visual
  • 检查SQS队列是否为空的有效方法

    我有一个SQS Queue多个主机从中读取消息 我想在处理队列中的所有消息后运行一些作业 业务逻辑 如何检查队列是否为空 是的 我可以检查ApproximateNumberOfMessages and ApproximateNumberOf
  • 为什么changeResourceRecordSets没有被授权访问此资源?

    我正在尝试在 Route 53 中创建一条别名类型的新记录 以告诉 Route 53 起诉 CloudFront 来为该站点提供服务 我正在尝试使用以下代码来执行此操作 let options ChangeBatch Changes Act
  • 如何恢复丢失的aws服务器实例的私钥?

    我丢失了 AWS 实例的私钥 我在控制台面板中搜索了该选项 恐怕你可能不走运 当您启动实例时 您应该指定密钥的名称 您计划用于连接到实例的对 如果你不指定 启动实例时现有密钥对的名称 您 将无法连接到实例 当您连接到 例如 您必须指定与密钥
  • Amazon S3 - 一个对象的多个键

    我有一个 S3 存储桶 其中包含超过 1 亿个对象 每个对象像往常一样都有一个唯一的密钥 我想知道是否有办法为其中一些对象分配另一个键 像这样的东西 键1 gt 对象1 键2 gt 对象2 Key3 gt Object2 我想添加这个 我在
  • AWS CLI 从 AWS CLI 获取私有存储桶的下载 S3 URL

    我可以将文件上传到private使用以下命令成功S3存储桶 aws s3 cp myfile txt s3 myfolder myfile txt region us east 1 output json 我想发出 AWS CLI 命令来返
  • 如何在亚马逊 EC2 上调试 python 网站?

    我是网络开发新手 这可能是一个愚蠢的问题 但我找不到可以帮助我的确切答案或教程 我工作的公司的网站 用 python django 构建 托管在亚马逊 EC2 上 我想知道从哪里开始调试这个生产站点并检查存储在那里的日志和数据库 我有帐户信
  • 如何设置 AWS Appsync 请求超时限制 || AWSAppSync 客户端不提供回调

    我正在使用 AWS Appsync 来开发当前的应用程序 并面临一个严重的问题 即每当我在 Appsync 客户端中触发查询时 当互联网连接速度较慢时 请求永远不会以回调结束 我在互联网上查了一下 关于这个主题的信息来源有限 而且发现这个问
  • 如何使用 AWS CodeCommit 作为 Spring Cloud Config 的存储库

    我正在尝试将 AWS CodeCommit 存储库与 Spring Cloud 配置结合使用 我已经设法让它与 SSH 一起工作 但我想使用 https 而不是 SSH AWS 建议使用凭证助手 有谁知道如何配置 spring config
  • 如何在 NextJS 中设置 AWS-SDK 凭证

    我需要从 NextJs 应用程序将一些文件上传到 S3 由于它是服务器端 我的印象是简单地设置环境变量应该可以工作 但事实并非如此 我知道还有其他选择 例如为 EC2 分配角色 但我想使用 accessKeyID 和 SecretKey 这
  • Docker Build 找不到 pip

    尝试关注一些 1 https aws amazon com blogs aws run docker apps locally using the elastic beanstalk eb cli 2 http docs aws amazo
  • AWS 存储桶和区域

    该应用程序结合使用载波carrierwave aws宝石 在迁移 Rails 版本 升至 4 2 Ruby 版本 2 2 3 并重新部署到同一临时服务器时遇到了障碍 AWS 存储桶最初是在免费套餐中创建的 即俄勒冈州 us west 2 但
  • Django 和 AWS 简单电子邮件服务 [重复]

    这个问题在这里已经有答案了 我正在尝试启动并运行 django 站点 并且正在尝试启用 django 的标准密码重置服务 我的网站由 AWS EC2 托管 因此我想将 AWS SES 用于我的电子邮件服务 但是 我无法使 smtp 连接正常
  • AWS CloudSearch:1 个域中的不同文档?

    我有兴趣在我的 Web 应用程序中使用 AWS Cloud Search 我想要将 3 种不同的文档类型设为可搜索 用户 文章 图像 使用 Cloud Search 执行此操作的最佳方法是什么 我需要创建 3 个不同的 AWS 搜索域吗 这
  • AWS DynamoDb DocumentClient - 从项目数组创建批量写入 - node.js

    我正在尝试执行batchWrite使用 DynamoDB 的操作DocumentClient来自项目数组 JSON 这是我的代码 var items for i 0 i lt orders length i var ord orders i
  • 当操作系统为 Windows Server 2019 时,ec2 私有子网无法到达 169.254.169.254

    我有多个 ec2 实例在私有子网中运行 仅允许 vpc 内的流量 其中一些实例是自定义操作系统 其中一些实例运行 AWS windows server 2012 ami 有些运行 AWS Windows Server 2019 ami 在所
  • 尝试安装 AWS CLI,卡在一个步骤上

    我正在尝试为 mac 命令行安装 aws 我想我不明白我需要做什么 我在终端上安装了带有 wget 的 aws 捆绑包 解压后它完成了所有操作 但是当我需要配置我的凭据时 什么也没有出现把aws配置 以下是说明 http docs aws
  • 我的 s3 存储桶如何使用 nginx 在不同文件夹中托管多个网站?

    我在 Amazon 上有一个 s3 Cloudfront 解决方案 我想在存储桶内的不同文件夹中托管不同的网站 并通过以下两种方式之一访问它们 子域 gt mywebsite1 mydomain com 或者 路径 gt www mydom
  • 如何在 RTMP 流中嵌入 pic_timing SEI 挂钟时间码?

    我需要将我的桌面流式传输到 AWS MediaLive 服务 并且根据要求 我必须在流中包含挂钟时间码 AWS 支持人员善意地通知我 对于 h 264 编码流 我需要提供时间码作为 pic timing SEI 消息 我在 Windows
  • 图像未在 Twitter 上显示 - 错误:由于请求超时,获取页面失败

    这是我网站的网址https www healthdrop in https www healthdrop in我得到了 错误 由于请求超时 获取页面失败 试穿时https cards dev twitter com validator ht

随机推荐

  • GLUT 退出重新定义错误

    在我的简单 OpenGL 程序中 我收到以下有关退出重新定义的错误 1 gt c program files microsoft visual studio 8 vc include stdlib h 406 error C2381 exi
  • Android Studio 3 库模块和功能模块的区别

    Android Studio 3 中至少有两种新的模块类型 首先是Instant app module第二个是feature module With Instant App module这是很明显的但是feature module从我的角度
  • arrayWillChange 中“无法调用未定义的‘销毁’方法”

    我有一个非常标准的数组 模板关系设置 但是当我将一个新项目推入数组时 我得到了上面提到的内容Cannot call method destroy of undefined错误在arrayWillChangeEmber源码的方法 for id
  • 将格式化日期转换回unix

    我将使用哪个函数将自定义格式的日期转换回 Unix 纪元时间 例如 Ymd gt U 我在看date U strtotime 20140525 但我不确定如何适应原始格式Ymd 该函数如何知道输入格式是 YYYYMMDD 因为它看起来有效
  • 如何将 Haskell 转换为 F#?

    我正在尝试通过翻译我很久以前编写的一些 Haskell 代码来学习 F 但我陷入了困境 percent Int gt Int gt Float percent a b fromInt a fromInt b 100 freqs String
  • 跨多个线程的 Java 日志记录

    我们有一个使用线程的系统 以便它可以同时并行处理不同的功能 我们希望找到一种方法将特定 事务 的所有日志条目绑定在一起 通常 人们可能会使用 threadName 将它们收集在一起 但显然这在多线程情况下会失败 如果没有通过每个方法调用传递
  • 使用 C++ 登录到 Windows 上的事件查看器 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在我的 C 应用程序上使用日志 但是 我想使用 Windows 10 事件查看器 而不是文本文件 我
  • 如何将“捐赠”按钮集成到印度的网站中?

    我们正在为印度的慈善信托基金开发一个网站 为此 我们需要在网站上添加一个 捐赠 按钮 供任何想要通过支付网关向慈善机构捐赠的人使用 然而 Paypal 和 Google Wallet Google Checkout 都限制在印度使用 捐赠
  • 杰克逊:将对象视为原始对象

    我有一门或多或少是围绕双精度型的包装类 当我通过 Jackson 序列化我的类时 我将收到类似以下内容的信息 value 123 0 我基本上希望发生的是 杰克逊只给我 123 0 0 如果我可以扩展 Number 我的问题就会得到解决 但
  • 用每列的组平均值填充 NaN [重复]

    这个问题在这里已经有答案了 我知道fillna 方法可用于在整个数据框中填充 NaN df fillna df mean fill with mean of column 如何将平均值计算限制为 NaN 所在的组 和列 Exemple im
  • ng-if="true" + data-ng-if="true" 计算结果为 false?

    事实是 如果你使用ng if truthyValue and data ng if truthyValue 里面一个html元素使用角JS 1 6 受影响的元素不会在DOM 即使您使用 这也是如此ng if and data ng if与b
  • ActionScript 的 File.upload 不适用于 iOS 设备的 Air SDK

    我尝试使用 ActionScript 的 File upload 在 Air SDK for iOS 环境中上传文件 但 File upload 无法正常工作 调用 File upload 后 不会执行有关文件上传的处理程序 也不会捕获任何
  • Node.js 12 的 TypeScript tsconfig 设置?

    最佳的 TypeScript 是什么tsconfig用于输出将在 Node js 12 上运行的代码的设置 从 Node js 开始12 0 0 100 支持ES2019 如果您知道您的目标是该版本或更高版本 则最佳配置将如下所示 modu
  • 为什么 TypeScript 中受保护的成员可以被公共成员覆盖?

    我是 Typescript 的新手 我尝试在本文中使用 TypeScript 进行一些尝试操场 http www typescriptlang org play 我注意到在 TypeScript 中 基类中的受保护成员可以被公共成员覆盖 c
  • 如何创建 pip 可安装项目?

    如何创建 pip 可安装项目 如何注册 pip 所有项目都应该具有哪些元数据配置 以便允许集成和轻松导入 或者 如果你感觉很奇特 阅读 lazy sudo easy install PasteScript paster create myn
  • 实体框架 4 Visual Studio 2008

    我一直在四处寻找并试图查看 Entity Framework 4 是否可以在 Visual Studio 2008 下运行 但找不到任何对它的引用 可以让 EF4 在 VS2008 上运行吗 On the ADO NET 实体框架团队博客
  • 动画同步、光标和突出显示

    所以我几乎有了我的code http jsfiddle net bplumb PBFWV 9 按照我想要的方式工作 但无法让我的动画正确同步 我正在尝试对光标进行动画突出显示文本 然后单击按钮 问题是光标要么太慢 要么太快 我正在尝试做这个
  • C 语言快速联合实现中的分段错误(核心转储)

    include
  • 如何创建包含不同元素和操作的列表?

    我想创建包含不同类型项目的列表 他们应该调用不同的意图或做其他事情 显示地图等 它应该像联系方式一样 项目和操作的数量是预定义的 如何优雅地达到这样的效果呢 我不需要确切的代码 但需要指导方针和信息 任何帮助将不胜感激 UPDATE 我所说
  • 如何从 CDK 上的 CodePipeline 获取源工件?

    我正在使用官方 AWS 文档来使用 CDK 创建管道 https docs aws amazon com cdk latest guide cdk pipeline html cdk pipeline define https docs a