本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:从软件包存储库中提取
在本教程中,您将学习如何创建工作流程,该工作流程运行依赖项从CodeCatalyst 包存储库中提取的应用程序。该应用程序是一个简单的 Node.js 应用程序,可在日志中输出 “Hello World” 消息。 CodeCatalyst 该应用程序只有一个依赖关系:l odashlodash
包用于将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
网关存储库是将你的软件包存储库连接到公共 npmjs.co CodeCatalyst m 的 “粘合剂”。
有关软件包存储库的更多信息,请参阅在中发布和共享软件包 CodeCatalyst。
注意
本教程使用CodeCatalyst 软件包存储库和网关存储库这两个术语来指您在以下过程中创建 CodeCatalyst 的两个存储库。
创建 CodeCatalyst 软件包和网关存储库
-
在导航窗格中,选择 Packages (程序包)。
-
选择 “创建软件包存储库”。
-
在存储库名称中,输入:
codecatalyst-package-repository
-
选择 + 选择上游存储库。
-
选择网关存储库。
-
在npm-public-registry-gateway框中,选择创建。
-
选定选择。
-
选择创建。
CodeCatalyst 创建名为的软件包存储库
codecatalyst-package-repository
,该存储库已连接到网关存储库。网关存储库已连接到 npmjs.com 注册表。
第 3 步:创建 “Hello World” 应用程序
在此步骤中,您将创建一个 “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 浏览器选项卡处于打开状态,然后转到下一个步骤。
创建 “Hello World” Node.js 应用程序
-
转到您的开发环境。
-
在终端提示符下,切换到
hello-world-app
源存储库根目录:cd hello-world-app
-
初始化一个 Node.js 项目:
npm init -y
初始化将在的根目录中创建一个
package.json
文件hello-world-app
。 -
将开发环境中的 npm 客户端连接到你的 CodeCatalyst 包存储库:
-
切换到 CodeCatalyst 控制台。
-
在导航窗格中,选择 Packages (程序包)。
-
选择
codecatalyst-package-repository
。 -
选择 “连接到存储库”。
-
选择创建令牌。已为您创建个人访问令牌 (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
版本 4.17.20:npm install lodash@v4.17.20 --save --save-exact
npm 按以下顺序在以下位置查找 4.17.20
lodash
版本:-
在开发环境中。它在这里找不到。
-
在 CodeCatalyst 软件包存储库中。它在这里找不到。
-
在网关存储库中。它在这里找不到。
-
在 npmjs.com 中。它在这里找到了。
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” 目录并提交 “Hello World”
-
忽略该
node_modules
目录。输入:echo "node_modules/" >> .gitignore
最佳做法是避免提交此目录。此外,提交此目录会干扰本教程的后续步骤。
-
添加、提交和推送:
git add . git commit -m "add the Hello World application" git push
“Hello World” 应用程序和项目文件已添加到您的源存储库中。
第 4 步:创建运行 “Hello World” 的工作流程
在此步骤中,您将创建一个使用依赖项运行 “Hello World” 应用程序的工作流程。lodash
该工作流程包括一个名为的操作或任务RunHelloWorldApp
。该RunHelloWorldApp
操作包括以下值得注意的命令和部分:
-
Packages
此部分指出了操作在运行时必须连接到的 CodeCatalyst 包存储库的名称
npm install
。 -
- Run: npm install
此命令告诉 npm 安装
package.json
文件中指定的依赖项。package.json
文件中指定的唯一依赖项是lodash
. npmlodash
在以下位置查找:-
在 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 控制台。
-
在导航窗格中,选择 C I/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 镜像。
第 6 步:阻止从 npmjs.com 导入
现在 4.17.20 lodash
版本已存在于您的网关和 CodeCatalyst软件包存储库中,您可以阻止其他版本的导入。屏蔽可防止您意外导入可能包含恶意代码的更lodash
高(或更早)版本的。有关更多信息,请参阅 编辑程序包来源控制 和 依赖项替换攻击。
按照以下说明阻止向您的网关存储库导lodash
入。当您在网关上屏蔽包裹时,它们也会在下游位置被屏蔽。
阻止向您的网关存储库导入
-
在导航窗格中,选择 Packages (程序包)。
-
选择npm-publish-registry-gateway。
-
选择
lodash
。 -
在顶部附近,选择 O rigin 控件。
-
在 “上游” 下,选择 “阻止”。
-
选择保存。
现在,您已阻止从 npmjs.com 导入网关存储库(以及下游存储库和计算机)。
步骤 7:测试屏蔽功能
在本节中,您将验证您在中设置的屏蔽第 6 步:阻止从 npmjs.com 导入是否有效。首先,将 “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
将 “Hello World” 配置为请求 “lodash” 版本 4.17.21
-
打开
/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
" } }现在,
package.json
文件中的版本 (4.17.21) 与网关和 CodeCatalyst 软件包存储库中的版本 (4.17.20) 不匹配。 -
添加、提交和推送:
git add . git commit -m "update package.json to use lodash 4.17.21" git push
为了测试 “Hello World” 无法提取 “lodash” 的 4.17.21 版本
-
在版本不匹配的情况下运行工作流程:
-
切换到 CodeCatalyst 控制台。
-
在导航窗格中,选择 C I/CD,然后选择工作流程。
-
在旁边
codecatalyst-package-workflow
,选择 “操作”,然后选择 “运行”。npm 查找依赖关系,并看到 “Hello World” 需要版本 4.17.21。npm 按以下顺序在以下位置查找依赖关系:
package.json
lodash
-
在 Docker 镜像中运行操作。它在这里找不到。
-
在 CodeCatalyst 软件包存储库中。它在这里找不到。
-
在网关存储库中。它在这里找不到。
-
在 npmjs.com 中。它在这里找到了。
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
。 -
在顶部附近,选择 O rigin 控件。
-
在 “上游” 下,选择 “允许”。
-
选择保存。
你现在已经解锁了的导入。
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 软件包存储库。