組態建置設定 - AWS Amplify

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

組態建置設定

Amplify 主控台會透過檢查您的儲存庫中的 package.json 檔案,自動偵測前端架構和相關聯的建置設定。您有下列選項:

  • 在 Amplify 主控台中儲存建置設定 - Amplify 主控台會自動偵測建置設定,並將它儲存,使得您可以透過 Amplify 主控台存取這些設定。這些設定會套用到您的所有分支,除非在您的儲存庫中找到 YML 檔案。

  • 將建置設定儲存在您的儲存庫-下載 amplify.yml 檔案,並將它新增至您的儲存庫的根目錄。

您可以在 Amplify 主控台中編輯這些設定,方法是選擇應用程序設置 > 構建設置。這些建置設定會套用到您的應用程式中的所有分支,除了在儲存庫中有已儲存的 YML 檔案的分支以外。

注意

建置設定只有當應用程序設置為連續部署並連接到 git 存儲庫時,才會在 Amplify 控制台的應用程序設置菜單中看到。如需這種部署類型的指示,請參閱入門現有程式碼

YML 規格語法

建置規格 YML 包含 Amplify 主控台用來執行您的建置的建置命令與相關設定的集合。YML 的結構如下所示:

version: 1 env: variables: key: value backend: phases: preBuild: commands: - *enter command* build: commands: - *enter command* postBuild: commands: - *enter command* frontend: phases: preBuild: commands: - cd react-app - npm ci build: commands: - npm run build artifacts: files: - location - location discard-paths: yes baseDirectory: location cache: paths: - path - path test: phases: preTest: commands: - *enter command* test: commands: - *enter command* postTest: commands: - *enter command* artifacts: files: - location - location configFilePath: *location* baseDirectory: *location*
  • version - 代表 Amplify 主控台 YML 版本編號。

  • 核准-該應用程序駐留在存儲庫中的路徑。除非定義多個應用程式,否則忽略。

  • env - 新增環境變數到此區段。您也可以使用主控台新增環境變數。

  • backend - 執行 Amplify CLI 命令來隨著持續部署佈建後端、更新 Lambda 函數,或 GraphQL 結構描述。了解如何使用您的前端部署後端

  • frontend - 執行前端建置命令。

  • test-在測試階段運行命令。了解如何將測試添加到您的應用程序

  • 前端,後端和測試有三個階段代表在建置期間的每一個序列中執行的命令。
    • preBuild - preBuild 指令碼會在實際建置開始之前、在我們安裝相依性之後執行。

    • build - 您的建置命令。

    • postBuild - postBuild 指令碼會在建置完成,並且在我們將所有必要的成品複製到輸出目錄之後執行。

  • artifacts>base-directory - 存在您的建置成品的目錄。

  • artifacts>files - 指定成品中要部署的檔案;「**/*」表示要包含所有檔案。

  • 快取-buildspec 的緩存字段用於緩存構建時間降低,如節點模組文件夾中,並根據客戶應用程序內置的包管理器和框架自動建議。在第一個構建期間,這裡的任何路徑都會被緩存,並且在後續構建中,我們會重新膨脹緩存並盡可能使用這些緩存的依賴關係來加快構建時間。

單回購設定

如果您將多個項目保存在一個稱為 monorepo 的存儲庫中,則可以使用 Amplify 來部署這些應用程序,而不需要多個構建配置或分支配置。

具有多個 Amplify 應用程序的 Monorepos 聲明為應用程序列表:

version: 1 applications: - appRoot: /react-app env: variables: key: value backend: phases: preBuild: commands: - *enter command* build: commands: - *enter command* postBuild: commands: - *enter command* frontend: phases: preBuild: commands: - *enter command* - *enter command* build: commands: - *enter command* artifacts: files: - location - location discard-paths: yes baseDirectory: location cache: paths: - path - path test: phases: preTest: commands: - *enter command* test: commands: - *enter command* postTest: commands: - *enter command* artifacts: files: - location - location configFilePath: *location* baseDirectory: *location* - appRoot: /angular-app env: variables: key: value backend: phases: preBuild: commands: - *enter command* build: commands: - *enter command* postBuild: commands: - *enter command* frontend: phases: preBuild: commands: - *enter command* - *enter command* build: commands: - *enter command* artifacts: files: - location - location discard-paths: yes baseDirectory: location cache: paths: - path - path test: phases: preTest: commands: - *enter command* test: commands: - *enter command* postTest: commands: - *enter command* artifacts: files: - location - location configFilePath: *location* baseDirectory: *location*

您必須為您在構建配置中聲明的每個應用程序提供以下附加信息:

核准

應用程式在存放庫中啟動的根目錄。此機碼必須存在,但如果可以自動探索應用程式,則可能沒有任何值。

特定於分支的構建設置

您可以使用 bash shell 指令碼來配置分支特定的建置設定。例如,下列指令碼會使用系統環境變數$AWS_分支來執行一組命令,如果分支名稱是主要和一組不同的命令,如果分支名稱是dev

frontend: phases: build: commands: - if [ "${AWS_BRANCH}" = "main" ]; then echo "main branch"; fi - if [ "${AWS_BRANCH}" = "dev" ]; then echo "dev branch"; fi

對於 monorepos,使用者希望能夠 cd (切換目錄) 到某個資料夾來執行建置。在您執行 cd 命令之後,它會套用到您的建置的所有階段,所以您不需在單獨的階段重複該命令。

version: 1 env: variables: key: value frontend: phases: preBuild: commands: - cd react-app - npm ci build: commands: - npm run build

使用前端部署後端

amplifyPush 協助程式指令碼可幫助您進行後端部署。下面的建置設定會自動判斷要為目前分支部署的正確後端環境。

version: 1 env: variables: key: value backend: phases: build: commands: - amplifyPush --simple

設定輸出資料夾

以下建置設定會將輸出目錄設定為公有資料夾。

frontend: phases: commands: build: - yarn run build artifacts: baseDirectory: public

將軟件包安裝為構建的一部分

您可以在建置期間使用 npm 或 yarn 來安裝套件。

frontend: phases: build: commands: - npm install -g pkg-foo - pkg-foo deploy - yarn run build artifacts: baseDirectory: public

使用私人 npm 註冊表

您可以新增對您的建置設定中私有登錄的參考,或將它新增為環境變數。

build: phases: preBuild: commands: - npm config set <key> <value> - npm config set registry https://registry.npmjs.org - npm config set always-auth true - npm config set email hello@amplifyapp.com - yarn install

安裝 OS 套件

您可以安裝 OS 套件來取得缺少的依存項目。

build: phases: preBuild: commands: - yum install -y <package>

每個建置的索引鍵/值儲存體

envCache 會提供建置時的索引鍵/值儲存體。您只能在建置期間修改 envCache 中存放的值,並在後續建置中加以重複使用。我們可以使用 envCache 在部署的環境上存放資訊,並在後續建置中將該資訊提供給建置容器使用。與 envCache 中存放的值不同,建置期間對環境變數進行的變更並不會保存到未來的建置。

使用範例:

envCache --set <key> <value> envCache --get <key>

跳過構建提交

要跳過特定提交的自動構建,請將文本[跳過 CD]在遞交訊息的末尾。

停用自動建置

您可以設定 Amplify Console,進而在每次遞交程式碼時停用自動建置。若要設定,請選擇應用程式設定 > 一般,然後捲動至分支區段,其中列出了所有連接的分支。選取一個分支,並選擇 Action > Disable auto build (動作 > 停用自動建置)。如此一來,該分支後續遞交時不會再觸發新建置。

啟用或停用基於差異的前端建置和部署

您可以設定 Amplify Console,進而使用基於差異的前端建置。如果啟用,在每個構建開始時,Amplify 控制台將嘗試在appRoot,或/src/資料夾。如果沒有找到差異,則會略過前端組建、測試 (如果已設定) 和部署步驟,而且您的託管應用程式將不會更新。

若要設定,請選擇應用程式設定Environment variables (環境變數),然後選取管理變數。新增AMPLIFY_DIFF_DEPLOY環境變量的值為true以啟用此功能。移除AMPLIFY_DIFF_DEPLOY環境變數或將值設定為false以停用此行為。

您可以設定AMPLIFY_DIFF_DEPLOY_ROOT環境變量來覆蓋默認路徑與相對於您的回購根目錄的路徑,例如dist