教學課程:從套裝程式儲存區域取 - Amazon CodeCatalyst

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

教學課程:從套裝程式儲存區域取

在本教學課程中,您將學習如何建立工作流程,以執行從CodeCatalyst 套裝程式儲存庫中提取相依性的應用程式。該應用程序是一個簡單的 Node.js 應用程序,將「你好世界」消息打印到日誌中 CodeCatalyst 。該應用程序具有單個依賴項:lodash npm 包。該lodash包用於將hello-world字符串轉換為Hello World。您將會使用此套件的 4.17.20 版。

設定應用程式和工作流程之後,您可 CodeCatalyst 以設定為阻止lodash從公用外部登錄檔 (npmj s.com) 匯入 CodeCatalyst 套裝程式儲存區域的其他版本。然後您測試其他版本的lodash已成功封鎖。

在本教學課程結束時,您應該對工作流程如何與套裝程式儲存區域 (內部和外部) 互動有很好的了解 CodeCatalyst,以便擷取套件。您還應該了解 npm,包存儲庫,工作流程和應用程序package.json文件之間發生的 behind-the-scenes 交互。

必要條件

開始之前:

  • 你需要一個 CodeCatalyst 空間。如需詳細資訊,請參閱 建立空間

  • 在您的 CodeCatalyst 空間中,您需要一個名為:

    codecatalyst-package-project

    使用「從頭開始」選項建立此專案。

    如需詳細資訊,請參閱 在 Amazon 中建立空專案 CodeCatalyst

步驟 1:建立來源儲存庫

在此步驟中,您可以在中建立來源儲存庫 CodeCatalyst。此儲存庫儲存自學課程的來源檔案,例如index.jspackage.json檔案。

如需來源儲存庫的詳細資訊,請參閱建立來源儲存庫

若要建立來源儲存庫
  1. 開啟主 CodeCatalyst 控台,網址為 https://codecatalyst.aws/

  2. 導航到您的項目,codecatalyst-package-project

  3. 在瀏覽窗格中,選擇 [程式碼],然後選擇 [原始碼儲存庫]。

  4. 選擇新增儲存庫,然後選擇建立儲存庫

  5. 存放庫名稱中,輸入:

    hello-world-app
  6. 選擇建立

步驟 2:建立 CodeCatalyst 和閘道套件儲存區域

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

閘道儲存庫是將您的套件儲存庫連接 CodeCatalyst 到公用 npmjs.com 的「膠水」。

如需套裝程式儲存庫的詳細資訊,請參閱在 中發佈和共用軟體套件 CodeCatalyst

注意

此教學課程使用「CodeCatalyst 套裝程式儲存區域」和「閘道儲存區域」一詞來參考您在下列程序 CodeCatalyst 中建立的兩個儲存區域。

若要建立 CodeCatalyst 套件和閘道儲存庫
  1. 在導覽窗格中,選擇 Packages (套件)

  2. 選擇建立套裝程式儲存區

  3. 存放庫名稱中,輸入:

    codecatalyst-package-repository
  4. 選擇 + 選擇上游存儲庫

  5. 選擇閘道儲存庫

  6. npm-public-registry-gateway方塊中,選擇 [建立]。

  7. 選擇選取

  8. 選擇建立

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

第 3 步:創建「你好世界」應用程序

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

若要建立應用程式,您需要安裝 Node.js 和相關聯用npm戶端的開發電腦。

本教程假設您將使用 CodeCatalyst 開發環境作為您的開發機器。雖然您不必使用 CodeCatalyst 開發環境,但建議您這樣做,因為它提供了一個乾淨的工作環境,並且已npm預先安裝 Node.js,並且在完成教學課程後很容易刪除。如需有關 CodeCatalyst 開發環境的詳細資訊,請參閱建立開發環境

使用下列指示來啟動 CodeCatalyst 開發環境,並使用它來建立「Hello World」應用程式。

若要啟動開 CodeCatalyst 發環境
  1. 在瀏覽窗格中,選擇 [程式碼],然後選擇 [開發環境]。

  2. 在頂部附近選擇創建開發環境,然後選擇 AWS Cloud9 (在瀏覽器中)

  3. 確保存庫設置為,hello-world-app並且現有分支設置為main。選擇建立

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

  4. 保持兩個 CodeCatalyst 瀏覽器選項卡打開,然後轉到下一個過程。

要創建「你好世界」Node.js 應用程序
  1. 移至您的開發環境。

  2. 在終端機提示字元下,切換至來hello-world-app源儲存庫根目錄:

    cd hello-world-app
  3. 初始化一個 Node.js 項目:

    npm init -y

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

  4. 將開發環境中的 npm 客戶端 Connect 到您的 CodeCatalyst 軟件包存儲庫:

    1. 切換至主 CodeCatalyst 控台。

    2. 在導覽窗格中,選擇 Packages (套件)

    3. 選擇 codecatalyst-package-repository

    4. 選擇「Connect 至儲存庫」。

    5. 選擇 [建立權杖]。會為您建立個人存取權杖 (PAT)。

    6. 選擇「複製」以複製指令。

    7. 切換到您的開發環境。

    8. 請確定您在目hello-world-app錄中。

    9. 粘貼命令。它們看起來類似於以下內容:

      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
  5. 匯入lodash版本:

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

    npm 會依照下列順序在下列位置尋找 4.17.20 lodash 版本:

    • 在開發環境中。它在這裡找不到它。

    • 在 CodeCatalyst 套裝程式儲存區域中。它在這裡找不到它。

    • 在閘道儲存庫中。它在這裡找不到它。

    • 在網站上。它在這裡找到它。

    npm 會匯lodash入閘道儲存庫、 CodeCatalyst 套件儲存庫和開發環境。

    注意

    如果您沒有在步驟 4 中將 npm 客戶端連接到您的 CodeCatalyst 軟件包存儲庫,那麼 npm 將lodash直接從 npmjs.com 提取,並且不會將該軟件包導入任一存儲庫。

    npm 還使用lodash依賴項更新您的package.json文件,並創建一個包含lodash及其所有依賴項的node_modules目錄。

  6. lodash成功匯入您的開發環境的測試。輸入:

    npm list

    會出現下列訊息,指出匯入成功:

    `-- lodash@4.17.20
  7. (選擇性) 開啟hello-world-app/package.json並確認中的明細行 red bold已新增:

    { "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" } }
  8. 在中/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 控台。

  2. 在導覽窗格中,選擇 Packages (套件)

  3. 選擇npm-public-registry-gateway

  4. 請確定lodash已顯示。「最新版本」欄會指出4.17.20

  5. 針對重複此程序codecatalyst-package-repository。您可能需要重新整理瀏覽器視窗,才能看到匯入的套件。

在您的開發環境中測試「Hello World」
  1. 切換到您的開發環境。

  2. 請確定您仍在hello-world-app目錄中,然後執行應用程式:

    node index.js

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

忽略「節點模塊」目錄並提交「世界你好」
  1. 忽略目node_modules錄。輸入:

    echo "node_modules/" >> .gitignore

    避免提交此目錄是最佳做法。此外,提交此目錄也會干擾本教學課程稍後的步驟。

  2. 添加,提交和推送:

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

    「Hello World」應用程序和項目文件被添加到您的源代碼庫中。

第 4 步:創建一個運行「你好世界」的工作流

在此步驟中,您會建立執行使用相依性的「Hello World」應用程式的工作流程。lodash工作流程包括稱為的單一動作或任務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

    此命令運行使用文件中指定的依賴關係「Hello World」應用程序。package.json

請注意,RunHelloWorldApp動作是建構動作,如工作流程頂端附近的aws/build@v1識別元所指示。如需建置動作的詳細資訊,請參閱使用工作流程建置

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

若要建立工作流程
  1. 切換至主 CodeCatalyst 控台。

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

  3. 選擇建立工作流程

  4. 針對來源儲存庫,選擇hello-world-app

  5. 對於「分支」,請選擇main

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

  6. 選擇建立

  7. 選擇YAML靠近頂部。

  8. 刪除範YAML例程式碼。

  9. 添加以下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-package-repository 使用您在中建立的 CodeCatalyst 套裝程式儲存區域的名稱步驟 2:建立 CodeCatalyst 和閘道套件儲存區域

    如需有關此檔案中性質的資訊,請參閱建置和測試動作 YAML

  10. (選擇性) 選擇「驗證」,確定YAML程式碼在認可之前是有效的。

  11. 選擇 Commit (遞交)。

  12. 在「提交工作流程」對話方塊中,輸入以下內容:

    1. 對於「工作流程」檔案名稱,請保留預設值,codecatalyst-package-workflow

    2. 對於提交訊息,請輸入:

      add initial workflow file
    3. 針對「儲存庫」,選擇hello-world-app

    4. 選擇「主要」做為「分支名稱」。

    5. 選擇 Commit (遞交)。

    您現在已建立工作流程。

執行工作流程的步驟
  1. 在您剛建立的工作流程 (codecatalyst-package-workflow) 旁邊,選擇 [動作],然後選擇 [執行]。

    工作流程執行開始。

  2. 在頂部的綠色通知中,在右側,選擇運行的鏈接。該鏈接看起來類似於View Run-1234.

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

  3. 選擇RunHelloWorldApp動作方塊以查看動作進度。

  4. 當執行結束時,請移至步驟 5:驗證工作流程

步驟 5:驗證工作流程

在此步驟中,您驗證工作流程是否成功執行了具有相依性的「Hello World」應用lodash程式。

驗證「Hello World」應用程序是否使用其依賴項運行
  1. 在工作流程圖中,選擇RunHelloWorldApp方塊。

    隨即顯示記錄訊息清單。

  2. 展開記node index.js錄訊息。

    會出現下列訊息:

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

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

  3. 展開記npm list錄檔。

    會出現類似下列內容的訊息:

    └── lodash@4.17.20

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

第六步:封鎖從網站匯入

現在您的閘道和 CodeCatalyst套件儲存庫中已有 4.17.20 lodash 版,您可以封鎖其他版本的匯入。封鎖可防止您意外匯入可能包含惡意程式碼的lodash較新版本 (或更早版本)。如需詳細資訊,請參閱 編輯套件原始伺服器控制項相依性替代攻擊

請使用下列指示來封鎖匯lodash入閘道儲存庫。當您在閘道封鎖封裝時,它們也會在下游位置封鎖。

封鎖對閘道儲存庫的匯入
  1. 在導覽窗格中,選擇 Packages (套件)

  2. 選擇npm-publish-registry-gateway

  3. 選擇 lodash

  4. 在頂部附近,選擇「原點控制項」。

  5. 在「上游」下選擇「封鎖」。

  6. 選擇儲存

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

步驟 7:測試阻止功能

在本節中,您會確認您在中設定的封鎖第六步:封鎖從網站匯入是否正常運作。首先,您可以將「Hello World」配置為請求版本 4.17.2 1 lodash 而不是閘道存儲庫中可用的版本,即 4.17.2 0。然後,您檢查應用程式是否無法從 nmpjs.com 提取 4.17.21 版,表示成功封鎖。作為最終測試,您將匯入解除封鎖到閘道儲存庫,並檢查應用程式是否可以成功提取 4.17.21 版的. lodash

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

開始之前
  1. 切換到您的開發環境。

  2. 提取您之前使用 CodeCatalyst 控制台創建的codecatalyst-package-workflow.yaml文件:

    git pull
要配置「你好世界」以請求版本 4.17.21 的 'lodash'
  1. 打開 /hello-world-app/package.json.

  2. lodash版本更改為 4.17.21,如圖所示 red bold:

    { "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" } }

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

  3. 添加,提交和推送:

    git add . git commit -m "update package.json to use lodash 4.17.21" git push
為了測試 '你好世界' 不能拉出 'lodash' 的 4.17.21 版本
  1. 執行版本不符的工作流程:

    1. 切換至主 CodeCatalyst 控台。

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

    3. 在旁邊codecatalyst-package-workflow,選擇 [動作],然後選擇 [執行]。

      npm 查找依賴關係,並看到的版本 4.17.21 lodash 是由「你好世界」所需的。npm 在以下位置查找依賴關係,按以下順序:package.json

      • 在運行該操作的 Docker 映像中。它在這裡找不到它。

      • 在 CodeCatalyst 套裝程式儲存區域中。它在這裡找不到它。

      • 在閘道儲存庫中。它在這裡找不到它。

      • 在網站上。它在這裡找到它。

      npm 在 npmjs.com 中找到版本 4.17.21 之後,它會嘗試將其匯入閘道儲存庫,但由於您設定閘道以封鎖匯入lodash,因此不會進行匯入。

      因為匯入不會發生,所以工作流程會失敗。

  2. 確認工作流程失敗:

    1. 在頂部的綠色通知中,在右側,選擇運行的鏈接。該鏈接看起來類似於View Run-2345.

    2. 在工作流程圖中,選擇RunHelloWorldApp方塊。

    3. 展開記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 (套件)

  2. 選擇npm-publish-registry-gateway

  3. 選擇 lodash

  4. 在頂部附近,選擇「原點控制項」。

  5. 在「上游」下選擇「允許」。

  6. 選擇儲存

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

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

為了測試從 npmjs.com 進口是否已解鎖
  1. 再次執行您的工作流程。這次工作流程應該會成功,因為 4.17.21 的匯入現在應該可以運作。若要再次執行工作流程:

    1. 選擇 CI/CD,然後選擇「工作流程」。

    2. 在旁邊選擇「動作」codecatalyst-package-workflow,然後選擇「執行」。

    3. 在頂部的綠色通知中,在右側,選擇運行的鏈接。該鏈接看起來類似於View Run-3456.

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

    4. 選擇RunHelloWorldApp動作方塊以查看動作進度。

    5. 展開記npm list錄訊息,並確認出現類似下列內容的訊息:

      └── lodash@4.17.21

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

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

    1. 在導覽窗格中,選擇 Packages (套件)

    2. 選擇npm-public-registry-gateway

    3. 查找lodash並確保版本是4.17.21.

      注意

      儘管此頁面上未列出版 4.17.20,但您可以通過選擇然後選擇lodash靠近頂部的版本來找到它。

    4. 重複這些步驟以檢查 4.17.21 版是否已匯入到。codecatalyst-package-repository

清除

清理本教程中使用的文件和服務,以避免被收取費用。

若要清理套件教學課程
  1. 刪除codecatalyst-package-project

    1. 在 CodeCatalyst 控制台中,如果您尚未在該codecatalyst-package-project項目中,則嘮叨該項目。

    2. 在導覽窗格中,選擇 [專案設定]。

    3. 選擇刪除專案,輸入delete,然後選擇刪除專案

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

  2. 刪除PAT令牌:

    1. 請在右側選擇您的使用者名稱,然後選擇 [我的設定]

    2. 在「個人存取權杖」下,選擇您在本教學課程中建立的權杖,然後選擇「刪除

在本教學課程中,您學習瞭如何建立工作流程,以執行從 CodeCatalyst 套裝程式儲存區域提取其相依性的應用程式。您也學會了如何封鎖和解除封裝進入閘道和 CodeCatalyst 套件儲存庫。