AWS CodePipeline 操作执行失败
AWS CodePipeline Action execution failed
我正在尝试将我的 GitHub 存储库与 S3 挂钩,因此每次提交时,AWS CodePipeline 都会将 ./<path>/public
文件夹部署到指定的 S3 bucket
.
到目前为止,在我的管道中,Source
工作(连接到 GitHub 并获取新提交)但 Deploy
失败,因为:Action execution failed
BundleType must be either YAML or JSON
.
我是这样设置的:
代码流水线
- 操作名称:来源
- 动作提供者:GitHub
- 存储库:account/repo
- 分支:硕士
- GitHub 网络钩子
代码部署
- 计算类型:AWS Lambda
- 服务角色:myRole
- 部署设置:CodeDeployDefault.LambdaAllAtOnce
IAM 角色:我的角色
- AWS 服务
- 选择将使用此角色的服务:Lambda / CodeDeploy
- Select 您的用例:CodeDeploy
- 策略:AWSCodeDeployRole
我知道根文件夹中必须有一个 buildspec.yml
文件。我试过使用一些我能找到的文件,但它们似乎不起作用。我做错了什么或者我应该如何编辑 buildspec
文件来做我想做的事?
Update
感谢@Milan Cermak。我明白我需要做的:
代码流水线:
- 第 1 阶段:来源:挂钩 GitHub 回购。这个正在工作。
- 第 2 阶段:构建:使用 CodeBuild 使用存储库根文件夹中的
buildspec.yml
文件仅获取所需的文件夹。
- 第 3 阶段:部署:使用
Action Provider: S3
Input Artifacts: OutputArtifacts (result of stage 2).
Bucket: the bucket that hosts the static website.
CodePipeline 有效。但是,输出仅包含文件 (.html),而不包含嵌套在 public 文件夹中的文件夹。
我检查了 this 并想出了如何使用 discard-paths: yes
删除嵌套文件夹的路径,但我无法获取 ./<path>/public
文件夹中的所有子文件夹.有什么建议吗?
CodeBuild 使用 buildspec,但 CodeDeploy 使用 appspec。
有appspec文件吗?
您不应使用 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 步骤的输入构件。
CodePipeline 最近宣布部署到 S3 操作:https://aws.amazon.com/about-aws/whats-new/2019/01/aws-codepipeline-now-supports-deploying-to-amazon-s3/
正如 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
您可以在此处从亚马逊文档中找到 AppSpec.yml 文件的示例 - https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-example.html#appspec-file-example-lambda
我正在尝试将我的 GitHub 存储库与 S3 挂钩,因此每次提交时,AWS CodePipeline 都会将 ./<path>/public
文件夹部署到指定的 S3 bucket
.
到目前为止,在我的管道中,Source
工作(连接到 GitHub 并获取新提交)但 Deploy
失败,因为:Action execution failed
BundleType must be either YAML or JSON
.
我是这样设置的:
代码流水线
- 操作名称:来源
- 动作提供者:GitHub
- 存储库:account/repo
- 分支:硕士
- GitHub 网络钩子
代码部署
- 计算类型:AWS Lambda
- 服务角色:myRole
- 部署设置:CodeDeployDefault.LambdaAllAtOnce
IAM 角色:我的角色
- AWS 服务
- 选择将使用此角色的服务:Lambda / CodeDeploy
- Select 您的用例:CodeDeploy
- 策略:AWSCodeDeployRole
我知道根文件夹中必须有一个 buildspec.yml
文件。我试过使用一些我能找到的文件,但它们似乎不起作用。我做错了什么或者我应该如何编辑 buildspec
文件来做我想做的事?
Update
感谢@Milan Cermak。我明白我需要做的:
代码流水线:
- 第 1 阶段:来源:挂钩 GitHub 回购。这个正在工作。
- 第 2 阶段:构建:使用 CodeBuild 使用存储库根文件夹中的
buildspec.yml
文件仅获取所需的文件夹。 - 第 3 阶段:部署:使用
Action Provider: S3
Input Artifacts: OutputArtifacts (result of stage 2).
Bucket: the bucket that hosts the static website.
CodePipeline 有效。但是,输出仅包含文件 (.html),而不包含嵌套在 public 文件夹中的文件夹。
我检查了 this 并想出了如何使用 discard-paths: yes
删除嵌套文件夹的路径,但我无法获取 ./<path>/public
文件夹中的所有子文件夹.有什么建议吗?
CodeBuild 使用 buildspec,但 CodeDeploy 使用 appspec。
有appspec文件吗?
您不应使用 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 步骤的输入构件。
CodePipeline 最近宣布部署到 S3 操作:https://aws.amazon.com/about-aws/whats-new/2019/01/aws-codepipeline-now-supports-deploying-to-amazon-s3/
正如 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
您可以在此处从亚马逊文档中找到 AppSpec.yml 文件的示例 - https://docs.aws.amazon.com/codedeploy/latest/userguide/reference-appspec-file-example.html#appspec-file-example-lambda