本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
在構建 GitHub 規範中使用操作語法 AWS CodeBuild
您可以使用 CodeBuild管理的動作執行器在其中 CodeBuild執行 GitHub 動作。這可以通過添加steps
到 buildspec 文件中的任何階段來完成。
CodeBuild buildspec 支持與命令分開階段運行的順序 GitHub 操作步驟列表。 CodeBuild 這些 GitHub 動作與現 CodeBuild有功能整合,包括相依性快取、批次建置 AWS Secrets Manager、存取等等。
主題
- 我如何開始在我的構建規格中使用 GitHub 操作?
- 我可以在我的構建規格中使用哪些 GitHub 操作?
- 除了在構建規格中使用 GitHub 操作以外,我可以 GitHub 使用源提供程序嗎?
- 為什麼我需要連接到作 GitHub 為源提供程序才能在我的 buildspec 中使用 GitHub 操作?
- 在我的構建規格中使用 GitHub 操作需要多少費用?
- 哪些地區支持在我的構建規格中使用 GitHub 操作?
- 在構建規格中使用 GitHub 操作的最佳實踐
- 在構建規格中使用 GitHub 操作的限制 CodeBuild
- GitHub 動作亞軍構建規格參考
- GitHub 動作語法範例 AWS CodeBuild
我如何開始在我的構建規格中使用 GitHub 操作?
在構建規格中使用 GitHub 操作的高級步驟如下:
-
如果您尚未這樣做,請將您的項目連接到 GitHub.
若要這麼做,您可以執行下列其中一項作業:
-
您可以在主控台中新增 GitHub 為來源提供者。如需詳細資訊,請參閱 Connect GitHub 訪問令牌(控制台) 。
-
您可以通過 CodeBuild API 導入 GitHub 憑據。如需詳細資訊,請參閱 Connect GitHub 用存取權杖 (CLI) 連線 。
注意
只有 GitHub 在您尚未連接到另一個項目時才需要完成此操作。
-
-
在你的項目的 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 動作指引和安全性最佳做法:
在構建規格中使用 GitHub 操作的限制 CodeBuild
-
GitHub 在中不支援組建規格中內部依賴
github
前後關聯或參考 GitHub特定資源的動作,例如提取要求和問題。 CodeBuild例如,下列動作不適用於 CodeBuild: -
GitHub 嘗試新增、變更或更新 GitHub資源的動作,例如更新提取請求或在中建立問題的動作 GitHub。
注意
https://github.com/actions
中列出的大多數官方 GitHub 操作都依賴於上 github
下文。而是使用 GitHub Marketplace中可用的動作。 -
-
GitHub 構建規格中的操作是 D ocker 容器操
作將起作用,但是您的構建項目必須啟用特權模式,並由默認的 Docker 用戶(root)運行。 -
動作必須以 root 使用者身分執行。如需詳細資訊,請參閱 Docker 檔案動作 GitHub 支援
中的使用者 主題。
-
-
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
-
如果此步驟序列失敗,組建仍然可以成功。
- 超時-分鐘
-
選用。在終止之前,步驟可以執行的最大分鐘數。默認情況下,沒有超時。如果步驟逾時超過構建超時,則到達構建超時時,步驟將停止。
以下是使用超林特動
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 示例
此範例示範如何將超級林特
您可以通過更新 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_ENV 環境檔案。
version: 0.2 env: exported-variables: - MY_VARIABLE phases: build: steps: - run: echo "MY_VARIABLE=my-value" >> $GITHUB_ENV
如需詳細資訊,請參閱 AWS CodeBuild API 參考 ExportedEnvironmentVariable中的。