簡體   English   中英

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
  • 倉庫: 賬戶/倉庫
  • 分公司:碩士
  • GitHub Webhooks

代碼部署

  • 計算類型:AWS Lambda
  • 服務角色:myRole
  • 部署設置:CodeDeployDefault.LambdaAllAtOnce

IAM角色:myRole

  • AWS服務
  • 選擇將使用此角色的服務:Lambda / CodeDeploy
  • 選擇您的用例:CodeDeploy
  • 策略:AWSCodeDeployRole

我知道根文件夾中必須有一個buildspec.yml文件。 我嘗試使用一些我可以找到的文件,但它們似乎不起作用。 我做錯了什么,或者我應該如何編輯buildspec文件以執行我想要的工作?

更新資料

感謝@Milan Cermak。 我了解我需要這樣做:

CodePipeline:

  • 階段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),而不嵌套在公用文件夾內的文件夾。

我已經檢查了這一點,並弄清楚了如何使用discard-paths: yes刪除嵌套文件夾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部分,這就是為什么要包含“ phases部分的原因(至少,由於使用ls命令,您將看到CodeBuild環境中存在哪些文件),但是對於您的情況而言,這並不有趣。 有趣的是artifacts部分。 在這里,您可以定義CodeBuild階段的輸出,即進一步傳遞到管道中下一步的內容。

根據您希望文件結構的方式(例如,您是否希望在工件中也包含public目錄,還是只想擁有文件本身而沒有父目錄),可能要使用其他配置在artifacts部分中這是可能的。 有關詳細信息,請參見buildspec參考

請記住,將CodeBuild步驟的輸出工件用作Deploy to S3步驟的輸入工件。

t_yamo指出,Buildspec用於CodeBuild。

您正在使用使用appspec.yml文件的CodeDeploy,對於我的配置,該文件看起來像這樣。

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-拉姆達

CodePipeline最近宣布部署到S3行動: https ://aws.amazon.com/about-aws/whats-new/2019/01/aws-codepipeline-now-supports-deploying-to-amazon-s3/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM