

Amazon CodeCatalyst 不再向新客戶開放。現有客戶可以繼續正常使用該服務。如需詳細資訊，請參閱[如何從 CodeCatalyst 遷移](migration.md)。

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

# 將套件儲存庫連線至工作流程
<a name="workflows-packages"></a>

*套件*是一種套件，其中包含安裝軟體和解決任何相依性所需的軟體和中繼資料。CodeCatalyst 支援 npm 套件格式。

套件包含：
+ 名稱 （例如， `webpack` 是熱門 npm 套件的名稱）
+ 選用[的命名空間](packages-concepts.md#packages-concepts-package-namespaces) （例如，在 `@types`中`@types/node`)
+ 一組[版本](packages-concepts.md#packages-concepts-package-versions) （例如 、`1.0.0``1.0.1`、`1.0.2`)
+ 套件層級中繼資料 （例如 npm dist 標籤）

在 CodeCatalyst 中，您可以將套件發佈至 ，並在工作流程中從 CodeCatalyst 套件儲存庫取用套件。您可以使用 CodeCatalyst 套件儲存庫設定建置或測試動作，以自動設定動作的 npm 用戶端，從指定的儲存庫推送和提取套件。

如需套件的詳細資訊，請參閱 [在 CodeCatalyst 中發佈和共用軟體套件](packages.md)。

**注意**  
目前，建置和測試動作支援 CodeCatalyst 套件儲存庫。

**Topics**
+ [教學課程：從套件儲存庫提取](packages-tutorial.md)
+ [在工作流程中指定 CodeCatalyst 套件儲存庫](workflows-package-specify-action.md)
+ [在工作流程動作中使用授權字符](workflows-package-export-token.md)
+ [範例：工作流程中的套件儲存庫](workflows-working-packages-ex.md)

# 教學課程：從套件儲存庫提取
<a name="packages-tutorial"></a>

在本教學課程中，您將了解如何建立工作流程，以執行從 [CodeCatalyst 套件儲存庫](packages-concepts.md#packages-concepts-repository)提取相依性的應用程式。應用程式是簡單的 Node.js 應用程式，會將「Hello World」訊息列印至 CodeCatalyst 日誌。應用程式具有單一相依性：[lodash](https://www.npmjs.com/package/lodash) npm 套件。`lodash` 套件用於將`hello-world`字串轉換為 `Hello World`。您將使用此套件的 4.17.20 版。

設定應用程式和工作流程之後，您可以設定 CodeCatalyst 來封鎖其他版本的 `lodash` 從公有外部登錄檔 ([npmjs.com](https://www.npmjs.com/)：//) 匯入 CodeCatalyst 套件儲存庫。然後，您可以測試`lodash`已成功封鎖其他版本的 。

在本教學課程結束時，您應該充分了解工作流程如何與 CodeCatalyst 內部和外部的套件儲存庫互動，以擷取套件。您也應該了解 npm、套件儲存庫、工作流程和應用程式`package.json`檔案之間發生的behind-the-scenes互動。

**Topics**
+ [先決條件](#packages-tutorial-prereqs)
+ [步驟 1：建立來源儲存庫](#packages-tutorial-source-repo)
+ [步驟 2：建立 CodeCatalyst 和閘道套件儲存庫](#packages-tutorial-package-repo)
+ [步驟 3：建立「Hello World」應用程式](#packages-tutorial-create-app)
+ [步驟 4：建立執行「Hello World」的工作流程](#packages-tutorial-create-workflow)
+ [步驟 5：驗證工作流程](#packages-tutorial-verify)
+ [步驟 6：從 npmjs.com 封鎖匯入](#packages-tutorial-block)
+ [步驟 7：測試封鎖功能](#packages-tutorial-test-block)
+ [清除](#packages-tutorial-cleanup)

## 先決條件
<a name="packages-tutorial-prereqs"></a>

開始之前：
+ 您需要 CodeCatalyst **Space**。如需詳細資訊，請參閱[建立空間](spaces-create.md)。
+ 在 CodeCatalyst 空間中，您需要一個名為 的空專案：

  ```
  codecatalyst-package-project
  ```

  使用**從頭開始**選項來建立此專案。

  如需詳細資訊，請參閱[在 Amazon CodeCatalyst 中建立空專案](projects-create.md#projects-create-empty)。

## 步驟 1：建立來源儲存庫
<a name="packages-tutorial-source-repo"></a>

在此步驟中，您會在 CodeCatalyst 中建立來源儲存庫。此儲存庫會存放教學課程的來源檔案，例如 `index.js`和 `package.json` 檔案。

如需來源儲存庫的詳細資訊，請參閱 [建立來源儲存庫](source-repositories-create.md)。

**建立來源儲存庫**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 導覽至您的專案 `codecatalyst-package-project`。

1. 在導覽窗格中，選擇**程式碼**，然後選擇**來源儲存庫**。

1. 選擇**新增儲存庫**，然後選擇**建立儲存庫**。

1. 在**儲存庫名稱**中，輸入：

   ```
   hello-world-app
   ```

1. 選擇**建立**。

## 步驟 2：建立 CodeCatalyst 和閘道套件儲存庫
<a name="packages-tutorial-package-repo"></a>

在此步驟中，您會在 CodeCatalyst 專案中建立套件儲存庫，並將其連接到閘道儲存庫，也在您的 CodeCatalyst 專案中。您稍後`lodash`會從 npmjs.com 將教學課程的相依性 匯入兩個儲存庫。

閘道儲存庫是 'glue'，可將 CodeCatalyst 中的套件儲存庫連線至公有 npmjs.com。

如需套件儲存庫的詳細資訊，請參閱 [在 CodeCatalyst 中發佈和共用軟體套件](packages.md)。

**注意**  
本教學課程使用 *CodeCatalyst 套件儲存庫*和*閘道儲存庫*一詞，來參考您在下列程序中在 CodeCatalyst 中建立的兩個儲存庫。

**建立 CodeCatalyst 套件和閘道儲存庫**

1. 在導覽窗格中，選擇 **Packages (套件)**。

1. 選擇**建立套件儲存庫**。

1. 在**儲存庫名稱**中，輸入：

   ```
   codecatalyst-package-repository
   ```

1. 選擇 **\$1 選取上游儲存庫**。

1. 選擇**閘道儲存庫**。

1. 在 **npm-public-registry-gateway** 方塊中，選擇**建立**。

1. 選擇**選取**。

1. 選擇**建立**。

   CodeCatalyst 會建立名為 的套件儲存庫`codecatalyst-package-repository`，其會連線至閘道儲存庫。閘道儲存庫已連線至 npmjs.com 登錄檔。

## 步驟 3：建立「Hello World」應用程式
<a name="packages-tutorial-create-app"></a>

在此步驟中，您會建立 'Hello World' Node.js 應用程式，並將其相依性 (`lodash`) 匯入閘道和 CodeCatalyst 套件儲存庫。

若要建立應用程式，您需要安裝 Node.js 和相關聯`npm`用戶端的開發機器。

本教學假設您將使用 CodeCatalyst 開發環境做為您的開發機器。雖然您不必使用 CodeCatalyst 開發環境，但建議您這麼做，因為它提供乾淨的工作環境、已`npm`預先安裝 Node.js 和 ，而且在您完成教學課程時可輕鬆刪除。如需 CodeCatalyst 開發環境的詳細資訊，請參閱 [建立開發環境](devenvironment-create.md)。

使用以下指示啟動 CodeCatalyst 開發環境，並使用它來建立 'Hello World' 應用程式。

**啟動 CodeCatalyst 開發環境**

1. 在導覽窗格中，選擇**程式碼**，然後選擇**開發環境**。

1. 在頂端附近選擇**建立開發環境**，然後選擇 **AWS Cloud9 （在瀏覽器中）**。

1. 確定**儲存庫**設定為 `hello-world-app`，而**現有分支**設定為 `main`。選擇**建立**。

   您的開發環境會在新的瀏覽器索引標籤中啟動，而且您的儲存庫 (`hello-world-app`) 會複製到其中。

1. 讓兩個 CodeCatalyst 瀏覽器索引標籤保持開啟，然後前往下一個程序。

**建立 'Hello World' Node.js 應用程式**

1. 前往您的開發環境。

1. 在終端機提示中，將 變更為`hello-world-app`來源儲存庫根目錄：

   ```
   cd hello-world-app
   ```

1. 初始化 Node.js 專案：

   ```
   npm init -y
   ```

   初始化會在 的根目錄中建立 `package.json` 檔案`hello-world-app`。

1. 將開發環境中的 npm 用戶端連接到 CodeCatalyst 套件儲存庫：

   1. 切換到 CodeCatalyst 主控台。

   1. 在導覽窗格中，選擇 **Packages (套件)**。

   1. 選擇 `codecatalyst-package-repository`。

   1. 選擇**連線至儲存庫**。

   1. 選擇**建立權杖**。會為您建立個人存取字符 (PAT)。

   1. 選擇**複製**以複製命令。

   1. 切換到開發環境。

   1. 請確定您位於 `hello-world-app`目錄中。

   1. 貼上命令。它們看起來類似以下內容：

      ```
      npm set registry=https://packages.us-west-2.codecatalyst.aws/npm/ExampleCompany/codecatalyst-package-project/codecatalyst-package-repository/ --location project
      npm set //packages.us-west-2.codecatalyst.aws/npm/ExampleCompany/codecatalyst-package-project/hello-world-app/:_authToken=username:token-secret
      ```

1. 匯入 4.17.20 `lodash`版：

   ```
   npm install lodash@v4.17.20 --save --save-exact
   ```

   npm 在下列位置尋找 4.17.20 `lodash`版，順序如下：
   + 在開發環境中。它在這裡找不到它。
   + 在 CodeCatalyst 套件儲存庫中。它在這裡找不到它。
   + 在閘道儲存庫中。它在這裡找不到它。
   + 在 https：//npmjs.com。它會在這裡找到它。

   npm 匯入`lodash`至閘道儲存庫、CodeCatalyst 套件儲存庫和開發環境。
**注意**  
如果您在步驟 4 中尚未將 npm 用戶端連線至 CodeCatalyst 套件儲存庫，則 npm 會`lodash`直接從 npmjs.com 提取，而且不會將套件匯入任一儲存庫。

   npm 也會使用`lodash`相依性更新您的`package.json`檔案，並建立包含 `lodash`及其所有相依性的`node_modules`目錄。

1. `lodash` 已成功匯入開發環境的測試。輸入：

   ```
   npm list
   ```

   出現下列訊息，指出成功匯入：

   ```
   `-- lodash@4.17.20
   ```

1. （選用） 開啟`hello-world-app/package.json`並確認已新增***紅色粗體***的行：

   ```
   {
     "name": "hello-world-app",
     "version": "1.0.0",
     "description": "",
     "main": "index.js",
     "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1"
     },
     "keywords": [],
     "author": "",
     "license": "ISC",
     dependencies": {
       "lodash": "4.17.20"
     }
   }
   ```

1. 在 中`/hello-world-app`，建立名為 的檔案`index.js`，其中包含下列內容：
**提示**  
您可以使用開發環境中的側邊導覽來建立此檔案。

   ```
   // Importing lodash library
   const _ = require('lodash');
   
   // Input string
   const inputString = 'hello-world';
   
   // Transforming the string using lodash
   const transformedString = _.startCase(inputString.replace('-', ' '));
   
   // Outputting the transformed string to the console
   console.log(transformedString);
   ```

**測試「lodash」是否已匯入您的閘道和 CodeCatalyst 套件儲存庫**

1. 切換到 CodeCatalyst 主控台。

1. 在導覽窗格中，選擇 **Packages (套件)**。

1. 選擇 **npm-public-registry-gateway**。

1. 確定`lodash`已顯示 。**最新版本**欄指出 `4.17.20`。

1. 針對 重複此程序`codecatalyst-package-repository`。您可能需要重新整理瀏覽器視窗，以查看匯入的套件。

**在開發環境中測試「Hello World」**

1. 切換到開發環境。

1. 請確定您仍在 `hello-world-app`目錄中，然後執行應用程式：

   ```
   node index.js
   ```

   訊息`Hello World`隨即出現。Node.js 使用您在上一個步驟中下載到開發環境的`lodash`套件執行應用程式。

**忽略 'node\$1modules' 目錄並遞交 'Hello World'**

1. 忽略 `node_modules`目錄。輸入：

   ```
   echo "node_modules/" >> .gitignore
   ```

   最佳實務是避免遞交此目錄。此外，遞交此目錄將干擾本教學課程的後續步驟。

1. 新增、遞交和推送：

   ```
   git add .
   git commit -m "add the Hello World application"
   git push
   ```

   'Hello World' 應用程式和專案檔案會新增至您的來源儲存庫。

## 步驟 4：建立執行「Hello World」的工作流程
<a name="packages-tutorial-create-workflow"></a>

在此步驟中，您會建立使用`lodash`相依性執行 'Hello World' 應用程式的工作流程。工作流程包含稱為 的單一*動作*或任務`RunHelloWorldApp`。`RunHelloWorldApp` 動作包含下列值得注意的命令和區段：
+ **`Packages`**

  本節指出執行 時動作必須連線的 CodeCatalyst 套件儲存庫名稱`npm install`。
+ **`- Run: npm install`** 

  此命令會通知 npm 安裝 `package.json` 檔案中指定的相依性。`package.json` 檔案中指定的唯一相依性是 `lodash`。npm `lodash`會在下列位置尋找 ：
  + 在執行 動作的 Docker 影像中。它在這裡找不到它。
  + 在 CodeCatalyst 套件儲存庫中。它會在這裡找到它。

  在 npm 找到 之後`lodash`，它會將其匯入執行 動作的 Docker 映像。
+ **`- Run: npm list`**

  此命令會列印`lodash`下載至執行 動作之 Docker 映像的 版本。
+ **`- Run: node index.js`**

  此命令會使用 `package.json` 檔案中指定的相依性來執行 'Hello World' 應用程式。

請注意， `RunHelloWorldApp`動作是建置動作，如工作流程頂端附近的`aws/build@v1`識別符所示。如需建置動作的詳細資訊，請參閱 [使用工作流程建置](build-workflow-actions.md)。

使用以下指示建立工作流程，從 CodeCatalyst 套件儲存庫提取`lodash`相依性，然後執行您的「Hello World」應用程式。

**建立工作流程**

1. 切換到 CodeCatalyst 主控台。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

1. 選擇**建立工作流程**。

1. 針對**來源儲存庫**，選擇 `hello-world-app`。

1. 針對**分支**，選擇 `main`。

   工作流程定義檔案將在選擇的來源儲存庫和分支中建立。

1. 選擇**建立**。

1. 選擇靠近頂端的 **YAML**。

1. 刪除 YAML 範例程式碼。

1. 新增下列 YAML 程式碼：

   ```
   Name: codecatalyst-package-workflow
   SchemaVersion: "1.0"
   
   # Required - Define action configurations.
   Actions:
     RunHelloWorldApp:
       # Identifies the action. Do not modify this value.
       Identifier: aws/build@v1
       Compute:
         Type: Lambda
       Inputs:
         Sources:
           - WorkflowSource # This specifies your source repository. 
       Configuration:
         Steps:
           - Run: npm install
           - Run: npm list
           - Run: node index.js
         Container: # This specifies the Docker image that runs the action.
           Registry: CODECATALYST
           Image: CodeCatalystLinuxLambda_x86_64:2024_03
       Packages:
         NpmConfiguration:
           PackageRegistries:
             - PackagesRepository: codecatalyst-package-repository
   ```

   在上述程式碼中，以您在 中建立的 CodeCatalyst 套件儲存庫名稱取代 *codecatalyst-package-repository*[步驟 2：建立 CodeCatalyst 和閘道套件儲存庫](#packages-tutorial-package-repo)。

   如需此檔案中屬性的相關資訊，請參閱 [建置和測試動作 YAML](build-action-ref.md)。

1. （選用） 選擇**驗證**，以確保 YAML 程式碼在遞交之前有效。

1. 選擇 **Commit** (遞交)。

1. 在**遞交工作流程**對話方塊中，輸入下列內容：

   1. 對於**工作流程檔案名稱**，請保留預設值 `codecatalyst-package-workflow`。

   1. 針對**遞交訊息**，輸入：

      ```
      add initial workflow file
      ```

   1. 針對**儲存庫**，選擇 **hello-world-app**。

   1. 針對**分支名稱**，選擇**主要**。

   1. 選擇 **Commit** (遞交)。

   您現在已建立工作流程。

**執行工作流程**

1. 在您剛建立的工作流程旁邊 (`codecatalyst-package-workflow`)，選擇**動作**，然後選擇**執行**。

   工作流程執行開始。

1. 在右上角的綠色通知中，選擇執行的連結。連結看起來類似於 `View Run-1234`。

   工作流程圖表隨即出現，顯示誰開始執行和 **RunHelloWorldApp** 動作。

1. 選擇 **RunHelloWorldApp** 動作方塊，以監看動作的進度。

1. 當執行完成時，請前往 [步驟 5：驗證工作流程](#packages-tutorial-verify)。

## 步驟 5：驗證工作流程
<a name="packages-tutorial-verify"></a>

在此步驟中，您會驗證工作流程是否成功執行具有`lodash`相依性的 'Hello World' 應用程式。

**驗證「Hello World」應用程式是否使用其相依性執行**

1. 在工作流程圖表中，選擇 **RunHelloWorldApp** 方塊。

   日誌訊息清單隨即出現。

1. 展開`node index.js`日誌訊息。

   出現下列訊息：

   ```
   [Container] 2024/04/24 21:15:41.545650 Running command node index.js
   Hello World
   ```

   `Hello Word` （而非 `hello-world`) 的外觀表示已成功使用`lodash`相依性。

1. 展開`npm list`日誌。

   出現類似下列的訊息：

   ```
   └── lodash@4.17.20
   ```

   此訊息指出 4.17.20 `lodash`版已下載至執行工作流程動作的 Docker 映像。

## 步驟 6：從 npmjs.com 封鎖匯入
<a name="packages-tutorial-block"></a>

 現在，閘道和 CodeCatalyst 套件儲存庫中有 4.17.20 `lodash`版，您可以封鎖其他版本的匯入。封鎖可防止您不小心匯入稍後 （或更早版本） 的 版本`lodash`，其中可能包含惡意程式碼。如需詳細資訊，請參閱[編輯套件原始伺服器控制項](package-origin-controls.md)及[相依性替代攻擊](package-origin-controls.md#dependency-substitution-attacks)。

使用下列指示來封鎖 匯入`lodash`您的閘道儲存庫。當您在閘道封鎖套件時，它們也會在下游位置遭到封鎖。

**封鎖匯入至閘道儲存庫**

1. 在導覽窗格中，選擇 **Packages (套件)**。

1. 選擇 **npm-publish-registry-gateway**。

1. 選擇 `lodash`。

1. 在頂端附近，選擇**原始伺服器控制項**。

1. 在**上游**下，選擇**封鎖**。

1. 選擇**儲存**。

   您現在已封鎖從 npmjs.com 匯入至閘道儲存庫 （以及下游儲存庫和電腦）。

## 步驟 7：測試封鎖功能
<a name="packages-tutorial-test-block"></a>

在本節中，您要驗證您在 中設定的封鎖[步驟 6：從 npmjs.com 封鎖匯入](#packages-tutorial-block)是否正常運作。首先，您將 'Hello World' 設定為請求 4.17.2**1** 版，`lodash`而不是閘道儲存庫中可用的版本，即 4.17.2**0**。然後，檢查應用程式是否無法從 nmpjs.com 提取 4.17.21 版，表示封鎖成功。作為最終測試，您可以取消封鎖匯入至閘道儲存庫，並檢查應用程式是否可以成功提取 4.17.21 版`lodash`。

使用下列一組程序來測試封鎖功能。

**開始之前**

1. 切換到開發環境。

1. 提取您先前使用 CodeCatalyst 主控台建立`codecatalyst-package-workflow.yaml`的檔案：

   ```
   git pull
   ```

**設定「Hello World」以請求 4.17.21 版的「lodash」**

1. 打開 `/hello-world-app/package.json`。

1. 將`lodash`版本變更為 4.17.21，如***紅色粗體***所示：

   ```
   {
     "name": "hello-world-app",
     "version": "1.0.0",
     "description": "",
     "main": "index.js",
     "scripts": {
       "test": "echo \"Error: no test specified\" && exit 1"
     },
     "keywords": [],
     "author": "",
     "license": "ISC",
     "dependencies": {
       "lodash": "4.17.21"
     }
   }
   ```

   檔案中的版本 `package.json`(4.17.21) 與閘道中的版本和 CodeCatalyst 套件儲存庫 (4.17.20) 現在不相符。

1. 新增、遞交和推送：

   ```
   git add .
   git commit -m "update package.json to use lodash 4.17.21"
   git push
   ```

**測試「Hello World」無法提取 4.17.21 版的「lodash」**

1. 執行版本不相符的工作流程：

   1. 切換到 CodeCatalyst 主控台。

   1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

   1. 在 旁`codecatalyst-package-workflow`，選擇**動作**，然後選擇**執行。**

      npm `package.json` 會尋找相依性，並看到 'Hello World' `lodash`需要 4.17.21 版。npm 會依下列順序尋找下列位置的相依性：
      + 在執行 動作的 Docker 映像中。它在這裡找不到它。
      + 在 CodeCatalyst 套件儲存庫中。它在這裡找不到它。
      + 在閘道儲存庫中。它在這裡找不到它。
      + 在 https：//npmjs.com。它會在這裡找到它。

      在 npm 在 npmjs.com：// 中找到 4.17.21 版後，它會嘗試將其匯入閘道儲存庫，但因為您設定閘道來封鎖 的匯入`lodash`，所以不會發生匯入。

      由於不會發生匯入，工作流程會失敗。

1. 確認工作流程失敗：

   1. 在右上角的綠色通知中，選擇執行的連結。連結看起來類似於 `View Run-2345`。

   1. 在工作流程圖表中，選擇 **RunHelloWorldApp** 方塊。

   1. 展開`npm install`日誌訊息。

      出現下列訊息：

      ```
      [Container] 2024/04/25 17:20:34.995591 Running command npm install
      npm ERR! code ETARGET
      npm ERR! notarget No matching version found for lodash@4.17.21.
      npm ERR! notarget In most cases you or one of your dependencies are requesting
      npm ERR! notarget a package version that doesn't exist.
      
      npm ERR! A complete log of this run can be found in: /tmp/.npm/_logs/2024-05-08T22_03_26_493Z-debug-0.log
      ```

      錯誤表示找不到 4.17.21 版。這是預期的，因為您將其封鎖。

**從 npmjs.com 取消封鎖匯入**

1. 在導覽窗格中，選擇 **Packages (套件)**。

1. 選擇 **npm-publish-registry-gateway**。

1. 選擇 `lodash`。

1. 在頂端附近，選擇**原始伺服器控制項**。

1. 在**上游**下，選擇**允許**。

1. 選擇**儲存**。

   您現在已解除封鎖 的匯入`lodash`。

   您的工作流程現在可以匯入 4.17.21 版`lodash`。

**測試從 npmjs.com 匯入是否已解除封鎖**

1. 再次執行您的工作流程。這次工作流程應該會成功，因為 4.17.21 的匯入現在應該可以運作。若要再次執行工作流程：

   1. 選擇 **CI/CD**，然後選擇**工作流程**。

   1. 在 旁`codecatalyst-package-workflow`，選擇**動作**，然後選擇**執行**。

   1. 在右上角的綠色通知中，選擇執行的連結。連結看起來類似於 `View Run-3456`。

      工作流程圖表隨即出現，顯示誰開始執行和 **RunHelloWorldApp** 動作。

   1. 選擇 **RunHelloWorldApp** 動作方塊，以監看動作的進度。

   1. 展開`npm list`日誌訊息，並確認出現類似下列的訊息：

      ```
      └── lodash@4.17.21
      ```

      此訊息表示已下載 4.17.21 `lodash`版。

1. 確認 4.17.21 版已匯入您的 CodeCatalyst 和閘道儲存庫：

   1. 在導覽窗格中，選擇 **Packages (套件)**。

   1. 選擇 **npm-public-registry-gateway**。

   1. 尋找`lodash`並確認版本為 `4.17.21`。
**注意**  
雖然此頁面未列出 4.17.20 版，但您可以透過選擇頂端附近的**版本**`lodash`來尋找它。

   1. 重複這些步驟，檢查 4.17.21 版是否已匯入 `codecatalyst-package-repository`。

## 清除
<a name="packages-tutorial-cleanup"></a>

清除本教學課程中使用的檔案和服務，以避免收取這些檔案和服務的費用。

**清除套件教學課程**

1. 刪除 `codecatalyst-package-project`：

   1. 在 CodeCatalyst 主控台中，如果您還沒有專案，請將其命名為`codecatalyst-package-project`專案。

   1. 在導覽窗格中，選擇**專案設定**。

   1. 選擇**刪除專案**，輸入 **delete**，然後選擇**刪除專案**。

      CodeCatalyst 會刪除所有專案資源，包括來源、閘道和 CodeCatalyst 套件儲存庫。開發環境也會遭到刪除。

1. 刪除 PAT 字符：

   1. 選擇右側的使用者名稱，然後選擇**我的設定**。

   1. 在**個人存取字符**下，選擇您在本教學課程中建立的字符，然後選擇**刪除**。

在本教學課程中，您已了解如何建立工作流程，以執行從 CodeCatalyst 套件儲存庫提取其相依性的應用程式。您也了解如何封鎖和解除封鎖套件，使其無法進入您的閘道和 CodeCatalyst 套件儲存庫。

# 在工作流程中指定 CodeCatalyst 套件儲存庫
<a name="workflows-package-specify-action"></a>

在 CodeCatalyst 中，您可以將 CodeCatalyst 套件儲存庫新增至工作流程中的建置和測試動作。您的套件儲存庫必須使用套件格式設定，例如 npm。您也可以選擇包含所選套件儲存庫的範圍序列。

使用下列指示來指定要與工作流程動作搭配使用的套件組態。

------
#### [ Visual ]

**指定動作將使用的套件組態 （視覺化編輯器）**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 選擇您的專案。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

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

1. 選擇**編輯**。

1. 選擇**視覺化**。

1. 在工作流程圖表中，選擇您要使用套件儲存庫設定的**建置**或**測試**動作。

1. 選擇**套件**。

1. 從**新增組態**下拉式功能表中，選擇您要搭配工作流程動作使用的套件組態。

1. 選擇**新增套件儲存庫**。

1. 在**套件儲存庫**下拉式功能表中，指定您要動作使用的 CodeCatalyst *套件儲存庫*名稱。

   如需套件儲存庫的詳細資訊，請參閱 [套件儲存庫](packages-concepts.md#packages-concepts-repository)。

1. （選用） 在**範圍 - 選用**中，指定您要**在套件登錄檔中定義的範圍序列。

   定義範圍時，指定的套件儲存庫會設定為所有列出範圍的登錄檔。如果透過 npm 用戶端請求具有 範圍的套件，則會使用該儲存庫，而不是預設值。每個範圍名稱都必須加上 "@" 字首。

   如果省略 `Scopes` ，則指定的套件儲存庫會設定為動作使用之所有套件的預設登錄檔。

   如需範圍的詳細資訊，請參閱 [套件命名空間](packages-concepts.md#packages-concepts-package-namespaces)和[範圍套件](https://docs.npmjs.com/cli/v10/using-npm/scope)。

1. 選擇**新增**。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------
#### [ YAML ]

**指定 動作將使用的套件組態 (YAML 編輯器）**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 選擇您的專案。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

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

1. 選擇**編輯**。

1. 選擇 **YAML**。

1. 在**建置**或**測試**動作中，新增類似下列的程式碼：

   ```
   action-name:
    Configuration:
       Packages:
           NpmConfiguration:
             PackageRegistries:
               - PackagesRepository: package-repository
                 Scopes:
                   - "@scope"
   ```

   如需詳細資訊，請參閱 中 [建置和測試動作 YAML](build-action-ref.md) 動作的 `Packages` 屬性描述。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------

# 在工作流程動作中使用授權字符
<a name="workflows-package-export-token"></a>

您可以使用工作流程動作提供的權杖，手動設定套件管理員來驗證 CodeCatalyst 套件儲存庫。CodeCatalyst 將此字符做為環境變數提供，供您在 動作中參考。


| 環境變數 | Value | 
| --- | --- | 
|  代理程式\$1MACHINE\$1RESOURCE\$1NAME  |  授權字符的使用者身分。  | 
|  ACCELERATOR\$1PACKAGES\$1AUTHORIZATION\$1TOKEN  |  授權字符的值。  | 

**注意**  
請注意，只有在您已設定動作匯出授權字符時，才會填入這些環境變數。

使用以下指示，將授權字符與工作流程動作搭配使用。

------
#### [ Visual ]

**使用匯出的授權字符搭配 動作 （視覺化編輯器）**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 選擇您的專案。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

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

1. 選擇**編輯**。

1. 選擇**視覺化**。

1. 在工作流程圖表中，選擇您要使用套件儲存庫設定的**建置**或**測試**動作。

1. 選擇**套件**。

1. 開啟**匯出授權字符**。

------
#### [ YAML ]

**若要搭配 動作使用匯出的授權字符 (YAML 編輯器）**

1. 在 https：//[https://codecatalyst.aws/](https://codecatalyst.aws/) 開啟 CodeCatalyst 主控台。

1. 選擇您的專案。

1. 在導覽窗格中，選擇 **CI/CD**，然後選擇**工作流程**。

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

1. 選擇**編輯**。

1. 選擇 **YAML**。

1. 在**建置**或**測試**動作中，新增類似下列的程式碼：

   ```
   Actions:
     action-name:
       Packages:
         ExportAuthorizationToken: true
   ```

   您可以在 YAML 的 `Steps`區段中參考 `$CATALYST_MACHINE_RESOURCE_NAME`和 `$CATALYST_PACKAGES_AUTHORIZATION_TOKEN`環境變數。如需詳細資訊，請參閱 [範例：手動設定 `pip`以使用 CodeCatalyst 驗證](workflows-working-packages-ex.md#workflows-working-packages-pypi-token)。

1. （選用） 選擇**驗證**以在遞交之前驗證工作流程的 YAML 程式碼。

1. 選擇**遞交**，輸入遞交訊息，然後再次選擇**遞交**。

------

# 範例：工作流程中的套件儲存庫
<a name="workflows-working-packages-ex"></a>

下列範例示範如何參考工作流程定義檔案中的套件。

**Topics**
+ [範例：使用 定義套件 `NpmConfiguration`](#workflows-working-packages-ex-basic)
+ [範例：覆寫預設登錄檔](#workflows-working-packages-ex-overriding-registry)
+ [範例：覆寫套件登錄檔中的範圍](#workflows-working-packages-ex-overriding-scopes)
+ [範例：手動設定 `pip`以使用 CodeCatalyst 驗證](#workflows-working-packages-pypi-token)

## 範例：使用 定義套件 `NpmConfiguration`
<a name="workflows-working-packages-ex-basic"></a>

下列範例顯示如何在`NpmConfiguration`工作流程定義檔案中使用 定義套件。

```
Actions:
  Build:
  Identifier: aws/build-beta@v1
  Configuration:
    Packages:
        NpmConfiguration:
          PackageRegistries:
            - PackagesRepository: main-repo
            - PackagesRepository: scoped-repo
              Scopes:
                - "@scope1"
```

此範例會設定 npm 用戶端，如下所示：

```
default: main-repo
@scope1: scoped-repo
```

在此範例中，已定義兩個儲存庫。預設登錄檔會設定為沒有範圍`main-repo`的定義。範圍`@scope1`是在 中`PackageRegistries`為 設定`scoped-repo`。

## 範例：覆寫預設登錄檔
<a name="workflows-working-packages-ex-overriding-registry"></a>

下列範例說明如何覆寫預設登錄檔。

```
NpmConfiguration:
  PackageRegistries:
    - PackagesRepository: my-repo-1
    - PackagesRepository: my-repo-2
    - PackagesRepository: my-repo-3
```

此範例會設定 npm 用戶端，如下所示：

```
default: my-repo-3
```

如果您指定多個預設儲存庫，最後一個儲存庫將優先處理。在此範例中，列出的最後一個儲存庫是 `my-repo-3`，這表示 npm 會連線至 `my-repo-3`。這會覆寫儲存庫 `my-repo-1`和 `my-repo-2`。

## 範例：覆寫套件登錄檔中的範圍
<a name="workflows-working-packages-ex-overriding-scopes"></a>

下列範例說明如何覆寫套件登錄檔中的範圍。

```
NpmConfiguration:
  PackageRegistries:
    - PackagesRepository: my-default-repo
    - PackagesRepository: my-repo-1
      Scopes:
        - "@scope1"
        - "@scope2"
    - PackagesRepository: my-repo-2
      Scopes:
        - "@scope2"
```

此範例會設定 npm 用戶端，如下所示：

```
default: my-default-repo
@scope1: my-repo-1
@scope2: my-repo-2
```

如果您包含覆寫範圍，最後一個儲存庫將優先處理。在此範例中，上次在 中設定範圍`@scope2`的時間`PackageRegistries`是 `my-repo-2`。這會覆寫為 `@scope2`設定的範圍`my-repo-1`。

## 範例：手動設定 `pip`以使用 CodeCatalyst 驗證
<a name="workflows-working-packages-pypi-token"></a>

下列範例示範如何在建置動作中參考 CodeCatalyst 授權環境變數。

```
Actions:
  Build:
    Identifier: aws/build@v1.0.0
    Configuration:
      Steps:
        - Run: pip config set global.index-url https://$CATALYST_MACHINE_RESOURCE_NAME:$CATALYST_PACKAGES_AUTHORIZATION_TOKEN@codecatalyst.aws/pypi/my-space/my-project/my-repo/simple/
    Packages:
      ExportAuthorizationToken: true
```