Tutorial: creazione di una pipeline a quattro fasi - AWS CodePipeline

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à.

Tutorial: creazione di una pipeline a quattro fasi

Ora che hai creato la tua prima pipeline in Tutorial: creazione di una semplice pipeline (bucket S3) o in Tutorial: crea una pipeline semplice (CodeCommitrepository), puoi iniziare a creare pipeline più complesse. Questo tutorial ti guiderà attraverso la creazione di una pipeline in quattro fasi che utilizza un GitHub repository per il codice sorgente, un server di build Jenkins per creare il progetto e un' CodeDeploy applicazione per distribuire il codice creato su un server di staging. Il diagramma seguente mostra la pipeline iniziale in tre fasi.

Un diagramma che mostra la fase di origine con l'azione di origine, una fase di creazione con l'azione Jenkins e una fase di distribuzione con l'azione di distribuzione.

Dopo aver creato la pipeline, dovrai modificarla aggiungendo una fase con un'operazione di test per provare il codice, sempre tramite Jenkins.

Prima di poter creare la pipeline, devi configurare le risorse necessarie. Ad esempio, se si desidera utilizzare un GitHub repository per il codice sorgente, è necessario creare il repository prima di poterlo aggiungere a una pipeline. Come parte della configurazione, questo tutorial illustra come configurare Jenkins su un'EC2istanza a scopo dimostrativo.

Importante

Molte delle azioni che aggiungi alla pipeline in questa procedura coinvolgono AWS risorse che devi creare prima di creare la pipeline. AWS le risorse per le tue azioni di origine devono sempre essere create nella stessa AWS regione in cui crei la pipeline. Ad esempio, se crei la pipeline nella regione Stati Uniti orientali (Ohio), il tuo CodeCommit repository deve trovarsi nella regione Stati Uniti orientali (Ohio).

Puoi aggiungere azioni interregionali quando crei la pipeline. AWS le risorse per le azioni interregionali devono trovarsi nella stessa AWS regione in cui intendi eseguire l'azione. Per ulteriori informazioni, consulta Aggiungere un'azione interregionale in CodePipeline.

Importante

Come parte della creazione di una pipeline, per gli artefatti verrà utilizzato un bucket di artefatti S3 fornito dal cliente. CodePipeline (Questo è diverso dal bucket utilizzato per un'azione sorgente S3.) Se il bucket di artefatti S3 si trova in un account diverso da quello della pipeline, assicurati che il bucket di artefatti S3 sia di proprietà di utenti sicuri e affidabili. Account AWS

Prima di iniziare il tutorial, devi aver già completato i prerequisiti generali indicati in Guida introduttiva con CodePipeline.

Fase 1: completamento dei prerequisiti

Per l'integrazione con Jenkins, è AWS CodePipeline necessario installare il CodePipeline Plugin for Jenkins su qualsiasi istanza di Jenkins che si desidera utilizzare. CodePipeline È inoltre necessario configurare un IAM utente o un ruolo dedicato da utilizzare per le autorizzazioni tra il progetto Jenkins e. CodePipeline Il modo più semplice per integrare Jenkins CodePipeline consiste nell'installare Jenkins su un'EC2istanza che utilizza un IAM ruolo di istanza creato dall'utente per l'integrazione con Jenkins. Affinché i collegamenti nella pipeline per le azioni Jenkins si connettano correttamente, è necessario configurare le impostazioni del proxy e del firewall sul server o sull'EC2istanza per consentire le connessioni in entrata alla porta utilizzata dal progetto Jenkins. Assicurati di aver configurato Jenkins per autenticare gli utenti e imporre il controllo degli accessi prima di consentire le connessioni su quelle porte (ad esempio, 443 e 8443 se hai protetto Jenkins in modo che utilizzi solo HTTPS le connessioni, o 80 e 8080 se consenti HTTP le connessioni). Per ulteriori informazioni, consulta l'articolo Garantire la sicurezza di Jenkins.

Nota

Questo tutorial utilizza un esempio di codice e configura le fasi di compilazione che convertono l'esempio da Haml a. HTML Puoi scaricare il codice di esempio open source dal GitHub repository seguendo la procedura riportata di seguito. Copiate o clonate il campione in un repository GitHub Avrai bisogno dell'intero campione nel tuo GitHub repository, non solo del file.zip.

Il tutorial presuppone anche che:

  • Tu abbia familiarità con l'installazione e l'amministrazione di Jenkins e con la creazione di progetti Jenkins.

  • Tu abbia installato Rake e il gem Haml per Ruby sullo stesso computer o sulla stessa istanza che ospita il progetto Jenkins.

  • Hai impostato le variabili di ambiente di sistema richieste in modo che i comandi Rake possano essere eseguiti dal terminale o dalla riga di comando (ad esempio, sui sistemi Windows, modificando la PATH variabile per includere la directory in cui hai installato Rake).

Copiate o clonate il campione in un repository GitHub

Per clonare il campione e inviarlo a un repository GitHub
  1. Scarica il codice di esempio dal GitHub repository o clona i repository sul tuo computer locale. Il codice di esempio è disponibile in due pacchetti:

  2. Dal repository, scegliere Fork per copiare il repository di esempio in un repository dell'account Github. Per ulteriori informazioni, consulta la documentazione. GitHub

Crea un IAM ruolo da utilizzare per l'integrazione con Jenkins

Come best practice, prendi in considerazione l'avvio di un'EC2istanza per ospitare il server Jenkins e l'utilizzo di un IAM ruolo per concedere all'istanza le autorizzazioni necessarie con cui interagire. CodePipeline

  1. Accedi a AWS Management Console e apri la console all'indirizzo. IAM https://console.aws.amazon.com/iam/

  2. Nella IAM console, nel riquadro di navigazione, scegli Ruoli, quindi scegli Crea ruolo.

  3. In Select type of trusted entity (Seleziona tipo di entità attendibile), scegli AWS servizio. In Scegli il servizio che utilizzerà questo ruolo, scegli EC2. In Seleziona il tuo caso d'uso, scegli EC2.

  4. Scegli Successivo: autorizzazioni. Nella pagina Collega policy di autorizzazione, seleziona la policy gestita AWSCodePipelineCustomActionAccess, quindi scegli Next: Tags. Scegli Prossimo: Rivedi.

  5. Nella pagina Revisione, in Nome ruolo, inserisci il nome del ruolo da creare specificamente per l'integrazione con Jenkins (ad esempio, JenkinsAccess), quindi scegli Crea ruolo.

Quando crei l'EC2istanza in cui installerai Jenkins, nel Passaggio 3: Configurazione dei dettagli dell'istanza, assicurati di scegliere il ruolo dell'istanza (ad esempio, JenkinsAccess).

Per ulteriori informazioni sui ruoli delle istanze e su AmazonEC2, consulta IAMruoli per Amazon EC2, Utilizzo IAM dei ruoli per concedere autorizzazioni alle applicazioni in esecuzione su EC2 istanze Amazon e Creazione di un ruolo per delegare le autorizzazioni a un. AWS servizio

Installa e configura Jenkins e il plugin per Jenkins CodePipeline

Per installare Jenkins e il plugin per Jenkins CodePipeline
  1. Crea un'EC2istanza in cui installare Jenkins e, nel passaggio 3: Configurazione dei dettagli dell'istanza, assicurati di scegliere il ruolo dell'istanza che hai creato (ad esempio, JenkinsAccess). Per ulteriori informazioni sulla creazione di EC2 istanze, consulta Launch an Amazon EC2 Instance nella Amazon EC2 User Guide.

    Nota

    Se disponi già di risorse Jenkins che desideri utilizzare, puoi farlo, ma devi creare un IAM utente speciale, applicare la policy AWSCodePipelineCustomActionAccess gestita a quell'utente e quindi configurare e utilizzare le credenziali di accesso per quell'utente sulla tua risorsa Jenkins. Se desideri utilizzare l'interfaccia utente di Jenkins per fornire le credenziali, configura Jenkins in modo che solo consenta. HTTPS Per ulteriori informazioni, consulta Risoluzione dei problemi CodePipeline.

  2. Installare Jenkins sull'istanza EC2. Per ulteriori informazioni, consulta la documentazione di Jenkins relativa all'installazione di Jenkins e all'avvio e all'accesso a Jenkins, oltre a details of integration with Jenkins in Integrazioni di prodotti e servizi con CodePipeline.

  3. Avviare Jenkins e sulla home page scegliere Manage Jenkins (Gestisci Jenkins).

  4. Nella pagina Manage Jenkins (Gestisci Jenkins), scegliere Manage Plugins (Gestisci plugin).

  5. Scegliere la scheda Available (Disponibile) e nella casella di ricerca Filter (Filtra), immettere AWS CodePipeline. Scegli CodePipeline Plugin for Jenkins dall'elenco e scegli Scarica ora e installa dopo il riavvio.

  6. Nella pagina Installing Plugins/Upgrades (Installazione plugin/Aggiornamenti), selezionare Restart Jenkins when installation is complete and no jobs are running (Riavvia Jenkins al termine dell'installazione e quando non ci sono processi in esecuzione).

  7. Scegliere Back to Dashboard (Torna al pannello di controllo).

  8. Nella pagina principale, scegliere New Item (Nuova voce).

  9. In Item Name, inserisci un nome per il progetto Jenkins (ad esempio, MyDemoProject). Scegliete Progetto Freestyle, quindi selezionate OK.

    Nota

    Assicurati che il nome del tuo progetto soddisfi i requisiti per CodePipeline. Per ulteriori informazioni, consulta Quote in AWS CodePipeline.

  10. Nella pagina di configurazione del progetto, selezionare la casella di controllo Execute concurrent builds if necessary (Esegui compilazioni simultanee in caso di necessità). In Source Code Management (Gestione codice sorgente), scegli AWS CodePipeline. Se hai installato Jenkins su un'EC2istanza e l'hai configurata AWS CLI con il profilo per l'IAMutente che hai creato per l'integrazione tra CodePipeline e Jenkins, lascia tutti gli altri campi vuoti.

  11. Scegli Avanzato e, in Provider, inserisci un nome per il fornitore dell'azione così come verrà visualizzata in CodePipeline (ad esempio, MyJenkinsProviderName). Assicurati che questo nome sia unico e facile da ricordare. Verrà utilizzato più avanti nel tutorial quando si aggiunge un'operazione di compilazione e ancora quando si aggiunge un'operazione di test.

    Nota

    Questo nome di azione deve soddisfare i requisiti di denominazione per le azioni in CodePipeline. Per ulteriori informazioni, consulta Quote in AWS CodePipeline.

  12. In Build Triggers, deseleziona tutte le caselle di controllo, quindi seleziona Sondaggio. SCM In Schedule (Pianificazione), immettere cinque asterischi separati da spazi, nel seguente modo:

    * * * * *

    Questo sondaggio viene eseguito ogni minuto CodePipeline .

  13. In Build (Compila), scegliere Add build step (Aggiungi fase di compilazione). Scegli Esegui shell (Amazon Linux o Ubuntu Server) Esegui comando batch (Windows Server), quindi inserisci quanto segue: RHEL

    rake
    Nota

    Verifica che il tuo ambiente sia configurato con le variabili e le impostazioni richieste per eseguire rake; in caso contrario, la compilazione non andrà a buon fine.

  14. Scegli Aggiungi azione post-compilazione, quindi scegli AWS CodePipeline Publisher. Scegliere Add (Aggiungi) e in Build Output Locations (Posizioni di output della compilazione), lasciare vuota la posizione. Questa è la configurazione predefinita. Al termine del processo di compilazione verrà creato un file compresso.

  15. Scegliere Save (Salva) per salvare il progetto Jenkins.

Passaggio 2: crea una pipeline in CodePipeline

In questa parte del tutorial viene creata una pipeline utilizzando la proceduta guidata Create Pipeline (Crea pipeline).

Per creare un CodePipeline processo di rilascio automatico
  1. Accedi AWS Management Console e apri la CodePipeline console all'indirizzo http://console.aws.amazon.com/codesuite/codepipeline/home.

  2. Se necessario, utilizzare il selettore delle regioni per modificare la regione in quella in cui si trovano le risorse della pipeline. Ad esempio, se hai creato risorse per il tutorial precedente inus-east-2, assicurati che il selettore della regione sia impostato su Stati Uniti orientali (Ohio).

    Per ulteriori informazioni sulle regioni e gli endpoint disponibili CodePipeline, consulta AWS CodePipeline endpoint e quote.

  3. Nella pagina Welcome (Benvenuto), pagina Getting started (Nozioni di base) o pagina Pipelines (Pipeline), scegliere Create pipeline (Crea pipeline).

  4. Nella pagina Step 1: Choose pipeline settings (Fase 1: scelta delle impostazioni della pipeline), in Pipeline name (Nome pipeline), immettere il nome della pipeline.

  5. Nel tipo di pipeline, scegli V1 ai fini di questo tutorial. Puoi anche scegliere V2; tuttavia, tieni presente che i tipi di tubazione differiscono per caratteristiche e prezzo. Per ulteriori informazioni, consulta Tipi di tubazioni.

  6. In Ruolo di servizio, scegli Nuovo ruolo di servizio in cui consentire CodePipeline la creazione di un ruolo di servizio. IAM

  7. Lascia i valori predefiniti delle impostazioni nella pagina Advanced settings (Impostazioni avanzate) e scegli Next (Successivo).

  8. Nella pagina Passaggio 2: Aggiungi fase di origine, in Provider di origine, scegli GitHub.

  9. In Connessione, scegli una connessione esistente o creane una nuova. Per creare o gestire una connessione per l'azione GitHub sorgente, consultaGitHub connessioni.

  10. In Step 3: Add build stage (Fase 3: aggiunta della fase di compilazione), scegliere Add Jenkins (Aggiungi Jenkins). In Nome del provider, inserisci il nome dell'azione che hai fornito nel CodePipeline Plugin per Jenkins (ad esempio MyJenkinsProviderName). Questo nome deve corrispondere esattamente al nome nel CodePipeline Plugin for Jenkins. In Server URL, inserisci l'URLEC2istanza in cui è installato Jenkins. In Nome progetto, inserisci il nome del progetto che hai creato in Jenkins, ad esempio MyDemoProject, quindi scegli Avanti.

  11. Nel passaggio 4: aggiungi la fase di distribuzione, riutilizza l' CodeDeploy applicazione e il gruppo di distribuzione in cui hai creato. Tutorial: creazione di una semplice pipeline (bucket S3) In Deploy provider (Provider di distribuzione), scegliere CodeDeploy. In Application name (Nome applicazione), immettere CodePipelineDemoApplication oppure scegliere il pulsante di aggiornamento e quindi selezionare il nome dell'applicazione dall'elenco. In Deployment group (Gruppo di distribuzione), immettere CodePipelineDemoFleet o selezionarlo dall'elenco, quindi scegliere Next (Successivo).

    Nota

    Puoi utilizzare CodeDeploy le tue risorse o crearne di nuove, ma potresti incorrere in costi aggiuntivi.

  12. In Step 5: Review (Fase 5: revisione), esaminare le informazioni e quindi scegliere Create pipeline (Crea pipeline).

  13. La pipeline viene avviata automaticamente ed esegue il codice di esempio. Puoi visualizzare i messaggi di avanzamento e di successo e di errore mentre la pipeline crea l'esempio Haml HTML e lo distribuisce in una pagina Web su ciascuna delle istanze Amazon EC2 della distribuzione. CodeDeploy

Fase 3: aggiunta di un'altra fase alla pipeline

Ora aggiungerai una fase di test e un'operazione di test alla fase che utilizza il test Jenkins incluso nel codice di esempio per stabilire se la pagina Web è dotata di contenuti. Il test è solo a scopo dimostrativo.

Nota

Se non volevi aggiungere un'altra fase alla pipeline, avresti potuto aggiungere un'operazione di test alla fase temporanea della pipeline, prima o dopo l'operazione di distribuzione.

Aggiunta di una fase di test alla pipeline

Ricerca dell'indirizzo IP di un'istanza

Per verificare l'indirizzo IP di un'istanza in cui hai distribuito il codice
  1. Quando lo stato della pipeline indica Succeeded (Riuscito), nell'area dello stato della fase Staging (Gestione temporanea) scegliere Details (Dettagli).

  2. Nella sezione Deployment Details (Dettagli distribuzione), in Instance ID (ID istanza), scegliere l'ID di una delle istanze correttamente distribuite.

  3. Copia l'indirizzo IP dell'istanza (ad esempio, 192.168.0.4). Utilizzerai questo indirizzo IP nel tuo test Jenkins.

Creazione di un progetto Jenkins per testare la distribuzione

Per creare il progetto Jenkins
  1. Nell'istanza in cui è installato Jenkins, aprire Jenkins e dalla pagina principale scegliere New Item (Nuova voce).

  2. In Item Name, inserisci un nome per il progetto Jenkins (ad esempio, MyTestProject). Scegliete Progetto Freestyle, quindi selezionate OK.

    Nota

    Assicuratevi che il nome del progetto soddisfi i CodePipeline requisiti. Per ulteriori informazioni, consulta Quote in AWS CodePipeline.

  3. Nella pagina di configurazione del progetto, selezionare la casella di controllo Execute concurrent builds if necessary (Esegui compilazioni simultanee in caso di necessità). In Source Code Management (Gestione codice sorgente), scegli AWS CodePipeline. Se hai installato Jenkins su un'EC2istanza e l'hai configurata AWS CLI con il profilo per l'IAMutente che hai creato per l'integrazione tra CodePipeline e Jenkins, lascia tutti gli altri campi vuoti.

    Importante

    Se stai configurando un progetto Jenkins che non è installato su un'EC2istanza Amazon o è installato su un'EC2istanza che esegue un sistema operativo Windows, completa i campi come richiesto dalle impostazioni dell'host proxy e della porta e fornisci le credenziali IAM dell'utente o del ruolo che hai configurato per l'integrazione tra Jenkins e. CodePipeline

  4. Scegliere Advanced (Avanzate) e in Category (Categoria), scegliere Test.

  5. In Provider, inserisci lo stesso nome che hai usato per il progetto di compilazione (ad esempio, MyJenkinsProviderName). Utilizzerai questo nome quando aggiungerai l'azione di test alla tua pipeline più avanti in questo tutorial.

    Nota

    Questo nome deve soddisfare i requisiti di CodePipeline denominazione per le azioni. Per ulteriori informazioni, consulta Quote in AWS CodePipeline.

  6. In Build Triggers, deseleziona tutte le caselle di controllo, quindi seleziona Sondaggio. SCM In Schedule (Pianificazione), immettere cinque asterischi separati da spazi, nel seguente modo:

    * * * * *

    Questo sondaggio viene eseguito ogni minuto CodePipeline .

  7. In Build (Compila), scegliere Add build step (Aggiungi fase di compilazione). Se esegui la distribuzione su istanze Amazon Linux o Ubuntu ServerRHEL, scegli Execute shell. Quindi inserisci quanto segue, dove l'indirizzo IP è l'indirizzo dell'EC2istanza che hai copiato in precedenza:

    TEST_IP_ADDRESS=192.168.0.4 rake test

    Se esegui la distribuzione su istanze di Windows Server, scegli Esegui comando batch, quindi inserisci quanto segue, dove l'indirizzo IP è l'indirizzo dell'EC2istanza copiata in precedenza:

    set TEST_IP_ADDRESS=192.168.0.4 rake test
    Nota

    Il test presuppone la porta predefinita 80. Se vuoi specificare una porta diversa, aggiungi un'istruzione di test della porta, come segue:

    TEST_IP_ADDRESS=192.168.0.4 TEST_PORT=8000 rake test
  8. Scegli Aggiungi azione post-compilazione, quindi scegli Publisher.AWS CodePipeline Non scegliere Add (Aggiungi).

  9. Scegliere Save (Salva) per salvare il progetto Jenkins.

Creazione di una quarta fase

Per aggiungere una fase alla pipeline che include l'operazione di test Jenkins
  1. Accedi AWS Management Console e apri la CodePipeline console all'indirizzo http://console.aws.amazon.com/codesuite/codepipeline/home.

  2. In Nome, scegli il nome della pipeline che hai creato, MySecondPipeline.

  3. Nella pagina dei dettagli della pipeline, scegliere Edit (Modifica).

  4. Nella pagina Edit (Modifica) scegliere + Stage (+ Fase) per aggiungere una fase immediatamente dopo quella di compilazione.

  5. Nel campo del nome della nuova fase, immetti un nome (ad esempio Testing), quindi scegli + Add Action (+ Aggiungi operazione).

  6. In Nome azione, immettete MyJenkinsTest-Action. In Test provider, scegli il nome del provider che hai specificato in Jenkins (ad esempio, MyJenkinsProviderName). In Nome progetto, inserisci il nome del progetto che hai creato in Jenkins (ad esempio, MyTestProject). In Input artifacts, scegli l'artefatto dalla build Jenkins il cui nome predefinito è BuildArtifact, quindi scegli Fine.

    Nota

    Poiché l'operazione di test Jenkins funziona sull'applicazione creata nella fase di compilazione di Jenkins, utilizza l'artefatto di compilazione per l'artefatto di input all'operazione di test.

    Per ulteriori informazioni sugli artefatti di input e di output e sulla struttura delle pipeline, consulta CodePipeline riferimento alla struttura della tubazione.

  7. Nella pagina Edit (Modifica), scegliere Save pipeline changes (Salva le modifiche alla pipeline) Nella casella di dialogo Save pipeline changes (Salva modifiche della pipeline), scegliere Save and continue (Salva e continua).

  8. Anche se la nuova fase è stata aggiunta alla pipeline, viene visualizzato lo stato No executions yet (Ancora nessun esecuzione) per la nuova fase, perché le modifiche non hanno attivato un'altra esecuzione della pipeline. Per eseguire l'esempio nella pipeline rivista, nella pagina dei dettagli della pipeline, scegli Release change.

    La visualizzazione della pipeline mostra le fasi e le operazioni nella pipeline e lo stato della revisione attraverso le quattro fasi. Il tempo necessario per l'esecuzione di tutte le fasi della pipeline dipende dalle dimensioni degli artefatti, dalla complessità delle operazioni di compilazione e test e da altri fattori.

Fase 4: Eliminazione delle risorse

Dopo aver completato questo tutorial, devi eliminare la pipeline e le risorse utilizzate per evitare che ti venga addebitato un costo per l'utilizzo continuo di tali risorse. Se non intendi continuare a utilizzare CodePipeline, elimina la pipeline, quindi l' CodeDeploy applicazione e le EC2 istanze Amazon associate e, infine, il bucket Amazon S3 utilizzato per archiviare gli artefatti. Dovresti anche valutare se eliminare altre risorse, come il GitHub repository, se non intendi continuare a utilizzarle.

Per eliminare le risorse utilizzate in questo tutorial
  1. Apri una sessione terminale sul tuo computer Linux, macOS o Unix locale o un prompt dei comandi sul tuo computer Windows locale ed esegui il delete-pipeline comando per eliminare la pipeline che hai creato. Per MySecondPipeline, immettere il comando seguente:

    aws codepipeline delete-pipeline --name "MySecondPipeline"

    Questo comando non restituisce alcun risultato.

  2. Per ripulire CodeDeploy le risorse, segui le istruzioni in Pulizia.

  3. Per ripulire le risorse dell'istanza, elimina l'EC2istanza in cui hai installato Jenkins. Per ulteriori informazioni, consulta Pulizia di un'istanza.

  4. Se non intendi creare altre pipeline o CodePipeline riutilizzarle, elimina il bucket Amazon S3 usato per archiviare gli elementi per la tua pipeline. Per eliminare il bucket, segui le istruzioni relative all'eliminazione di un bucket.

  5. Se non si desidera riutilizzare le altre risorse per questa pipeline, è consigliabile eliminarle seguendo le istruzioni per quella particolare risorsa. Ad esempio, se desideri eliminare il repository, segui le istruzioni in Eliminazione di un GitHub repository sul sito Web. GitHub