Escreva seu CI/CD no TypeScript
Se a maioria das ferramentas de CI/CD hoje for robusta, a maneira como definimos scripts nelas vem com algumas desvantagens: elas têm fortes bloqueios de fornecedores; Eles são difíceis de testar e depurar localmente; Todos eles usam uma sintaxe diferente no YAML, que é difícil de estender e compor. Por todas essas razões, quando a pessoa que as escreveu não está por perto, não é incomum que as equipes não saibam o que os scripts fazem. Eles raramente evoluem e sua manutenção é difícil. O uso dos módulos Code e Node Node.js para escrever CI/CD pode resolver todos esses problemas e vem com muitos benefícios: é possível depurar localmente. Para evitar regressões, é possível testar o CI/CD com uma estrutura de teste normal; Oferece melhor reutilização em projetos e maior composibilidade; Ele usa código em vez de configuração, facilitando a captura de erros, gerenciam tentativas, loops e lógica condicional; Ele se integra perfeitamente ao ecossistema Rich Node.JS. Exemplo: manuseie seu CI/CD em Node.js com órbitas Esta postagem do blog seguirá a amostra simples de pipeline de implantação disponível no repositório do GitHub de órbitas. Esta amostra implanta um lambda AWS que responderá a uma solicitação de GET com esta arquitetura: ┌──── Thriga Thostantentas. └───rigptos –──── faraptocutivamente └─┘ └sto endpoint Prerequisites You’ll need: Access to one AWS account Node.js and npm installed MongoDB instance for orbits state management Project Setup # Clone the repository git clone cd samples/simple-deployment-pipeline # Install dependencies npm install # Configure environment export AWS_REGION=you-aws-region export AWS_ACCOUNT=you-aws-account # Install the CLI either globally or in your project ## Globalmente npm i @orbi-ts/cli -g ## em seu projeto npm i @orbi-ts/cli # define seu mongo_url ## padrão é mongodb: // lochost: o seu MOMEMPLOTEMPLOTEMPLEMPLEMPLEMEN EXEMPLENSTELSTELT EMSTEMPLENSTELSTELT EXTEMPLENSTELSTELT EXTEMPLEMEN EMEMPLETLEMPLEMTEL EXTEMPLEMEN OMSEMPLOUSTELT ENTERBLENSTELT EMSTEMPLEMEN EMENTLEMENTEMPLEMTEN EMENTLEMENTEMPLEMTEN EMSMOTLEMPLEMTEN EMSMOME Orbi.ts vemos que o implantador de trabalho de trabalho leva dois argumentos: região: a conta da região da AWS: a conta da AWS, portanto, a execução é tão fácil quanto digitar este comando: Orbits-cli ações executadas -f src/orbits/orbi.ts-local-worker \ Deployloworkflow \ Region = $ aws_region \ deployment: We can get the result of the deploy action using the get method (provided its ID is 689de1b3fcb667fee45a4bfe): ➜ orbits-cli actions get 689de1b3fcb667fee45a4bfe ID ┆ ACTION REF ┆ STATE ┆ RESULT ┆ LAST ACTIVITY ┆ NEXT ACTIVITY ┆ PARENT > REF ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ 689DE1B3FCB667FEE45A4BFE ┆ Lambdaresource ┆ Sucesso ┆ {“cfid”: “e28nidfx6oeEC6”, “helloApiendaPo3fbfd89”: “┆ ┆ em 7min 45S ┆ 689DE1B1B1B1B. Modo de saída Modo completo com seu ID, você pode obter a visualização gráfica de um fluxo de ação / trabalho a qualquer momento: Orbits-Cli Ações Digite o modo de saída de tela cheia com isso em mente, você tem um histórico completo de sua implantação e pode ver com a qual serem falhados. definido: importar {fluxo de trabalho} de ‘@orbi-ts/core’; Implanthelloworkflow estende o fluxo de trabalho {declara o argumento: fluxo de trabalho[‘IArgument’] & {região: string; conta: string; }; async define () {aguardar this.do (‘Quality’, new codeQualityWorkFlow ()); const resultado = aguardar this.do (‘implantar’, novo lambdaresource ({região: this.argument.region, conta: this.argument.account,}); Aguarde this.do (‘invalidar cache’, novo invalidateCacheaction (). SetArgument ({distributionId: resultado.cfid, Env: {região: this.argument.region},})); Aguarda this.do (‘verifique’, new verifylambdadeploymentAction (). SetArgument ({endpoint: `})); }} Digite o modo de saída do modo de tela cheia, porque sabemos o nome de uma ação e seus argumentos, executando -o diretamente é muito simples. Vamos tentar executar o fluxo de trabalho da qualidade do código. Como a ação do implantador de trabalho não requer argumentos, podemos executar: Orbits-cli Actions execute o codeQualityWorkflow -f src/orbits/orbi.ts-Local-Worker Digite o modo de tela cheia de tela cheia, obtemos o modo de erração seguinte no fluxo de trabalho-tudo é verde, não é o que não é verde! Agora vamos fazer o manipulador falhar nos testes. Modificaremos o código da seguinte forma: digite helloEvent = {querystringParameters: {primeiro_name?: String; last_name?: string; }; }; exportar const Handler = assíncrono (evento: helloevent): promessa<{
statusCode: number;
body: string;
}> => {// const FirstName = event.QueryStringParameters.first_name; const FirstName = ‘Alice’; const lastName = event.QueryStringParameters.last_name; const agora = new Date (); Return {StatusCode: 200, Body: `Hello $ {[firstName, lastName].Filter (booleano) .Join (”) || ‘Guest’}, ` +` time é $ {now.getutchours ()}: $ {agora.getUtcminutes ()}: $ {agora.getutcSeconds ()} (utc) `,}; }; Digite o modo de saída do modo de tela cheia quando fizemos novamente sem sair do processo, o fluxo de trabalho falha e se move para o estado de erro. Podemos inspecionar o erro nos logs ou visualizar o resultado no painel dedicado: vamos corrigir o teste restaurando a linha original: const FirstName = event.QueryStringParameters.first_name; // const FirstName = “Alice”; <-Remova esta linha Digite o modo de saída de tela cheia de tela cheia agora, em outro terminal, podemos reproduzir a ação de teste por seu ID: Orbits-cli-cli reproduza $ Action_id Digite Modo de tela Full Screen Exit Modo de tela cheia ou reproduza o modo de trabalho inteiro ETINDO DE TESTE FLUGO FLEGRO DE TESTE DO MODO DE TESTE: Orbits Cli Actions Ações $ workflow_id_id-O Modo de tela inteiro é o modo FullScreen Full. Veja em ação: indo mais longe, agora você pode escrever e integrar fluxos de trabalho de CI/CD diretamente em seu próprio projeto. Mais do que apenas fluxos de trabalho, as órbitas são especialmente úteis quando você deseja compartilhar fluxos de trabalho em projetos e inquilinos. Leia nossa série de blogs sobre orquestração. À medida que o projeto cresce, planejamos adicionar mais funções auxiliares para criar rapidamente seu CI/CD. Mantenha -se atualizado seguindo o repositório do GitHub. Quer experimentar você mesmo? O código de exemplo completo e as instruções de configuração estão disponíveis no repositório do GitHub. Dê um giro!
Fonte