工作流程的疑難排解 - Amazon CodeCatalyst

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

工作流程的疑難排解

請參閱以下各節,以疑難排解與 Amazon 中工作流程相關的問題 CodeCatalyst。如需工作流程的相關詳細資訊,請參閱 使用工作流程建置、測試及部署

如何修正「工作流程處於非作用中狀態」訊息?

問題:在 CodeCatalyst 主控台的 CI/CD、工作流程下,您的工作流程會顯示下列訊息:

Workflow is inactive.

此訊息指出工作流程定義檔包含不適用於您目前所在分支的觸發程序。例如,您的工作流程定義文件可能包含引用您的main分支的PUSH觸發器,但您位於功能分支上。由於您在功能分支中進行的更改不適用於main,並且不會啟動工作流運行main,因此 CodeCatalyst 取消委任分支上的工作流並將其標記為Inactive

可能的修正:

如果要在功能分支上啟動工作流程,可以執行以下操作:

  • 在功能分支的工作流程定義檔案中,從Triggers區段中移除Branches性質,使其看起來像這樣:

    Triggers: - Type: PUSH

    此配置導致觸發器在推送到任何分支(包括功能分支)時激活。如果觸發器已啟動,則 CodeCatalyst 會使用工作流程定義檔案和來源檔案在您要推送的任何分支中啟動工作流程執行。

  • 在功能分支的工作流程定義檔案中,移除Triggers區段並手動執行工作流程。

  • 在您的特徵分支中,在工作流程定義檔案中,變更PUSH截面,使其參照您的特徵分支main,而不是其他分支 (例如)。

重要

如果您不打算將它們合併回main分支,請小心不要提交這些更改。

若要取得有關編輯工作流程定義檔的更多資訊,請參閱建立工作流程

關於觸發條件的詳細資訊,請參閱 使用觸發器啟動工作流程自動執行

如何解決「工作流定義有 n 錯誤「錯誤?

問題:您看到下列任何錯誤訊息:

錯誤 1:

在 [C I/CD, 工作流程] 頁面的工作流程名稱下,您會看到:

Workflow definition has n errors

錯誤二:

編輯工作流程時,請選擇「驗證」按鈕, CodeCatalyst 主控台頂端會顯示下列訊息:

The workflow definition has errors. Fix the errors and choose Validate to verify your changes.

錯誤三:

導覽至工作流程的詳細資訊頁面後,您會在「工作流程定義」欄位中看到下列錯誤:

n errors

可能的修正:

  • 選擇 CI/CD,選擇「工作流程」,然後選擇發生錯誤的工作流程名稱。在頂部附近的「工作流程定義」欄位中,選擇錯誤的連結。有關錯誤的詳細資訊會顯示在頁面底部。請依照錯誤中的疑難排解提示來修正問題。

  • 請確定工作流程定義檔案是一個YAML檔案。

  • 請確定工作流程定義檔案中的YAML性質嵌套於正確的層級。若要查看工作流程定義檔案中的性質應如何巢狀化工作流YAML定義,請參閱,或參閱連結至的動作文件將動作新增至工作流程

  • 確保正確逸出星號 (*) 和其他特殊字元。要將它們轉義,請添加單引號或雙引號。例如:

    Outputs: Artifacts: - Name: myartifact Files: - "**/*"

    如需有關工作流程定義檔案中特殊字元的詳細資訊,請參閱語法指南和慣例

  • 請確定工作流程定義檔案中的YAML性質使用正確的大寫。如需大小寫規則的詳細資訊,請參閱語法指南和慣例。若要判斷每個屬性的正確大小寫工作流YAML定義,請參閱,或參閱連結至的動作文件將動作新增至工作流程

  • 請確定SchemaVersion屬性存在,並在工作流程定義檔案中設定為正確的版本。如需詳細資訊,請參閱SchemaVersion

  • 請确保工作流程定義文件中的Triggers部分包含所有必需的屬性。若要判斷必要的屬性,請在視覺化編輯器中選擇觸發程式,然後尋找缺少資訊的欄位,或參閱中的觸發程式參照文件Triggers

  • 請确保工作流程定義文件中的DependsOn屬性配置正确,并且不引入循環相依性。如需詳細資訊,請參閱排序動作

  • 請確定工作流程定義檔案中的Actions區段至少包含一個動作。如需詳細資訊,請參閱動作

  • 請確定每個動作都包含所有必要的屬性。若要決定必要的屬性,請在視覺化編輯器中選擇動作,然後尋找缺少資訊的欄位,或參閱動作的文件,這些文件連結來源將動作新增至工作流程

  • 請確定所有輸入成品都有對應的輸出加工品。如需詳細資訊,請參閱定義輸出人工因素

  • 請確定已匯出在某個動作中定義的變數,以便在其他動作中使用這些變數。如需詳細資訊,請參閱匯出變數,以便其他動作可以使用它

如何修復「找不到憑據」和「ExpiredToken」錯誤?

問題:進行工作時教學課程:將應用程式部署到 Amazon EKS,您會在開發電腦的終端機視窗中看到下列其中一個或兩個錯誤訊息:

Unable to locate credentials. You can configure credentials by running "aws configure".

ExpiredToken: The security token included in the request is expired

可能的修正:

這些錯誤表示您用來存取 AWS 服務的認證已過期。在此情況下,請勿執行aws configure命令。相反,請使用以下說明刷新您的 AWS 訪問密鑰和會話令牌。

若要重新整理存 AWS 取金鑰和工作階段權杖
  1. 確保您擁有完整的 Amazon EKS 教程 (codecatalyst-eks-user) 使用者的 AWS 存取入口網站URL、使用者名稱和密碼。完成教學課程後,您應該已步驟 1:設定您的開發機器設定這些項目。

    注意

    如果您沒有此資訊,請前往IAM身分識別中心的codecatalyst-eks-user詳細資料頁面,選擇 [重設密碼]、[產生一次性密碼 [...] ,然後再次重設密碼以在螢幕上顯示資訊。

  2. 執行以下任意一項:

    • 將 AWS 訪問門戶粘貼URL到瀏覽器的地址欄中。

    • 如果已載入,請重新整理 AWS 存取入口網站頁面。

  3. 如果您尚未登入,請使用codecatalyst-eks-user的使用者名稱和密碼登入。

  4. 選擇 AWS 帳戶,然後選擇您 AWS 帳戶 為其指派codecatalyst-eks-user使用者和權限集的名稱。

  5. 在權限集名稱 (codecatalyst-eks-permission-set) 旁,選擇 [命令列] 或 [程式設計存取]。

  6. 複製頁面中間的命令。它們看起來類似於以下內容:

    export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE" export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" export AWS_SESSION_TOKEN="session-token"

    ... 在哪裡 session-token 是一個長的隨機字符串。

  7. 將命令粘貼到開發計算機上的終端提示符中,然後按 Enter 鍵。

    新的密鑰和會話令牌被加載。

    您現在已重新整理認證。 AWS CLIeksctl、和kubectl指令現在應該可以運作。

如何修復「無法連接到服務器」錯誤?

問題:在完成中所述的教學課程時教學課程:將應用程式部署到 Amazon EKS,您會在開發電腦的終端機視窗中看到類似下列內容的錯誤訊息:

Unable to connect to the server: dial tcp: lookup long-string.gr7.us-west-2.eks.amazonaws.com on 1.2.3.4:5: no such host

可能的修正:

此錯誤通常表示公用kubectl程式用於連接 Amazon EKS 叢集的登入資料已過期。若要解決此問題,請在終端機提示字元中輸入下列命令來重新整理認證:

aws eks update-kubeconfig --name codecatalyst-eks-cluster --region us-west-2

其中:

  • codecatalyst-eks-cluster 將替換為您的 Amazon EKS 群集的名稱。

  • us-west-2 會取代為部署叢集的 AWS 區域。

為什麼可視化編輯器中缺少 CodeDeploy 字段?

問題:您正在使用「部署到 Amazon」ECS 動作,但在工作流程的視覺化編輯器CodeDeploy AppSpec中看不到這些 CodeDeploy 欄位。因為您在「服務」欄位中指定的 Amazon ECS 服務未設定為執行藍/綠部署,可能會發生此問題。

可能的修正:

如何修正IAM功能錯誤?

問題:您正在使用「部署 AWS CloudFormation 堆疊」動作,而且您會##[error] requires capabilities: [capability-name]部署 AWS CloudFormation 堆疊動作的記錄檔中看到。

可能的修正:請完成下列程序,將功能新增至工作流程定義檔案。如需有關IAM權能的詳細資訊,請參閱《使用指南》中的〈認可 AWS CloudFormation 範本中的IAMIAM資〉。

Visual
若要使用視覺化編輯器新增IAM功能
  1. 請在以下位置開啟 CodeCatalyst 主控台。 https://codecatalyst.aws/

  2. 選擇您的專案。

  3. 在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。

  4. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選,或依工作流程名稱或狀態進行篩選。

  5. 選擇編輯

  6. 選擇 [視覺]。

  7. 在工作流程圖中,選擇您的部署 AWS CloudFormation 堆疊動作。

  8. 選擇 Configuration (組態) 索引標籤。

  9. 在底部,選擇 [進階]-[選用]。

  10. 在 [權] 下拉式清單中,選取錯誤訊息中提到的功能旁邊的核取方塊。如果該功能在清單中沒有可用,請使用編YAML輯器加入該功能。

  11. (選擇性) 選擇「驗證」,在確認之前驗證工作流程的程YAML式碼。

  12. 選擇「確認」,輸入確認訊息,然後再次選擇「確認」。

  13. 如果新的工作流程執行未自動啟動,請手動執行工作流程以查看變更是否可修正錯誤。如需有關手動執行工作流程的更多資訊,請參閱開始手動執行工作流程

YAML
若要使用YAML編輯器新增IAM權能
  1. 請在以下位置開啟 CodeCatalyst 主控台。 https://codecatalyst.aws/

  2. 選擇您的專案。

  3. 在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。

  4. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選,或依工作流程名稱或狀態進行篩選。

  5. 選擇編輯

  6. 選擇YAML

  7. 在「部署 AWS CloudFormation 堆疊」動作中,新增capabilities屬性,如下所示:

    DeployCloudFormationStack: Configuration: capabilities: capability-name

    Replace (取代) capability-name 以錯誤訊息中顯示的IAM功能名稱。請使用逗號且不能使用空格來列出多個權能。如需詳細資訊,請參閱中的capabilities性質說明「部署 AWS CloudFormation 堆疊」動作 YAML

  8. (選擇性) 選擇「驗證」,在確認之前驗證工作流程的程YAML式碼。

  9. 選擇「確認」,輸入確認訊息,然後再次選擇「確認」。

  10. 如果新的工作流程執行未自動啟動,請手動執行工作流程以查看變更是否可修正錯誤。如需有關手動執行工作流程的更多資訊,請參閱開始手動執行工作流程

我如何解決「npm 安裝」錯誤?

問題:您的AWS CDK 部署動作AWS CDK 啟動程序動作失敗,並顯示錯npm install誤。可能會發生此錯誤,是因為您將 AWS CDK 應用程序依賴項存儲在無法通過操作訪問的私有節點包管理器(npm)註冊表中。

可能的修復:使用以下說明使用其他註冊表和身份驗證信息更新 AWS CDK 應用程序的cdk.json文件。

開始之前
  1. 為您的身份驗證信息創建密碼。您將在cdk.json檔案中參考這些密碼,而不是提供純文字對等項。要創建秘密:

    1. 請在以下位置開啟 CodeCatalyst 主控台。 https://codecatalyst.aws/

    2. 選擇您的專案。

    3. 在功能窗格中,選擇 CI/CD,然後選擇 [密碼]。

    4. 使用下列屬性建立兩個密碼:

      第一個秘密 第二個秘密

      名稱: npmUsername

      npm-username其中,npm-username 是用於向您的私人 npm 註冊表進行身份驗證的用戶名。

      (選擇性) 說明The username used to authenticate to the private npm registry.

      名稱: npmAuthToken

      npm-auth-token其中,npm-auth-token 是用於向您的私人 npm 註冊表進行身份驗證的訪問令牌。有關 npm 訪問令牌的更多信息,請參閱關於 npm 文檔中的訪問令牌

      (選擇性) 說明The access token used to authenticate to the private npm registry.

      如需有關密碼的詳細資訊,請參閱使用密碼遮罩資料

  2. 將密碼作為環境變數新增至您的 AWS CDK 動作。動作會在執行時以實數值取代變數。若要新增密碼:

    1. 在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。

    2. 選擇工作流程的名稱。您可以依定義工作流程的來源儲存庫或分支名稱進行篩選,或依工作流程名稱或狀態進行篩選。

    3. 選擇編輯

    4. 選擇 [視覺]。

    5. 在工作流程圖中,選擇您的 AWS CDK 動作。

    6. 選擇輸入索引標籤。

    7. 添加兩個具有以下屬性的變量:

      第一個變數 第二個變數

      名稱: NPMUSER

      Value (值)${Secrets.npmUsername}

      名稱: NPMTOKEN

      Value (值)${Secrets.npmAuthToken}

      您現在有兩個包含秘密參照的變數。

    您的工作流程定義檔案程YAML式碼看起來應該類似下列內容:

    注意

    下列程式碼範例來自啟動程AWS CDK 序動作;AWS CDK 部署動作看起來類似。

    Name: CDK_Bootstrap_Action SchemaVersion: 1.0 Actions: CDKBootstrapAction: Identifier: aws/cdk-bootstrap@v2 Inputs: Variables: - Name: NPMUSER Value: ${Secrets.npmUsername} - Name: NPMTOKEN Value: ${Secrets.npmAuthToken} Sources: - WorkflowSource Environment: Name: Dev2 Connections: - Name: account-connection Role: codecatalystAdmin Configuration: Parameters: Region: "us-east-2"

    您現在可以在cdk.json檔案中使用NPMUSERNPMTOKEN變數了。轉到下一個程序。

若要更新您的檔案
  1. 切換到 AWS CDK 項目的根目錄,然後打開cdk.json文件。

  2. 尋找"app":屬性,並將其變更為包含顯示的程式碼 red italics:

    注意

    下列範例程式碼來自 TypeScript 專案。如果您使用的是 JavaScript 項目,代碼看起來會相似,但不相同。

    { "app": "npm set registry=https://your-registry/folder/CDK-package/ --userconfig .npmrc && npm set //your-registry/folder/CDK-package/:always-auth=true --userconfig .npmrc && npm set //your-registry/folder/CDK-package/:_authToken=\"${NPMUSER}\":\"${NPMTOKEN}\" && npm install && npx ts-node --prefer-ts-exts bin/hello-cdk.ts|js", "watch": { "include": [ "**" ], "exclude": [ "README.md", "cdk*.json", "**/*.d.ts", "**/*.js", "tsconfig.json", "package*.json", ...
  3. 在代碼中突出顯示 red italics,取代:

    • your-registry/folder/CDK-package/ 在您的私有註冊表中使用 AWS CDK 項目依賴項的路徑。

    • hello-cdk.ts|.js 使用您的入口點文件的名稱。這可能是.ts(TypeScript)或.js(JavaScript)文件,具體取決於您使用的語言。

      注意

      該動作將取代 NPMUSER 以及 NPMTOKEN 具有您在 Secret 中指定的 npm 用戶名和訪問令牌的變量。

  4. 儲存您的 cdk.json 檔案。

  5. 手動重新執行動作,以查看變更是否可修正錯誤。如需有關手動執行動作的詳細資訊,請參閱開始手動執行工作流程

為什麼多個工作流程具有相同的名稱?

工作流程儲存在每個儲存庫的每個分支 如果兩個不同的工作流程存在於不同分支中,則可以具有相同的名稱。在「工作流程」頁面中,您可以透過查看分支名稱來區分相同名稱的工作流程。如需詳細資訊,請參閱使用 Amazon 中的分支機構組織您的原始程式碼 CodeCatalyst

工作流分支

我可以將工作流程定義檔案儲存在其他資料夾中嗎?

否,您必須將所有工作流程定義檔案儲存在.codecatalyst/workflows資料夾或該資料夾的子資料夾中。如果您在多個邏輯專案中使用 mono 存放庫,請將所有工作流程定義檔案放在.codecatalyst/workflows資料夾或其中一個子資料夾中,然後在觸發器內使用 [檔案變更] 欄位 (視覺化YAML編輯器) 或FilesChanged屬性 (編輯器),在指定的專案路徑自動觸發工作流程。如需詳細資訊,請參閱 新增觸發器至工作流範例:具有推送、分支和檔案的觸發器

如何將動作依序新增至我的工作流程?

根據預設,當您將動作新增至工作流程時,該動作將沒有相依性,而且會與其他動作 parallel 執行。

如果您想要依序排列動作,您可以透過設定DependsOn欄位來設定另一個動作的相依性。您也可以配置動作以使用作為其他動作輸出的成品或變數。如需詳細資訊,請參閱排序動作

為什麼我的工作流程在執行階段成功驗證但失敗?

如果您使用Validate按鈕驗證您的工作流程,但您的工作流程仍然失敗,這可能是因為驗證器中的限制。

在提交期間,工作流程配置中對 CodeCatalyst 資源(如機密,環境或叢集)引用的任何錯誤都不會註冊。如果使用任何無效的參考,則只有在執行工作流程時才會識別錯誤。同樣地,如果您的動作配置中有任何錯誤,例如缺少必填欄位或動作屬性中的錯別字,則只有在執行工作流程時才會識別這些錯誤。如需詳細資訊,請參閱建立工作流程

自動探索不會針對我的動作探索任何報告

問題:我為執行測試的動作設定了自動探索,但未發現任何報告。 CodeCatalyst

可能的修復:這可能是由許多問題引起的。請嘗試下列一或多個解決方案:

  • 確保用於運行測試的工具以 CodeCatalyst 理解的格式之一產生輸出。例如,如果您想pytest要允許 CodeCatalyst 探索測試和程式碼覆蓋率報告,請包含下列引數:

    --junitxml=test_results.xml --cov-report xml:test_coverage.xml

    如需詳細資訊,請參閱質量報表類型

  • 請確定輸出的副檔名與所選格式一致。例如,當配置為pytestJUnitXML格式產生結果時,請檢查副檔名是否為.xml。如需詳細資訊,請參閱質量報表類型

  • 請確定已設定IncludePaths為包含整個檔案系統 (**/*),除非您故意排除某些資料夾。同樣地,請確定ExcludePaths不排除您預期報表所在的目錄。

  • 如果您手動將報告設定為使用特定輸出檔案,則會從自動探索中排除該報告。如需詳細資訊,請參閱質量報表YAML實例

  • 自動探索可能找不到報告,因為動作在產生任何輸出之前失敗。例如,在運行任何單元測試之前,構建可能已經失敗。

設定成功準則後,我的動作在自動探索的報表上失敗

問題:當我啟用自動探索並設定成功準則時,有些報告不符合成功準則,且動作會因此失敗。

可能的修正:若要解決此問題,請嘗試下列一或多個解決方案:

  • ExcludePathsIncludePaths或排除您不感興趣的報告。

  • 更新成功條件以允許所有報告通過。例如,如果發現兩份報告,其中一個報告的線路涵蓋範圍為 50%,另一個則為 70%,請將最小線路涵蓋範圍調整為 50%。如需詳細資訊,請參閱 成功條件

  • 將失敗報告轉換為手動設定的報告。這可讓您為該特定報告設定不同的成功準則。如需詳細資訊,請參閱設定報告的成功準則

「自動探索」會產生我不想要的報告

問題:當我啟用自動探索時,它會產生我不想要的報告。例如,為存儲在中的應用程序依賴項中包含的文件 CodeCatalyst 生成代碼覆蓋率報告node_modules

能的修復:您可以調整ExcludePaths配置以排除不需要的文件。例如,要排除node_modules,請添加node_modules/**/*。如需詳細資訊,請參閱包含/排除路徑

自動探索會針對單一測試架構產生許多小型報告

問題:當我使用某些測試和代碼覆蓋率報告框架時,我注意到自動發現會生成大量報告。例如,使用 Maven Surefire 外掛程式時,自動探索會為每個測試類別產生不同的報告。

可能的修復:您的框架可能能夠將輸出彙總到單個文件中。例如,如果您使用的是 Maven Surefire 插件,則可以使用npx junit-merge手動聚合文件。完整的表達式可能如下所示:

mvn test; cd test-package-path/surefire-reports && npx junit-merge -d ./ && rm *Test.xml

CI/CD 下列出的工作流程與來源儲存庫中的工作流程不符

問題:顯示在 CI/CD,工作流程頁面上的工作流程來源儲存庫中~/.codecatalyst/workflows/資料夾中的工作流程不符。您可能會看到下列不相符項目:

  • 工作流程會顯示在「工作流程」頁面上,但來源儲存庫中不存在對應的工作流程定義檔案。

  • 工作流程定義檔案存在於來源儲存庫中,但對應的工作流程不會顯示在「工作流程」頁面上。

  • 工作流程同時存在於來源儲存庫和「工作流程」頁面中,但兩者不同。

如果 [工作流程] 頁面沒有時間重新整理,或超過工作流程配額,就可能會發生這個問題。

可能的修正:

  • 等候。在「工作流程」頁面上看到「變更」之前,您通常必須等待兩到三秒鐘。

  • 如果您已超出工作流程配額,請執行下列其中一項操作:

    注意

    若要判斷是否超過工作流程配額中工作流程的配額 CodeCatalyst,請針對來源儲存庫或「工作流程」頁面中的工作流程檢閱並交叉檢查記錄的配額。沒有錯誤訊息表示已超出配額,因此您必須自行調查。

    • 如果您已超過每個空間配額的工作流程數目上限,請刪除某些工作流程,然後針對工作流程定義檔執行測試認可。測試提交的一個例子可能是向文件添加一個空格。

    • 如果您已超過工作流程定義檔案大小上限配額,請變更工作流程定義檔案以縮短其長度。

    • 如果您已超過單一來源事件配額中處理的工作流程檔案數目上限,請執行數次測試認可。修改少於每次提交中最大數目的工作流程。

我無法建立或更新工作流程

問題:我想要建立或更新工作流程,但是在嘗試提交變更時看到錯誤訊息。

可能的修正:視您在專案或空間中的角色而定,您可能沒有將程式碼推送至專案中原始碼儲存庫的權限。工作流程的YAML檔案儲存在儲存庫中。如需詳細資訊,請參閱工作流程定義檔。S pace 系統管理員角色、專案管理員角色和參與者角色都具有提交和推送程式碼至專案中存放庫的權限。

如果您具有 Contributor 角色,但無法在特定分支YAML中建立或認可工作流程的變更,則可能有針對該分支設定的分支規則,防止具有該角色的使用者將程式碼推送至該特定分支。嘗試在不同的分支中創建工作流程,或將您的更改提交到不同的分支。如需詳細資訊,請參閱使用分支規則管理分支允許的操作