Crea automaticamente pipeline CI dinamiche per progetti Java e Python - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Crea automaticamente pipeline CI dinamiche per progetti Java e Python

Creato da Aromal Raj Jayarajan (AWS), Amarnath Reddy (), () e Vijesh Vijayakumaran Nair (AWS) MAHESH RAGHUNANDANAN AWS AWS

Archivio del codice: automated-ci-pipeline-creation

Ambiente: PoC o pilota

Tecnologie: infrastruttura DevOps; Serverless

Carico di lavoro: tutti gli altri carichi di lavoro

AWSservizi: AWS CodeBuild; AWS Lambda AWS CodePipeline; AWS Step Functions; AWS CodeCommit

Riepilogo

Avviso: non AWS CodeCommit è più disponibile per i nuovi clienti. I clienti esistenti di AWS CodeCommit possono continuare a utilizzare il servizio normalmente. Ulteriori informazioni

Questo modello mostra come creare automaticamente pipeline dinamiche di integrazione continua (CI) per progetti Java e Python AWS utilizzando strumenti di sviluppo.

Con la diversificazione degli stack tecnologici e l'aumento delle attività di sviluppo, può diventare difficile creare e mantenere pipeline CI coerenti all'interno di un'organizzazione. Automatizzando il processo in AWS Step Functions, puoi assicurarti che le tue pipeline CI siano coerenti nel loro utilizzo e approccio.

Per automatizzare la creazione di pipeline CI dinamiche, questo modello utilizza i seguenti input variabili:

  • Linguaggio di programmazione (solo Java o Python)

  • Nome della pipeline

  • Fasi della pipeline richieste

Nota: Step Functions orchestra la creazione di pipeline utilizzando più servizi. AWS Per ulteriori informazioni sui AWS servizi utilizzati in questa soluzione, vedere la sezione Strumenti di questo modello.

Prerequisiti e limitazioni

Prerequisiti

  • Un AWS account attivo

  • Un bucket Amazon S3 nella stessa AWS regione in cui viene distribuita questa soluzione

  • Un principale di AWS Identity and Access Management (IAM) che dispone delle AWS CloudFormation autorizzazioni necessarie per creare le risorse necessarie per questa soluzione

Limitazioni

  • Questo modello supporta solo progetti Java e Python.

  • I IAM ruoli previsti in questo modello seguono il principio del privilegio minimo. Le autorizzazioni IAM dei ruoli devono essere aggiornate in base alle risorse specifiche che la pipeline CI deve creare.

Architettura

Stack tecnologico Target

  • AWS CloudFormation

  • AWS CodeBuild

  • AWS CodeCommit

  • AWS CodePipeline

  • IAM

  • Amazon Simple Storage Service (Amazon S3)

  • AWS Systems Manager

  • AWS Step Functions

  • AWSLambda

  • Amazon DynamoDB

Architettura Target

Il diagramma seguente mostra un esempio di flusso di lavoro per la creazione automatica di pipeline CI dinamiche per progetti Java e Python utilizzando strumenti di sviluppo. AWS

Flusso di lavoro per creare automaticamente AWS pipeline CI dinamiche per progetti Java e Python utilizzando strumenti.

Il diagramma mostra il flusso di lavoro seguente:

  1. Un AWS utente fornisce i parametri di input per la creazione di pipeline CI in formato. JSON Questo input avvia un flusso di lavoro Step Functions (macchina a stati) che crea una pipeline CI utilizzando strumenti di AWS sviluppo.

  2. Una funzione Lambda legge una cartella denominata input-reference, archiviata in un bucket Amazon S3, e quindi genera un file buildspec.yml. Questo file generato definisce le fasi della pipeline CI e viene archiviato nello stesso bucket Amazon S3 che memorizza i riferimenti ai parametri.

  3. Step Functions controlla le dipendenze del flusso di lavoro di creazione della pipeline CI per eventuali modifiche e aggiorna lo stack di dipendenze secondo necessità.

  4. Step Functions crea le risorse della pipeline CI in uno CloudFormation stack, tra cui un CodeCommit repository, un CodeBuild progetto e una pipeline. CodePipeline

  5. Lo CloudFormation stack copia il codice sorgente di esempio per lo stack tecnologico selezionato (Java o Python) e il file buildspec.yml nel repository. CodeCommit

  6. I dettagli del runtime della pipeline CI sono archiviati in una tabella DynamoDB.

Automazione e scalabilità

  • Questo modello è destinato all'uso in un solo ambiente di sviluppo. Le modifiche alla configurazione sono necessarie per l'utilizzo in più ambienti di sviluppo.

  • Per aggiungere il supporto per più di uno CloudFormation stack, puoi creare CloudFormation modelli aggiuntivi. Per ulteriori informazioni, consulta la sezione Guida introduttiva AWS CloudFormation nella CloudFormation documentazione.

Strumenti

Strumenti

  • AWSStep Functions è un servizio di orchestrazione serverless che consente di combinare funzioni AWS Lambda e altri AWS servizi per creare applicazioni aziendali critiche.

  • AWSLambda è un servizio di elaborazione che ti aiuta a eseguire il codice senza dover effettuare il provisioning o gestire i server. Esegue il codice solo quando necessario e si ridimensiona automaticamente, quindi paghi solo per il tempo di elaborazione che utilizzi.

  • AWS CodeBuildè un servizio di compilazione completamente gestito che consente di compilare codice sorgente, eseguire test unitari e produrre artefatti pronti per la distribuzione.

  • AWS CodeCommitè un servizio di controllo delle versioni che consente di archiviare e gestire in modo privato gli archivi Git, senza dover gestire il proprio sistema di controllo del codice sorgente.

  • AWS CodePipelineti aiuta a modellare e configurare rapidamente le diverse fasi di una versione del software e ad automatizzare i passaggi necessari per rilasciare continuamente le modifiche al software.

  • AWSIdentity and Access Management (IAM) consente di gestire in modo sicuro l'accesso alle AWS risorse controllando chi è autenticato e autorizzato a utilizzarle.

  • AWSKey Management Service (AWSKMS) consente di creare e controllare chiavi crittografiche per proteggere i dati.

  • Amazon Simple Storage Service (Amazon S3) è un servizio di archiviazione degli oggetti basato sul cloud che consente di archiviare, proteggere e recuperare qualsiasi quantità di dati.

  • AWS CloudFormationti aiuta a configurare AWS le risorse, a fornirle in modo rapido e coerente e a gestirle durante tutto il loro ciclo di vita tra AWS account e regioni.

  • Amazon DynamoDB è un servizio di database SQL No completamente gestito che offre prestazioni veloci, prevedibili e scalabili.

  • AWSSystems Manager Parameter Store fornisce uno storage sicuro e gerarchico per la gestione dei dati di configurazione e la gestione dei segreti.

Codice

Il codice per questo pattern è disponibile nel repository. GitHub automated-ci-pipeline-creation Il repository contiene i CloudFormation modelli necessari per creare l'architettura di destinazione delineata in questo modello.

Best practice

  • Non inserire credenziali (segrete) come token o password direttamente nei CloudFormation modelli o nelle configurazioni di azione Step Functions. In tal caso, le informazioni verranno visualizzate nei log di DynamoDB. Utilizza invece AWS Secrets Manager per configurare e archiviare i segreti. Quindi, fai riferimento ai segreti archiviati in Secrets Manager all'interno dei CloudFormation modelli e delle configurazioni di azione di Step Functions, se necessario. Per ulteriori informazioni, consulta What is AWS Secrets Manager nella documentazione di Secrets Manager.

  • Configura la crittografia lato server per gli CodePipeline artefatti archiviati in Amazon S3. Per ulteriori informazioni, consulta Configurare la crittografia lato server per gli artefatti archiviati in Amazon S3 nella documentazione. CodePipeline CodePipeline

  • Applica le autorizzazioni con privilegi minimi durante la configurazione dei ruoli. IAM Per ulteriori informazioni, consulta Applicare le autorizzazioni con privilegi minimi nella documentazione. IAM

  • Assicurati che il tuo bucket Amazon S3 non sia accessibile al pubblico. Per ulteriori informazioni, consulta Configurazione dell'impostazione di accesso pubblico a blocchi per i bucket S3 nella documentazione di Amazon S3.

  • Assicurati di attivare il controllo delle versioni per il tuo bucket Amazon S3. Per ulteriori informazioni, consulta Usare il controllo delle versioni nei bucket S3 nella documentazione di Amazon S3.

  • Usa IAM Access Analyzer per configurare le policy. IAM Lo strumento fornisce consigli pratici per aiutarti a creare policy sicure e funzionali. IAM Per ulteriori informazioni, vedere Using AWS Identity and Access Management Access Analyzer nella IAM documentazione.

  • Quando possibile, definisci condizioni di accesso specifiche durante la configurazione delle politicheIAM.

  • Attiva la CloudWatch registrazione di Amazon per scopi di monitoraggio e controllo. Per ulteriori informazioni, consulta What is Amazon CloudWatch Logs? nella CloudWatch documentazione.

Epiche

AttivitàDescrizioneCompetenze richieste

Creare un bucket Amazon S3.

Crea un bucket Amazon S3 (o usa un bucket esistente) per archiviare i CloudFormation modelli, il codice sorgente e i file di input richiesti per la soluzione.

Per ulteriori informazioni, consulta Fase 1: Crea il tuo primo bucket S3 nella documentazione di Amazon S3.

Nota: il bucket Amazon S3 deve trovarsi nella stessa AWS regione in cui stai distribuendo la soluzione.

AWS DevOps

Clona il repository. GitHub

Clona il GitHub automated-ci-pipeline-creationrepository eseguendo il seguente comando in una finestra di terminale:

git clone https://github.com/aws-samples/automated-ci-pipeline-creation.git

Per ulteriori informazioni, consulta Clonazione di un repository nella documentazione. GitHub

AWS DevOps

Carica la cartella Solution Templates dal GitHub repository clonato nel tuo bucket Amazon S3.

Copia i contenuti dalla cartella Solution-Templates clonata e caricali nel bucket Amazon S3 che hai creato.

Per ulteriori informazioni, consulta Caricamento di oggetti nella documentazione di Amazon S3.

Nota: assicurati di caricare solo il contenuto della cartella Solution-Templates. Puoi caricare i file solo a livello root del bucket Amazon S3.

AWS DevOps
AttivitàDescrizioneCompetenze richieste

Crea uno CloudFormation stack per distribuire la soluzione utilizzando il file template.yml nel repository clonato. GitHub

  1. Accedi alla console di gestione e quindi apri la console. AWS AWS CloudFormation

  2. Seleziona Crea stack. Viene visualizzato un elenco a discesa.

  3. Nell'elenco a discesa, seleziona Con nuove risorse (standard). Viene visualizzata la pagina Crea stack.

  4. Nella sezione Specificare il modello, seleziona la casella di controllo accanto a Carica un file modello.

  5. Selezionare Choose file (Scegli file). Quindi, accedi alla cartella principale del GitHub repository clonato e seleziona il file template.yml. Scegliere quindi Open (Apri).

  6. Scegli Next (Successivo). Viene visualizzata la pagina Specificare i dettagli dello stack.

  7. Nella sezione Parametri, specificare i seguenti parametri:

    • Per S3 TemplateBucketName, inserisci il nome del bucket Amazon S3 creato in precedenza, che contiene il codice sorgente e i riferimenti per questa soluzione. Assicurati che il parametro del nome del bucket sia in minuscolo.

    • Per D ynamoDBTable, inserisci un nome per la tabella DynamoDB creata dallo stack. CloudFormation

    • Per StateMachineName, inserisci un nome per la macchina a stati Step Functions creata dallo CloudFormation stack.

  8. Scegli Next (Successivo). Viene visualizzata la pagina Configura le opzioni dello stack.

  9. Nella pagina Configure stack options (Configura opzioni pila), scegliere Next (Successivo). Non modificate nessuno dei valori predefiniti. Viene visualizzata la pagina Revisione.

  10. Rivedi le impostazioni di creazione dello stack. Quindi, scegli Crea stack per avviare lo stack.

Nota: mentre lo stack viene creato, viene elencato nella pagina Pile con lo stato _IN_. CREATE PROGRESS Assicurati di attendere che lo stato dello stack passi a CREATE_ COMPLETE prima di completare i passaggi rimanenti di questo schema.

AWSamministratore, AWS DevOps
AttivitàDescrizioneCompetenze richieste

Esegui la funzione step che hai creato.

  1. Accedi alla console di AWS gestione e quindi apri la console Step Functions.

  2. Apri la funzione Step che hai creato.

  3. Selezionare Start execution (Avvia esecuzione). Quindi, inserisci i valori di input per il flusso di lavoro in JSON formato (vedi gli input di esempio seguenti).

  4. Selezionare Start execution (Avvia esecuzione).

JSONformattazione

{ "details": { "tech_stack": "Name of the Tech Stack (python/java)", "project_name": "Name of the Project that you want to create with", "pre_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "post_build": "Choose the step if it required in the buildspec.yml file i.e., yes/no", "reports": "Choose the step if it required in the buildspec.yml file i.e., yes/no", } }

esempio di JSON input Java

{ "details": { "tech_stack": "java", "project_name": "pipeline-java-pjt", "pre_build": "yes", "build": "yes", "post_build": "yes", "reports": "yes" } }

Esempio di input in Python JSON

{ "details": { "tech_stack": "python", "project_name": "pipeline-python-pjt", "pre_build": "yes", "build": "yes", "post_build": "yes", "reports": "yes" } }
AWSamministratore, AWS DevOps

Conferma che il CodeCommit repository per la pipeline CI è stato creato.

  1. Accedi alla console di AWS gestione e quindi apri la CodeCommit console.

  2. Nella pagina Repository, verifica che il nome del CodeCommit repository che hai creato compaia nell'elenco dei repository. Al nome del repository viene aggiunto quanto segue: -Repo pipeline-java-pjt

  3. Apri il CodeCommit repository e verifica che il codice sorgente di esempio insieme ai file buildspec.yml vengano inviati al ramo principale.

AWS DevOps

CodeBuild Controlla le risorse del progetto.

  1. Accedi alla console di AWS gestione e quindi apri la CodeBuild console.

  2. Nella pagina Crea progetti, verifica che il nome del CodeBuild progetto che hai creato compaia nell'elenco dei progetti. Al nome del progetto viene aggiunto quanto segue: pipeline-java-pjt -Build

  3. Seleziona il nome del tuo CodeBuild progetto per aprirlo. Quindi, rivedi e convalida le seguenti configurazioni:

    • Configurazione del progetto

    • Origine

    • Ambiente

    • Specifiche di costruzione

    • Configurazione Batch

    • Artefatti

AWS DevOps

Convalida le fasi. CodePipeline

  1. Accedi alla console di AWS gestione e quindi apri la CodePipeline console.

  2. Nella pagina Pipeline, verifica che il nome della pipeline che hai creato compaia nell'elenco delle pipeline. Al nome della pipeline viene aggiunto quanto segue: -Pipeline pipeline-java-pjt

  3. Seleziona il nome della pipeline per aprirla. Quindi, esamina e convalida ogni fase della pipeline, inclusi Commit e Deploy.

AWS DevOps

Conferma che la pipeline CI sia stata eseguita correttamente.

  1. Nella CodePipeline console, nella pagina Pipelines, seleziona il nome della pipeline per visualizzarne lo stato.

  2. Verifica che ogni fase della pipeline abbia lo stato Operato con successo.

AWS DevOps
AttivitàDescrizioneCompetenze richieste

Elimina la pila di risorse inclusa. CloudFormation

Elimina lo stack di risorse della pipeline CI in. CloudFormation

Per ulteriori informazioni, consulta Eliminazione di uno stack sulla AWS CloudFormation console nella documentazione. CloudFormation

Nota: assicurati di eliminare lo stack denominato -stack. <project_name>

AWS DevOps

Elimina le dipendenze della pipeline CI in Amazon S3 e. CloudFormation

  1. Svuota il bucket Amazon S3 denominato. DeploymentArtifactBucket Per ulteriori informazioni, consulta Svuotare un bucket nella documentazione di Amazon S3.

  2. Elimina lo stack di dipendenze della pipeline CI in. CloudFormation Per ulteriori informazioni, consulta Eliminazione di uno stack sulla console nella AWS CloudFormation documentazione. CloudFormation

Nota: assicurati di eliminare lo stack denominato. pipeline-creation-dependencies-stack

AWS DevOps

Elimina il bucket di modelli Amazon S3.

Elimina il bucket Amazon s3 che hai creato nella sezione Configura i prerequisiti di questo modello, che memorizza i modelli per questa soluzione.

Per ulteriori informazioni, consulta Eliminazione di un bucket nella documentazione di Amazon S3.

AWS DevOps

Risorse correlate