在構建 GitHub 規範中使用操作語法 AWS CodeBuild - AWS CodeBuild

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

在構建 GitHub 規範中使用操作語法 AWS CodeBuild

您可以使用 CodeBuild管理的動作執行器在其中 CodeBuild執行 GitHub 動作。這可以通過添加steps到 buildspec 文件中的任何階段來完成。

CodeBuild buildspec 支持與命令分開階段運行的順序 GitHub 操作步驟列表。 CodeBuild 這些 GitHub 動作與現 CodeBuild有功能整合,包括相依性快取、批次建置 AWS Secrets Manager、存取等等。

我如何開始在我的構建規格中使用 GitHub 操作?

在構建規格中使用 GitHub 操作的高級步驟如下:

  1. 如果您尚未這樣做,請將您的項目連接到 GitHub.

    若要這麼做,您可以執行下列其中一項作業:

    注意

    只有 GitHub 在您尚未連接到另一個項目時才需要完成此操作。

  2. 在你的項目的 buildspec 中,你可以添加steps,每個都引用一個 GitHub 動作。這可以在 CodeBuild 控制台或源存儲庫中進行編輯。每個構建階段都支持命令列表或步驟列表,但兩者都不能在同一個階段使用。如需詳細資訊,請參閱 在構建 GitHub 規範中使用操作語法 AWS CodeBuild

我可以在我的構建規格中使用哪些 GitHub 操作?

您可以使用任何不與這些限制衝突的 GitHub Marketplace 中可用的動作。

除了在構建規格中使用 GitHub 操作以外,我可以 GitHub 使用源提供程序嗎?

是,但仍需要 GitHub 連線到才能驗證 GitHub和存取 GitHub 動作。如需詳細資訊,請參閱 GitHub 和 GitHub 企業服務器訪問令牌

為什麼我需要連接到作 GitHub 為源提供程序才能在我的 buildspec 中使用 GitHub 操作?

為了在構建規格中使用 GitHub 操作,必須在構建計算上下載源代碼。匿名下載將受到速率限制,因此通過連接到 GitHub,它可以幫助確保一致的訪問。

在我的構建規格中使用 GitHub 操作需要多少費用?

支持在構建規格中使用 GitHub 操作,無需額外費用。

哪些地區支持在我的構建規格中使用 GitHub 操作?

在所 CodeBuild 有地區都支持在構建規格中使用 GitHub 操作。如需有關可用 AWS 區域 位置 CodeBuild 的詳細資訊,請參閱按地區分類的AWS 服務

在構建規格中使用 GitHub 操作的最佳實踐

GitHub 行動是開源的,由社區構建和維護。我們遵循共同的責任模型,並將 GitHub Actions 源代碼視為您負責的客戶數據。 GitHub 您可以將動作授與密碼、儲存庫權杖、原始程式碼和帳戶連結的存取權。確保您對計劃 GitHub 執行動作的可信度和安全性充滿信心。

更具體的 GitHub 動作指引和安全性最佳做法:

在構建規格中使用 GitHub 操作的限制 CodeBuild

  • GitHub 在中不支援組建規格中內部依賴github前後關聯或參考 GitHub特定資源的動作,例如提取要求和問題。 CodeBuild例如,下列動作不適用於 CodeBuild:

    • GitHub 嘗試新增、變更或更新 GitHub資源的動作,例如更新提取請求或在中建立問題的動作 GitHub。

    注意

    https://github.com/actions 中列出的大多數官方 GitHub 操作都依賴於上github下文。而是使用 GitHub Marketplace 中可用的動作。

  • GitHub 構建規格中的操作是 D ocker 容器操作將起作用,但是您的構建項目必須啟用特權模式,並由默認的 Docker 用戶(root)運行。

  • GitHub 在配置為在 Windows 上運行的 CodeBuild 項目中不支持構建規格中的操作。

  • GitHub 不支援組建規格中的動作工 GitHub 作 (步驟群組) 和動作工作屬性。

  • GitHub 在配置為由公共 Git 存儲庫的 webhook 觸發的 CodeBuild 項目中,不支持構建規格中的操作。如需詳細資訊,請參閱git-credential-helper

  • 沒有公共互聯網訪問的 VPC 構建無法在您的構建規格中運行 GitHub 操作。

  • 每個構建階段都支持命令列表或步驟列表,但兩者都不能在同一個階段使用。例如,在以下示例中,步驟用於構建前階段列出 GitHub 操作,而在構建階段使用命 CodeBuild 令列出命令。

    version: 0.2 phases: pre-build: steps: - name: Lint Code Base uses: github/super-linter@v4 env: VALIDATE_ALL_CODEBASE: 'true' DEFAULT_BRANCH: main build: commands: - echo "Building..." - npm run build

GitHub 動作亞軍構建規格參考

本主題包含動作執行器屬性的 buildspec GitHub 參考。

steps

選用的序列。步驟用於執行中的命令和動作 CodeBuild。如需詳細資訊,請參閱 在構建 GitHub 規範中使用操作語法 AWS CodeBuild

注意

每個構建階段都支持列表commands或列表steps,但兩者都不能在同一個階段中使用。

每個建置步驟都包含下列屬性。

id

選用。可用來參照其他前後關聯中步驟的步驟識別元。

if

選用。除非符合條件,否則可用來防止步驟執行的條件陳述式。這個陳述式可以使用任何支援的內容,例如從中參考環境變數 CodeBuild,以及運算式

name

選用。步驟的名稱。如果未指定名稱,名稱將預設為指run令中指定的文字。

用途

針對步驟執行的動作。某些動作會要求您使用來設定輸入with。請參考動作的 README 檔案,以判斷需要哪些輸入。如需詳細資訊,請參閱 我可以在我的構建規格中使用哪些 GitHub 操作?

如果uses在構建階段中指定,則不能與run.

注意

建議您加入您正在使用的動作版本。這可以通過指定 Git 參考,SHA 或碼頭標籤來完成。如需詳細資訊,請參閱 steps.use 語法。

運行

執行命令列程式的命令。這些可以是單行命令或多行命令。依預設,這些命令會使用非登入殼層執行。若要選擇不同的外殼,請使用shell

如果run在構建階段中指定,則不能與uses.

選用。為此序列指定的外殼。有關支持的外殼參數,請參閱步驟 shell。如果未指定,則使用的外殼是 bash。如果 bash 不可用,則使用 sh。

選用。由動作定義的輸入參數對映。每個參數都是一個鍵/值對。

與. 參數

選用。定義 Docker 容器輸入的字串。

與. 入口點

選用。為碼頭檔案指定的碼頭工人入口點。

環境

選用。為要在環境中使用的步驟指定的變數。

continue-on-error

選用。Boolean 值,指出是否可以忽略此步驟序列失敗。

false

預設值。如果此步驟順序失敗,則構建將失敗。

true

如果此步驟序列失敗,組建仍然可以成功。

超時-分鐘

選用。在終止之前,步驟可以執行的最大分鐘數。默認情況下,沒有超時。如果步驟逾時超過構建超時,則到達構建超時時,步驟將停止。

以下是使用超林特動 GitHub 作的範例:

version: 0.2 phases: build: steps: - name: Lint Code Base uses: github/super-linter@v5 env: VALIDATE_ALL_CODEBASE: true USE_FIND_ALGORITHM: true FILTER_REGEX_INCLUDE: '/github/workspace/buildspec.yml'

GitHub 動作語法範例 AWS CodeBuild

這些樣本組可用於在中嘗試構建規格中的 GitHub 操作。 CodeBuild

超棉絨動作 GitHub 示例

此範例示範如何將超級林特 GitHub 動作加入至專案。 CodeBuild Super-Linter 動作會檢查程式碼、尋找程式碼有錯誤、格式化問題和可疑結構的區域,然後將結果輸出至主控台。 CodeBuild

您可以通過更新 buildspec 文件的階段部分將超級林特 GitHub 操作添加到您的 CodeBuild 項目中。

version: 0.2 phases: build: steps: - name: Lint Code Base uses: github/super-linter@v5 env: VALIDATE_ALL_CODEBASE: true

超林特記錄檔看起來會類似下列內容:

/github/workspace/hello-world/app.js:3:13: Extra semicolon. /github/workspace/hello-world/app.js:9:92: Trailing spaces not allowed. /github/workspace/hello-world/app.js:21:7: Unnecessarily quoted property 'body' found. /github/workspace/hello-world/app.js:31:1: Expected indentation of 2 spaces but found 4. /github/workspace/hello-world/app.js:32:2: Newline required at end of file but not found.

Batch 構建圖示例

下列範例會定義建立相依性鏈並使用執行指令的建置圖形steps。在此範例中,先build1執行,因為它沒有相依性。由於build2具有依賴關係build1,因此在 build1 完成後build2運行。如需相關資訊,請參閱構建圖

version: 0.2 batch: fast-fail: false build-graph: - identifier: build1 env: variables: BUILD_ID: build1 ignore-failure: false - identifier: build2 env: variables: BUILD_ID: build2 depend-on: - build1 phases: build: steps: - run: echo $BUILD_ID

Amazon 評論 CodeGuru 者示例

Amazon CodeGuru 審核者會在您的 Java 和 Python 程式碼中找到問題,並建議如何修復這些問題。下列範例使用 CodeGuru Reviewer 來提供完整的儲存庫分析程式碼檢閱。這些代碼審查掃描指定分支中的所有代碼。如需詳細資訊,請參閱 Amazon CodeGuru 審核者使用者指南中的使用 GitHub 動作建立程式碼閱。

version: 0.2 phases: build: steps: - name: Amazon CodeGuru Reviewer Scanner if: ${{ always() }} uses: aws-actions/codeguru-reviewer@v1.1 with: s3_bucket: codeguru-reviewer-user artifacts: files: - codeguru-results.sarif.json
注意

您的 Amazon S3 儲存貯體必須以codeguru-reviewer-前綴開頭。

記錄檔看起來會類似下列內容:

INFO CodeReview created with arn=arn:aws:codeguru-reviewer:region:account-id:association:id:code-review:RepositoryAnalysis-job for job=job INFO SARIF persisted to /github/workspace/codeguru-results.sarif.json INFO Amazon CodeGuru Reviewer job execution completed

Amazon CodeGuru 審核者任務完成後,會產生一份 sarif 報告作為 CodeBuild 成品。如需詳細資訊,請參Amazon CodeGuru 審核者使用者指南中的完整儲存庫分析

AWS Secrets Manager 樣本

AWS Secrets Manager 協助您在整個生命週期中管理、擷取和輪換資料庫認證、應用程式登入資料、OAuth 權杖、API 金鑰和其他機密。下列範例會使用 Secret 管理員定義密碼,並使用來執行命令steps。如需詳細資訊,請參閱什麼是 AWS Secrets Manager?《AWS Secrets Manager 使用者指南》中。

version: 0.2 env: secrets-manager: SECRET_VALUE: "arn:aws:secretsmanager:us-east-1:xxxx:secret:/secret-l3IJg9:my_super_secret_key" phases: build: steps: - run: echo $SECRET_VALUE

記錄檔看起來會類似下列內容:

echo $SECRET_VALUE env: SECRET_VALUE: *** ***

環境變數範例

下列範例會定義env序列下的環境變數。S3_BUCKET <bucket-name>變數會在建置規格中定義,並指派為其值。此變數會在 if 條件中參考,如同一般環境變數,方法是使用美元符號 ($) 來存取 GitHub Action env 內容。如需詳細資訊,請參閱env序列

version: 0.2 env: variables: S3_BUCKET: "<bucket-name>" phases: build: steps: - if: ${{ env.S3_BUCKET == '<bucket-name>' }} run: echo "S3 bucket is $S3_BUCKET"

記錄檔看起來會類似下列內容:

echo "S3 bucket is $S3_BUCKET" env: S3_BUCKET: my-s3-bucket S3 bucket is my-s3-bucket

匯出的環境變數範例

匯出的環境變數可與搭配使用, CodePipeline 將環境變數從目前的建置階段匯出至管線中的後續階段。下列範例會在名為 MY_VARIABLE 的env序列下定義匯出的環境變數,並寫入 GITHUB_EN V 環境檔案。

version: 0.2 env: exported-variables: - MY_VARIABLE phases: build: steps: - run: echo "MY_VARIABLE=my-value" >> $GITHUB_ENV

如需詳細資訊,請參閱 AWS CodeBuild API 參考 ExportedEnvironmentVariable中的。