AWS CodePipeline操作执行失败

时间:2019-01-31 19:46:42

标签: amazon-web-services github aws-code-deploy aws-codepipeline

我试图将我的GitHub存储库与S3挂钩,因此每次提交时,AWS CodePipeline都会将./<path>/public文件夹部署到指定的S3 bucket

到目前为止,在我的管道中,Source可以正常工作(已挂接到GitHub并接收新的提交),但是Deploy失败的原因是:Action execution failed BundleType must be either YAML or JSON

这是我设置它们的方式:

CodePipeline

  • 动作名称:来源
  • 动作提供者:GitHub
  • 存储库:帐户/存储库
  • 分支机构:大师
  • GitHub webhooks

CodeDeploy

  • 计算类型:AWS Lambda
  • 服务角色:myRole
  • 部署设置:CodeDeployDefault.LambdaAllAtOnce

IAM角色:myRole

  • AWS服务
  • 选择将使用此角色的服务:Lambda / CodeDeploy
  • 选择用例:CodeDeploy
  • 策略:AWSCodeDeployRole

我知道根文件夹中必须有一个buildspec.yml文件。我尝试使用一些我可以找到的文件,但它们似乎不起作用。我做错了什么,或者我应该如何编辑buildspec文件以执行我想要的工作?

  

更新

感谢@Milan Cermak。我知道我需要这样做:

CodePipeline:

  • 阶段1:来源:与GitHub存储库挂钩。这个正在工作。
  • 第2阶段:构建:使用代码构建通过回购根目录中的buildspec.yml文件仅获取所需的文件夹。
  • 第3阶段:部署:使用
Action Provider: S3
Input Artifacts: OutputArtifacts (result of stage 2).
Bucket: the bucket that hosts the static website.

CodePipeline有效。但是,输出仅包含文件(.html),而不包含嵌套在公用文件夹内的文件夹。

我已经检查了this并想出了如何使用discard-paths: yes删除嵌套文件夹的路径,但是无法获取./<path>/public文件夹中的所有子文件夹。有什么建议吗?

4 个答案:

答案 0 :(得分:2)

CodeBuild使用buildspec,但是CodeDeploy使用appspec。

是否有任何appspec文件?

答案 1 :(得分:2)

您不应该使用CodeDeploy,因为它是用于自动化应用程序部署的服务,而应该是CodeBuild,它执行命令并准备部署工件以便在管道中进一步使用。

这些命令在buildspec.yml文件中(通常在回购的根目录中,但是它是可配置的)。对于您的用例,它不会太复杂,因为您不需要编译任何东西或运行测试等。

尝试以此为起点:

version: 0.2

phases:
  build:
    commands:
      - ls

artifacts:
  files:
    - public/*

必填phases部分,这就是为什么要包含它的原因(至少要感谢ls命令,您会看到CodeBuild环境中存在哪些文件),但是对于你的情况。有趣的是artifacts部分。在这里您可以定义CodeBuild阶段的输出,即进一步传递到管道中下一步的内容。

取决于您希望文件的结构(例如,您是否希望在工件中也有public目录,还是只想拥有文件本身,而没有父目录),您可能想使用artifacts部分中可能的其他配置。有关详细信息,请参见buildspec reference

请记住将CodeBuild步骤的输出工件用作Deploy to S3步骤的输入工件。

答案 2 :(得分:1)

t_yamo指出,Buildspec用于CodeBuild。

您正在使用CodeDeploy,该代码使用一个appspec.yml文件,该文件在我的配置中看起来像这样。

version: 0.0
os: linux
files:
  - source: /
    destination: /path/to/destination
hooks:
  BeforeInstall:
    - location: /UnzipResourceBundle.sh
  ApplicationStart:
    - location: /RestartServer.sh
      timeout: 3600

UnzipResourceBundle.sh只是一个bash脚本,可用于执行许多操作。

#!/bin/bash
// Do something

您可以在此处https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-example.html#appspec-file-example-lambda

从Amazon Documentation中找到AppSpec.yml文件的示例。

答案 3 :(得分:0)