本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程:從套裝程式儲存區域取
在本教學課程中,您將學習如何建立工作流程,以執行從CodeCatalyst 套裝程式儲存庫中提取相依性的應用程式。該應用程序是一個簡單的 Node.js 應用程序,將「你好世界」消息打印到日誌中 CodeCatalyst 。該應用程序具有單個依賴項:lodashlodash
包用於將hello-world
字符串轉換為Hello World
。您將會使用此套件的 4.17.20 版。
設定應用程式和工作流程之後,您可 CodeCatalyst 以設定為阻止lodash
從公用外部登錄檔 (npmjlodash
已成功封鎖。
在本教學課程結束時,您應該對工作流程如何與套裝程式儲存區域 (內部和外部) 互動有很好的了解 CodeCatalyst,以便擷取套件。您還應該了解 npm,包存儲庫,工作流程和應用程序package.json
文件之間發生的 behind-the-scenes 交互。
主題
必要條件
開始之前:
-
你需要一個 CodeCatalyst 空間。如需詳細資訊,請參閱 建立空間。
-
在您的 CodeCatalyst 空間中,您需要一個名為:
codecatalyst-package-project
使用「從頭開始」選項建立此專案。
如需詳細資訊,請參閱 在 Amazon 中建立空專案 CodeCatalyst。
步驟 1:建立來源儲存庫
在此步驟中,您可以在中建立來源儲存庫 CodeCatalyst。此儲存庫儲存自學課程的來源檔案,例如index.js
和package.json
檔案。
如需來源儲存庫的詳細資訊,請參閱建立來源儲存庫。
若要建立來源儲存庫
開啟主 CodeCatalyst 控台,網址為 https://codecatalyst.aws/
。 -
導航到您的項目,
codecatalyst-package-project
。 -
在瀏覽窗格中,選擇 [程式碼],然後選擇 [原始碼儲存庫]。
-
選擇新增儲存庫,然後選擇建立儲存庫。
-
在存放庫名稱中,輸入:
hello-world-app
-
選擇建立。
步驟 2:建立 CodeCatalyst 和閘道套件儲存區域
在此步驟中,您會在 CodeCatalyst 專案中建立套件存放庫,並將其連接至閘道儲存庫,也可以在 CodeCatalyst 專案中。您稍後將教學課程的相依性從 npmjs.com 匯入到這兩個儲存庫中。lodash
閘道儲存庫是將您的套件儲存庫連接 CodeCatalyst 到公用 npmjs.com 的「膠水」。
如需套裝程式儲存庫的詳細資訊,請參閱在 中發佈和共用軟體套件 CodeCatalyst。
注意
此教學課程使用「CodeCatalyst 套裝程式儲存區域」和「閘道儲存區域」一詞來參考您在下列程序 CodeCatalyst 中建立的兩個儲存區域。
若要建立 CodeCatalyst 套件和閘道儲存庫
-
在導覽窗格中,選擇 Packages (套件)。
-
選擇建立套裝程式儲存區
-
在存放庫名稱中,輸入:
codecatalyst-package-repository
-
選擇 + 選擇上游存儲庫。
-
選擇閘道儲存庫。
-
在npm-public-registry-gateway方塊中,選擇 [建立]。
-
選擇選取。
-
選擇建立。
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 發環境
-
在瀏覽窗格中,選擇 [程式碼],然後選擇 [開發環境]。
-
在頂部附近選擇創建開發環境,然後選擇 AWS Cloud9 (在瀏覽器中)。
-
確保存庫設置為,
hello-world-app
並且現有分支設置為main
。選擇建立。您的開發環境會在新的瀏覽器索引標籤中啟動,而您的存放庫 (
hello-world-app
) 則會複製到其中。 -
保持兩個 CodeCatalyst 瀏覽器選項卡打開,然後轉到下一個過程。
要創建「你好世界」Node.js 應用程序
-
移至您的開發環境。
-
在終端機提示字元下,切換至來
hello-world-app
源儲存庫根目錄:cd hello-world-app
-
初始化一個 Node.js 項目:
npm init -y
初始化會在的根目錄中建立
package.json
檔案hello-world-app
。 -
將開發環境中的 npm 客戶端 Connect 到您的 CodeCatalyst 軟件包存儲庫:
-
切換至主 CodeCatalyst 控台。
-
在導覽窗格中,選擇 Packages (套件)。
-
選擇
codecatalyst-package-repository
。 -
選擇「Connect 至儲存庫」。
-
選擇 [建立權杖]。會為您建立個人存取權杖 (PAT)。
-
選擇「複製」以複製指令。
-
切換到您的開發環境。
-
請確定您在目
hello-world-app
錄中。 -
粘貼命令。它們看起來類似於以下內容:
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
-
-
匯入
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
目錄。 -
-
已
lodash
成功匯入您的開發環境的測試。輸入:npm list
會出現下列訊息,指出匯入成功:
`-- lodash@4.17.20
-
(選擇性) 開啟
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"
} } -
在中
/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 軟件包存儲庫
-
切換至主 CodeCatalyst 控台。
-
在導覽窗格中,選擇 Packages (套件)。
-
選擇npm-public-registry-gateway。
-
請確定
lodash
已顯示。「最新版本」欄會指出4.17.20
。 -
針對重複此程序
codecatalyst-package-repository
。您可能需要重新整理瀏覽器視窗,才能看到匯入的套件。
在您的開發環境中測試「Hello World」
-
切換到您的開發環境。
-
請確定您仍在
hello-world-app
目錄中,然後執行應用程式:node index.js
會出現一
Hello World
則訊息。Node.js 使用您在上一個步驟中下載到開發環境的lodash
套件執行應用程式。
忽略「節點模塊」目錄並提交「世界你好」
-
忽略目
node_modules
錄。輸入:echo "node_modules/" >> .gitignore
避免提交此目錄是最佳做法。此外,提交此目錄也會干擾本教學課程稍後的步驟。
-
添加,提交和推送:
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」應用程式。
若要建立工作流程
-
切換至主 CodeCatalyst 控台。
-
在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。
-
選擇建立工作流程。
-
針對來源儲存庫,選擇
hello-world-app
。 -
對於「分支」,請選擇
main
。工作流程定義檔案將在選擇的來源儲存庫和分支中建立。
-
選擇建立。
-
選擇YAML靠近頂部。
-
刪除範YAML例程式碼。
-
添加以下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。
-
(選擇性) 選擇「驗證」,確定YAML程式碼在認可之前是有效的。
-
選擇 Commit (遞交)。
-
在「提交工作流程」對話方塊中,輸入以下內容:
-
對於「工作流程」檔案名稱,請保留預設值,
codecatalyst-package-workflow
。 -
對於提交訊息,請輸入:
add initial workflow file
-
針對「儲存庫」,選擇hello-world-app。
-
選擇「主要」做為「分支名稱」。
-
選擇 Commit (遞交)。
您現在已建立工作流程。
-
執行工作流程的步驟
-
在您剛建立的工作流程 (
codecatalyst-package-workflow
) 旁邊,選擇 [動作],然後選擇 [執行]。工作流程執行開始。
-
在頂部的綠色通知中,在右側,選擇運行的鏈接。該鏈接看起來類似於
View Run-1234
.工作流程圖表隨即出現,顯示誰開始執行和RunHelloWorldApp動作。
-
選擇RunHelloWorldApp動作方塊以查看動作進度。
-
當執行結束時,請移至步驟 5:驗證工作流程。
步驟 5:驗證工作流程
在此步驟中,您驗證工作流程是否成功執行了具有相依性的「Hello World」應用lodash
程式。
驗證「Hello World」應用程序是否使用其依賴項運行
-
在工作流程圖中,選擇RunHelloWorldApp方塊。
隨即顯示記錄訊息清單。
-
展開記
node index.js
錄訊息。會出現下列訊息:
[Container] 2024/04/24 21:15:41.545650 Running command node index.js Hello World
Hello Word
(而非hello-world
) 的外觀表示已成功使用lodash
相依性。 -
展開記
npm list
錄檔。會出現類似下列內容的訊息:
└── lodash@4.17.20
此訊息指出 4.17.20
lodash
版已下載至執行工作流程動作的 Docker 映像。
第六步:封鎖從網站匯入
現在您的閘道和 CodeCatalyst套件儲存庫中已有 4.17.20 lodash
版,您可以封鎖其他版本的匯入。封鎖可防止您意外匯入可能包含惡意程式碼的lodash
較新版本 (或更早版本)。如需詳細資訊,請參閱 編輯套件原始伺服器控制項 及 相依性替代攻擊。
請使用下列指示來封鎖匯lodash
入閘道儲存庫。當您在閘道封鎖封裝時,它們也會在下游位置封鎖。
封鎖對閘道儲存庫的匯入
-
在導覽窗格中,選擇 Packages (套件)。
-
選擇npm-publish-registry-gateway。
-
選擇
lodash
。 -
在頂部附近,選擇「原點控制項」。
-
在「上游」下選擇「封鎖」。
-
選擇儲存。
您現在已封鎖從 npmjs.com 匯入閘道儲存庫 (以及下游儲存庫和電腦)。
步驟 7:測試阻止功能
在本節中,您會確認您在中設定的封鎖第六步:封鎖從網站匯入是否正常運作。首先,您可以將「Hello World」配置為請求版本 4.17.2 1 lodash
而不是閘道存儲庫中可用的版本,即 4.17.2 0。然後,您檢查應用程式是否無法從 nmpjs.com 提取 4.17.21 版,表示成功封鎖。作為最終測試,您將匯入解除封鎖到閘道儲存庫,並檢查應用程式是否可以成功提取 4.17.21 版的. lodash
使用下列程序集來測試封鎖功能。
開始之前
-
切換到您的開發環境。
-
提取您之前使用 CodeCatalyst 控制台創建的
codecatalyst-package-workflow.yaml
文件:git pull
要配置「你好世界」以請求版本 4.17.21 的 'lodash'
-
打開
/hello-world-app/package.json
. -
將
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) 中的版本不相符。 -
添加,提交和推送:
git add . git commit -m "update package.json to use lodash 4.17.21" git push
為了測試 '你好世界' 不能拉出 'lodash' 的 4.17.21 版本
-
執行版本不符的工作流程:
-
切換至主 CodeCatalyst 控台。
-
在瀏覽窗格中,選擇 CI/CD,然後選擇 [工作流程]。
-
在旁邊
codecatalyst-package-workflow
,選擇 [動作],然後選擇 [執行]。npm 查找依賴關係,並看到的版本 4.17.21
lodash
是由「你好世界」所需的。npm 在以下位置查找依賴關係,按以下順序:package.json
-
在運行該操作的 Docker 映像中。它在這裡找不到它。
-
在 CodeCatalyst 套裝程式儲存區域中。它在這裡找不到它。
-
在閘道儲存庫中。它在這裡找不到它。
-
在網站上。它在這裡找到它。
npm 在 npmjs.com 中找到版本 4.17.21 之後,它會嘗試將其匯入閘道儲存庫,但由於您設定閘道以封鎖匯入
lodash
,因此不會進行匯入。因為匯入不會發生,所以工作流程會失敗。
-
-
-
確認工作流程失敗:
-
在頂部的綠色通知中,在右側,選擇運行的鏈接。該鏈接看起來類似於
View Run-2345
. -
在工作流程圖中,選擇RunHelloWorldApp方塊。
-
展開記
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 匯入的封鎖
-
在導覽窗格中,選擇 Packages (套件)。
-
選擇npm-publish-registry-gateway。
-
選擇
lodash
。 -
在頂部附近,選擇「原點控制項」。
-
在「上游」下選擇「允許」。
-
選擇儲存。
您現在已解除封鎖的
lodash
匯入。您的工作流程現在可以匯入的 4.17.21 版。
lodash
為了測試從 npmjs.com 進口是否已解鎖
-
再次執行您的工作流程。這次工作流程應該會成功,因為 4.17.21 的匯入現在應該可以運作。若要再次執行工作流程:
-
選擇 CI/CD,然後選擇「工作流程」。
-
在旁邊選擇「動作」
codecatalyst-package-workflow
,然後選擇「執行」。 -
在頂部的綠色通知中,在右側,選擇運行的鏈接。該鏈接看起來類似於
View Run-3456
.工作流程圖表隨即出現,顯示誰開始執行和RunHelloWorldApp動作。
-
選擇RunHelloWorldApp動作方塊以查看動作進度。
-
展開記
npm list
錄訊息,並確認出現類似下列內容的訊息:└── lodash@4.17.21
此訊息表示已下
lodash
載 4.17.21 版本。
-
-
確認 4.17.21 版已匯入您的 CodeCatalyst 和閘道儲存庫:
-
在導覽窗格中,選擇 Packages (套件)。
-
選擇npm-public-registry-gateway。
-
查找
lodash
並確保版本是4.17.21
.注意
儘管此頁面上未列出版本 4.17.20,但您可以通過選擇然後選擇
lodash
靠近頂部的版本來找到它。 -
重複這些步驟以檢查 4.17.21 版是否已匯入到。
codecatalyst-package-repository
-
清除
清理本教程中使用的文件和服務,以避免被收取費用。
若要清理套件教學課程
-
刪除
codecatalyst-package-project
:-
在 CodeCatalyst 控制台中,如果您尚未在該
codecatalyst-package-project
項目中,則嘮叨該項目。 -
在導覽窗格中,選擇 [專案設定]。
-
選擇刪除專案,輸入
delete
,然後選擇刪除專案。CodeCatalyst 刪除所有專案資源,包括來源、閘道和 CodeCatalyst套件儲存庫。開發環境也會被刪除。
-
-
刪除PAT令牌:
-
請在右側選擇您的使用者名稱,然後選擇 [我的設定]。
-
在「個人存取權杖」下,選擇您在本教學課程中建立的權杖,然後選擇「刪除」
-
在本教學課程中,您學習瞭如何建立工作流程,以執行從 CodeCatalyst 套裝程式儲存區域提取其相依性的應用程式。您也學會了如何封鎖和解除封裝進入閘道和 CodeCatalyst 套件儲存庫。