Neste tutorial, você aprende a criar um fluxo de trabalho que executa uma aplicação cujas dependências são extraídas de um repositório de pacotes do CodeCatalyst. A aplicação é um Node.js simples que imprime uma mensagem “Hello World” nos logs do CodeCatalyst. A aplicação tem uma única dependência: o pacote npm lodashlodash
é usado para transformar uma string hello-world
em Hello World
. Você usará a versão 4.17.20 desse pacote.
Depois de configurar a aplicação e o fluxo de trabalho, você configura o CodeCatalyst para impedir que versões adicionais do lodash
sejam importadas para o repositório de pacotes do CodeCatalyst a partir do registro externo público (npmjs.comlodash
foram bloqueadas.
Ao final deste tutorial, você deve ter uma boa compreensão de como um fluxo de trabalho interage com repositórios de pacotes, dentro e fora do CodeCatalyst, para recuperar pacotes. Você também deve entender as interações nos bastidores que ocorrem entre o npm, seu repositório de pacotes, seu fluxo de trabalho e o arquivo package.json
da aplicação.
Tópicos
- Pré-requisitos
- Etapa 1: criar um repositório de origem
- Etapa 2: criar os repositórios de pacotes do CodeCatalyst e do gateway
- Etapa 3: criar a aplicação “Hello World”
- Etapa 4: criar um fluxo de trabalho que execute o “Hello World”
- Etapa 5: verificar o fluxo de trabalho
- Etapa 6: bloquear importações de npmjs.com
- Etapa 7: testar o recurso de bloqueio
- Limpeza
Pré-requisitos
Antes de começar
-
Você precisa de um espaço do CodeCatalyst. Para ter mais informações, consulte Criar um espaço.
-
No espaço do CodeCatalyst, você precisa de um projeto vazio chamado:
codecatalyst-package-project
Use a opção Começar do zero para criar esse projeto.
Para ter mais informações, consulte Criação de um projeto vazio no Amazon CodeCatalyst.
Etapa 1: criar um repositório de origem
Nesta etapa, você cria um repositório de origem no CodeCatalyst. Esse repositório armazena os arquivos de origem do tutorial, como os arquivos index.js
e package.json
.
Para ter mais informações sobre repositórios de origem, consulte Criar um repositório de origem.
Como criar um repositório de origem
Abra o console do CodeCatalyst em https://codecatalyst.aws/
. -
Navegue até o projeto,
codecatalyst-package-project
. -
No painel de navegação, selecione Código e, depois, selecione Repositórios de origem.
-
Escolha Adicionar repositório e selecione Criar repositório.
-
Em Nome do repositório, insira:
hello-world-app
-
Escolha Criar.
Etapa 2: criar os repositórios de pacotes do CodeCatalyst e do gateway
Nesta etapa, você cria um repositório de pacotes no projeto do CodeCatalyst e o conecta a um repositório de gateway, também no projeto do CodeCatalyst. Posteriormente, você importa a dependência do tutorial, lodash
, de npmjs.com para os dois repositórios.
O repositório de gateway é a “cola” que conecta seu repositório de pacotes no CodeCatalyst ao público npmjs.com.
Para ter mais informações sobre repositórios de pacote, consulte Publicar e compartilhar pacotes de software no CodeCatalyst.
nota
Este tutorial usa os termos repositório de pacotes do CodeCatalyst e repositório de gateway para se referir aos dois repositórios que você cria no CodeCatalyst no procedimento a seguir.
Para criar repositórios de pacotes do CodeCatalyst e do gateway
-
No painel de navegação, selecione Packages (pacotes).
-
Escolha Criar repositório de pacotes.
-
Em Nome do repositório, insira:
codecatalyst-package-repository
-
Escolha + Selecionar repositórios upstream.
-
Escolha Repositórios de gateway.
-
Na caixa npm-public-registry-gateway, selecione Criar.
-
Escolha Selecionar.
-
Escolha Criar.
O CodeCatalyst cria um repositório de pacotes chamado
codecatalyst-package-repository
que está conectado a um repositório de gateway. O repositório de gateway está conectado ao registro npmjs.com.
Etapa 3: criar a aplicação “Hello World”
Nesta etapa, você cria uma aplicação Node.js “Hello World” e importa a dependência (lodash
) para os repositórios de pacotes do gateway e do CodeCatalyst.
Para criar a aplicação, você precisa de uma máquina de desenvolvimento com o Node.js e o cliente npm
associado instalado.
Este tutorial pressupõe que você usará um Ambiente de Desenvolvimento do CodeCatalyst como máquina de desenvolvimento. Embora você não precise usar um Ambiente de Desenvolvimento do CodeCatalyst, ele é recomendado porque fornece um ambiente de trabalho limpo, tem o Node.js e o npm
pré-instalados e é fácil de excluir quando você terminar o tutorial. Para ter mais informações sobre Ambientes de Desenvolvimento do CodeCatalyst, consulte Criar um Ambiente de Desenvolvimento.
Use as instruções a seguir para iniciar um Ambiente de Desenvolvimento do CodeCatalyst e usá-lo para criar a aplicação “Hello World”.
Como iniciar um novo Ambiente de Desenvolvimento do CodeCatalyst
-
No painel de navegação, escolha Código e Ambientes de Desenvolvimento.
-
Na parte superior, escolha Criar ambiente de desenvolvimento e AWS Cloud9 (no navegador).
-
Verifique se Repositório está definido como
hello-world-app
e Ramificação existente está definido comomain
. Escolha Criar.O Ambiente de Desenvolvimento é iniciado em uma nova guia do navegador e seu repositório (
hello-world-app
) é clonado nela. -
Deixe as duas guias do navegador do CodeCatalyst abertas e vá para o próximo procedimento.
Como criar a aplicação Node.js “Hello World”
-
Acesse o Ambiente de Desenvolvimento.
-
No prompt do terminal, mude para o diretório raiz do repositório de origem
hello-world-app
:cd hello-world-app
-
Inicialize um projeto Node.js:
npm init -y
A inicialização cria um arquivo
package.json
no diretório raiz dohello-world-app
. -
Conecte o cliente npm no Ambiente de Desenvolvimento ao repositório de pacotes do CodeCatalyst:
-
Mude para o console do CodeCatalyst.
-
No painel de navegação, selecione Packages (pacotes).
-
Selecione
codecatalyst-package-repository
. -
Selecione Conectar ao repositório.
-
Selecione Criar token. Um token de acesso pessoal (PAT) é criado para você.
-
Selecione Copiar para copiar os comandos.
-
Mude para o Ambiente de Desenvolvimento.
-
Verifique se você está no diretório
hello-world-app
. -
Cole os comandos. Eles são semelhantes a:
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
-
-
Importe a versão 4.17.20 de
lodash
:npm install lodash@v4.17.20 --save --save-exact
O npm procura a versão 4.17.20 de
lodash
nos seguintes locais, na seguinte ordem:-
No Ambiente de Desenvolvimento. Ele não consegue encontrá-lo aqui.
-
No repositório de pacotes do CodeCatalyst. Ele não consegue encontrá-lo aqui.
-
No repositório de gateway. Ele não consegue encontrá-lo aqui.
-
Em npmjs.com. Ele o encontra aqui.
O npm importa
lodash
para o repositório de gateway, o repositório de pacotes do CodeCatalyst e o Ambiente de Desenvolvimento.nota
Se você não tivesse conectado o cliente npm ao repositório de pacotes do CodeCatalyst na etapa 4, o npm teria retirado
lodash
diretamente do npmjs.com e não teria importado o pacote para nenhum dos repositórios.O npm também atualiza seu arquivo
package.json
com a dependêncialodash
e cria um diretórionode_modules
contendolodash
e todas as dependências. -
-
Teste se
lodash
foi importado para seu Ambiente de Desenvolvimento. Insira:npm list
A mensagem a seguir é exibida, indicando uma importação bem-sucedida:
`-- lodash@4.17.20
-
(Opcional) Abra
hello-world-app/package.json
e verifique se as linhas emnegrito vermelho
foram adicionadas:{ "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"
} } -
Em
/hello-world-app
, crie um arquivo chamadoindex.js
com o conteúdo a seguir:dica
Você pode usar a navegação lateral no Ambiente de Desenvolvimento para criar esse arquivo.
// 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);
Para testar se “lodash” foi importado para os repositórios de pacotes do gateway e do CodeCatalyst
-
Mude para o console do CodeCatalyst.
-
No painel de navegação, selecione Packages (pacotes).
-
Selecione npm-public-registry-gateway.
-
Certifique-se de que
lodash
seja exibido. A coluna Versão mais recente indica4.17.20
. -
Repita esse procedimento para o
codecatalyst-package-repository
. Talvez seja necessário atualizar a janela do navegador para ver o pacote importado.
Para testar o “Hello World” em seu Ambiente de Desenvolvimento
-
Mude para o Ambiente de Desenvolvimento.
-
Verifique se você ainda está no diretório
hello-world-app
e execute a aplicação:node index.js
Uma mensagem
Hello World
é exibida. O Node.js executou a aplicação usando o pacotelodash
que você baixou para o Ambiente de Desenvolvimento em uma etapa anterior.
Como ignorar o diretório “node_modules” e confirmar “Hello World”
-
Ignore o diretório
node_modules
. Insira:echo "node_modules/" >> .gitignore
É uma prática recomendada evitar confirmar esse diretório. Além disso, a confirmação desse diretório interferirá nas etapas posteriores neste tutorial.
-
Adicione, confirme e envie:
git add . git commit -m "add the Hello World application" git push
Os arquivos da aplicação e do projeto “Hello World” são adicionados ao repositório de origem.
Etapa 4: criar um fluxo de trabalho que execute o “Hello World”
Nesta etapa, crie um fluxo de trabalho que executará a aplicação “Hello World” usando a dependência lodash
. O fluxo de trabalho inclui uma única ação ou tarefa chamada RunHelloWorldApp
. A ação RunHelloWorldApp
inclui os seguintes comandos e seções notáveis:
-
Packages
Esta seção indica o nome do repositório de pacotes do CodeCatalyst ao qual a ação deve se conectar durante a execução de
npm install
. -
- Run: npm install
Esse comando instrui o npm a instalar as dependências especificadas no arquivo
package.json
. A única dependência especificada no arquivopackage.json
élodash
. O npm procuralodash
nos seguintes locais:-
Na imagem do Docker que executa a ação. Ele não consegue encontrá-lo aqui.
-
No repositório de pacotes do CodeCatalyst. Ele o encontra aqui.
Depois que o npm encontra
lodash
, ele o importa para a imagem do Docker que executa a ação. -
-
- Run: npm list
Esse comando imprime qual versão do
lodash
foi baixada para a imagem do Docker que executa a ação. -
- Run: node index.js
Esse comando executa a aplicação “Hello World” usando a dependência especificada no arquivo
package.json
.
Observe que a ação RunHelloWorldApp
é uma ação de criação, conforme indicado pelo identificador aws/build@v1
próximo à parte superior do fluxo de trabalho. Para ter mais informações sobre a ação de criação, consulte Criação com fluxos de trabalho.
Use as instruções a seguir para criar um fluxo de trabalho que extraia a dependência lodash
do repositório de pacotes do CodeCatalyst e, depois, execute a aplicação “Hello World”.
Como criar um fluxo de trabalho
-
Mude para o console do CodeCatalyst.
-
No painel de navegação, escolha CI/CD e Fluxos de trabalho.
-
Selecione Criar fluxo de trabalho.
-
Em Repositório de origem, selecione
hello-world-app
. -
Em Ramificação, selecione
main
.O arquivo de definição do fluxo de trabalho será criado no repositório de origem e na ramificação escolhidos.
-
Escolha Criar.
-
Selecione YAML na parte superior.
-
Exclua o código de amostra YAML.
-
Adicione o seguinte código 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
No código anterior, substitua
codecatalyst-package-repository
pelo nome do repositório de pacotes do CodeCatalyst que você criou em Etapa 2: criar os repositórios de pacotes do CodeCatalyst e do gateway.Para ter informações sobre as propriedades nesse arquivo, consulte a Ações de criação e de teste YAML.
-
(Opcional) Selecione Validar para garantir que o código YAML seja válido antes de confirmar.
-
Escolha Commit (Confirmar).
-
Na caixa de diálogo Confirmar fluxo de trabalho, insira o seguinte:
-
Em Nome do arquivo do fluxo de trabalho, mantenha o padrão,
codecatalyst-package-workflow
. -
Em Confirmar mensagem, insira:
add initial workflow file
-
Em Repositório, selecione hello-world-app.
-
Em Nome da ramificação, selecione principal.
-
Escolha Commit (Confirmar).
Agora você criou um fluxo de trabalho.
-
Para executar o fluxo de trabalho
-
Ao lado do fluxo de trabalho que você acabou de criar (
codecatalyst-package-workflow
), selecione Ações e, depois, selecione Executar.A execução do fluxo de trabalho é iniciada.
-
Na notificação verde na parte superior, à direita, escolha o link para a execução. O link é semelhante a
View Run-1234
.Um diagrama do fluxo de trabalho é exibido, mostrando quem iniciou a execução e a ação RunHelloWorldApp.
-
Escolha a caixa RunHelloWorldApp para observar o progresso da ação.
-
Quando a execução terminar, vá para Etapa 5: verificar o fluxo de trabalho.
Etapa 5: verificar o fluxo de trabalho
Nesta etapa, você verifica se o fluxo de trabalho executou a aplicação “Hello World” com a dependência lodash
.
Como verificar se a aplicação “Hello World” foi executada usando a dependência
-
No diagrama do fluxo de trabalho, escolha a caixa RunHelloWorldApp.
Uma lista de mensagens de log é exibida.
-
Expanda a mensagem de log
node index.js
.A seguinte mensagem é exibida:
[Container] 2024/04/24 21:15:41.545650 Running command node index.js Hello World
A aparência de
Hello Word
(em vez dehello-world
) indica que a dependêncialodash
foi usada. -
Expanda o log
npm list
.Uma mensagem semelhante à seguinte é exibida:
└── lodash@4.17.20
Essa mensagem indica que a versão 4.17.20 de
lodash
foi baixada para a imagem do Docker que executa a ação do fluxo de trabalho.
Etapa 6: bloquear importações de npmjs.com
Agora que a versão 4.17.20 de lodash
está presente nos repositórios de pacotes do gateway e do CodeCatalyst, você pode bloquear importações de outras versões. O bloqueio impede que você importe acidentalmente versões posteriores (ou anteriores) dolodash
, que podem conter código malicioso. Para ter mais informações, consulte Editar controles de origem do pacote e Ataques de substituição de dependências.
Use as instruções a seguir para bloquear as importações de lodash
do seu repositório de gateway. Quando você bloqueia pacotes no gateway, eles também são bloqueados em locais posteriores.
Para bloquear importações para o repositório de gateway
-
No painel de navegação, selecione Packages (pacotes).
-
Selecione npm-publish-registry-gateway.
-
Selecione
lodash
. -
Na parte superior, selecione Controles de origem.
-
Em Upstream, selecione Bloquear.
-
Escolha Salvar.
Agora você bloqueou as importações para seu repositório de gateway (e repositórios e computadores downstream) em npmjs.com.
Etapa 7: testar o recurso de bloqueio
Nesta seção, você verifica se o bloqueio configurado em Etapa 6: bloquear importações de npmjs.com está funcionando. Você começa configurando o “Hello World” para solicitar a versão 4.17.21 de lodash
em vez da disponível no seu repositório de gateway, que é a 4.17.20. Depois, você confere se a aplicação não pode extrair a versão 4.17.21 do nmpjs.com, indicando um bloqueio bem-sucedido. Como teste final, você desbloqueia as importações para o repositório do gateway e confere se a aplicação consegue extrair a versão 4.17.21 de lodash
.
Use o conjunto de procedimentos a seguir para testar o recurso de bloqueio.
Antes de começar
-
Mude para o Ambiente de Desenvolvimento.
-
Extraia o arquivo
codecatalyst-package-workflow.yaml
que você criou usando o console do CodeCatalyst anteriormente:git pull
Como configurar “Hello World” para solicitar a versão 4.17.21 de “lodash”
-
Abra o
/hello-world-app/package.json
. -
Altere a versão de
lodash
para 4.17.21 conforme mostrado emnegrito vermelho
:{ "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
" } }Agora há uma incompatibilidade entre a versão no arquivo
package.json
(4.17.21) e a versão nos repositórios de pacotes do gateway e do CodeCatalyst (4.17.20). -
Adicione, confirme e envie:
git add . git commit -m "update package.json to use lodash 4.17.21" git push
Como testar se o “Hello World” não pode receber a versão 4.17.21 de “lodash”
-
Execute o fluxo de trabalho com a incompatibilidade de versão:
-
Mude para o console do CodeCatalyst.
-
No painel de navegação, escolha CI/CD e Fluxos de trabalho.
-
Ao lado de
codecatalyst-package-workflow
, selecione Ação e Executar.O npm examina em
package.json
as dependências e vê que a versão 4.17.21 delodash
é exigida pelo “Hello World”. O npm procura a dependência nos seguintes locais, na seguinte ordem:-
Na imagem do Docker que executa a ação. Ele não consegue encontrá-lo aqui.
-
No repositório de pacotes do CodeCatalyst. Ele não consegue encontrá-lo aqui.
-
No repositório de gateway. Ele não consegue encontrá-lo aqui.
-
Em npmjs.com. Ele o encontra aqui.
Depois que o npm encontra a versão 4.17.21 em npmjs.com, ele tenta importá-la para o repositório do gateway, mas como você configura o gateway para bloquear as importações de
lodash
, a importação não ocorre.Como a importação não ocorre, o fluxo de trabalho falha.
-
-
-
Verifique se o fluxo de trabalho falhou:
-
Na notificação verde na parte superior, à direita, escolha o link para a execução. O link é semelhante a
View Run-2345
. -
No diagrama do fluxo de trabalho, escolha a caixa RunHelloWorldApp.
-
Expanda a mensagem de log
npm install
.A seguinte mensagem é exibida:
[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
O erro indica que a versão 4.17.21 não foi encontrada. Isso é esperado porque você a bloqueou.
-
Para desbloquear importações de npmjs.com
-
No painel de navegação, selecione Packages (pacotes).
-
Selecione npm-publish-registry-gateway.
-
Selecione
lodash
. -
Na parte superior, selecione Controles de origem.
-
Em Upstream, selecione Permitir.
-
Escolha Salvar.
Agora você desbloqueou as importações de
lodash
.Seu fluxo de trabalho agora pode importar a versão 4.17.21 de
lodash
.
Para testar se as importações de npmjs.com estão desbloqueadas
-
Execute o fluxo de trabalho novamente. Desta vez, o fluxo de trabalho deve ser bem-sucedido porque a importação de 4.17.21 agora deve funcionar. Para executar o fluxo de trabalho novamente:
-
Selecione CI/CD e, depois, selecione Fluxos de trabalho.
-
Ao lado de
codecatalyst-package-workflow
, selecione Ações e Executar. -
Na notificação verde na parte superior, à direita, escolha o link para a execução. O link é semelhante a
View Run-3456
.Um diagrama do fluxo de trabalho é exibido, mostrando quem iniciou a execução e a ação RunHelloWorldApp.
-
Escolha a caixa RunHelloWorldApp para observar o progresso da ação.
-
Expanda a mensagem de log
npm list
e verifique se uma mensagem semelhante à seguinte é exibida:└── lodash@4.17.21
Essa mensagem indica que a versão 4.17.21 de
lodash
foi baixada.
-
-
Verifique se a versão 4.17.21 foi importada para seus repositórios do CodeCatalyst e de gateway:
-
No painel de navegação, selecione Packages (pacotes).
-
Selecione npm-public-registry-gateway.
-
Encontre
lodash
e verifique se a versão é4.17.21
.nota
Embora a versão 4.17.20 não esteja listada nesta página, você pode encontrá-la escolhendo
lodash
e Versões na parte superior. -
Repita essas etapas para verificar se a versão 4.17.21 foi importada para o
codecatalyst-package-repository
.
-
Limpeza
Limpe os arquivos e serviços usados neste tutorial para evitar cobranças por eles.
Para limpar os pacotes (tutorial)
-
Exclua o
codecatalyst-package-project
:-
No console do CodeCatalyst, navegue até o projeto
codecatalyst-package-project
se você ainda não estiver lá. -
No painel de navegação, escolha Configurações do projeto.
-
Selecione Excluir projeto, insira
delete
e selecione Excluir projeto.O CodeCatalyst exclui todos os recursos do projeto, incluindo os repositórios de origem, gateway e pacotes do CodeCatalyst. O Ambiente de Desenvolvimento também é excluído.
-
-
Exclua o token PAT:
-
Escolha seu nome de usuário à direita e selecione Minhas configurações.
-
Em Tokens de acesso pessoal, escolha o token que você criou neste tutorial e selecione Excluir.
-
Neste tutorial, você aprendeu a criar um fluxo de trabalho que executa uma aplicação que extrai as dependências de um repositório de pacotes do CodeCatalyst. Você também aprendeu a bloquear e desbloquear a entrada de pacotes nos repositórios de pacotes do gateway e do CodeCatalyst.