首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪种方式更好地将buildspec.yml放在CDK或源代码根目录中?

哪种方式更好地将buildspec.yml放在CDK或源代码根目录中?
EN

Stack Overflow用户
提问于 2022-05-04 05:01:27
回答 2查看 648关注 0票数 0

哪种方式更好地添加buildspec.yml,在CDK包还是源代码包

上下文

现在有两种添加buildspec代码的方法。

第一个选项是将其添加到源代码包中,正如前面提到的这里:“如果将buildspec作为源代码的一部分,默认情况下,buildspec文件必须命名为buildspec.yml,并放置在源目录的根目录中。”

但是,这个选项感觉不太好,因为buildspec实际上与服务实现无关,而更多的是与如何部署服务有关。而且它更具体到AWS。它只是觉得它不应该是源代码包的一部分。

第二个选项是将其添加到CDK中。但是我真的不喜欢内联buildspec代码,因为它看起来太臃肿了,只是一个例子:

代码语言:javascript
运行
复制
const buildProject = new codebuild.PipelineProject(this, 'project', {
      environment: {// I guess I need to select ubuntu and image 4.0},
      buildSpec: codebuild.BuildSpec.fromObject({
        version: '0.2',
        phases: {
          build: {
            commands:['
              version: 0.2
                phases:
                    install:
                        runtime-versions:
                            docker: 18
                    build:
                        commands:
                            - apt-get install jq -y
                            - ContainerName="tnkDjangoContainer"
                            - ImageURI=$(cat imageDetail.json | jq -r '.ImageURI')
                            - printf '[{"name":"CONTAINER_NAME","imageUri":"IMAGE_URI"}]' > imagedefinitions.json
                            - sed -i -e "s|CONTAINER_NAME|$ContainerName|g" imagedefinitions.json
                            - sed -i -e "s|IMAGE_URI|$ImageURI|g" imagedefinitions.json
                            - cat imagedefinitions.json

                artifacts:
                    files:
                        - imagedefinitions.json
              
              ',         
            ],
          },
        }
      })
    });

而构建规范代码可以变得更复杂和更长。

因此,我打算补充如下:

代码语言:javascript
运行
复制
    const buildspecFile = FS.readFileSync('./config/buildspec.yml', 'utf-8');  
    const buildspecFileYaml = YAML.parse(buildspecFile,{
          prettyErrors:true
        }
    );

    const codeBuildProject = new CodeBuild.PipelineProject(this, "Build", {
      projectName: "Build",
      environment: {
        buildImage: CodeBuild.LinuxBuildImage.AMAZON_LINUX_2_2,
        privileged: true,
      },
      environmentVariables: {
        CLUSTER_NAME: {
          value: `${props.fargateCluster.clusterName}`,
        },
        ECR_REPO_URI: {
          value: `${ecrRepo.repositoryUri}`,
        },
      },
      buildSpec: CodeBuild.BuildSpec.fromObjectToYaml(buildspecFileYaml),
    });

哪条路更好?我不认为AWS CodePipeline支持从CDK包中的本地文件读取?我现在只看到三个选择:

  • CodeBuild.BuildSpec.fromObject
  • CodeBuild.BuildSpec.fromObjectToYaml
  • CodeBuild.BuildSpec.fromSourceFilename
EN

Stack Overflow用户

发布于 2022-08-08 19:52:46

构建规范在源代码中的最大问题是它可能与您的管道不匹配。也就是说,如果您的构建规范只在您的管道被更新之后才能工作,那么您将无法推送,并且依赖于管道的自我更新。您必须手动更新管道。

对于源管道,这并不重要,因为最初构建规范是旧的(以前部署的那个),然后更新管道,然后使用新的buildspec。

因此,构建代码规范是最可靠的方法。非常不幸的是,CDK还没有一种方法来验证这种构建规范。您必须进行部署,并希望它能够工作,通常在失败之前还需要进行几次迭代和几个小时的迭代,因为CodePipeline太低了。

票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72108155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档