Questo tutorial ti mostra come:
- Crea un sistema di integrazione continua Jenkins per eseguire le build utilizzando agenti Jenkins on demand in Compute Engine.
- Archivia gli artefatti della build in Cloud Storage.
- Applica un criterio del ciclo di vita per spostare gli artefatti delle build meno recenti in Cloud Storage in opzioni di archiviazione meno costose.
Architettura
Il seguente diagramma illustra l'architettura del tutorial.
Nel diagramma, viene aggiunto un account di servizio a Jenkins per essere in grado di creare istanze di agente ed eseguire il push degli artefatti in Cloud Storage per l'archiviazione a lungo termine. Jenkins esegue il provisioning delle istanze al volo durante l'esecuzione delle build. Man mano che gli artefatti della build diventano meno recenti, vengono spostati attraverso varie classi di archiviazione per limitare i costi di conservazione.
Obiettivi
- Crea un'immagine di base con Packer per eseguire le build di Jenkins.
- Esegui il provisioning di Jenkins utilizzando Cloud Marketplace.
- Configura Jenkins per il deployment di agenti di build temporanei.
- Caricare gli artefatti delle build in Cloud Storage.
- Configura criteri del ciclo di vita per ottimizzare i costi di Cloud Storage.
Costi
In questo documento vengono utilizzati i seguenti componenti fatturabili di Google Cloud:
- Compute Engine
- Cloud Storage
Per generare una stima dei costi in base all'utilizzo previsto,
utilizza il Calcolatore prezzi.
Utilizza il Calcolatore prezzi per generare una stima dei costi in base all'utilizzo previsto.
Prima di iniziare
- Accedi al tuo account Google Cloud. Se non conosci Google Cloud, crea un account per valutare le prestazioni dei nostri prodotti in scenari reali. I nuovi clienti ricevono anche 300 $di crediti gratuiti per l'esecuzione, il test e il deployment dei carichi di lavoro.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Compute Engine.
-
Nella pagina del selettore di progetti della console Google Cloud, seleziona o crea un progetto Google Cloud.
-
Assicurati che la fatturazione sia attivata per il tuo progetto Google Cloud.
-
Attiva l'API Compute Engine.
Configurazione dell'ambiente
In questa sezione configurerai l'infrastruttura e le identità necessarie per completare il tutorial. Esegui il resto del tutorial in Cloud Shell.
Configura IAM
Creare un account di servizio Identity and Access Management (IAM) per delegare le autorizzazioni a Jenkins. Questo account consente a Jenkins di archiviare dati in Cloud Storage e avviare istanze in Compute Engine. Jenkins esegue le build nelle istanze temporanee e archivia gli artefatti delle build in Cloud Storage.
Crea un account di servizio
Crea l'account di servizio:
gcloud iam service-accounts create jenkins --display-name jenkins
Archivia l'indirizzo email dell'account di servizio e l'ID progetto Google Cloud attuale nelle variabili di ambiente da utilizzare nei comandi successivi:
export SA_EMAIL=$(gcloud iam service-accounts list \ --filter="displayName:jenkins" --format='value(email)') export PROJECT=$(gcloud info --format='value(config.project)')
Associa i seguenti ruoli al tuo account di servizio:
gcloud projects add-iam-policy-binding $PROJECT \ --role roles/storage.admin --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/compute.instanceAdmin.v1 \ --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/compute.networkAdmin \ --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/compute.securityAdmin \ --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/iam.serviceAccountActor \ --member serviceAccount:$SA_EMAIL
Scarica la chiave dell'account di servizio
Ora che hai concesso all'account di servizio le autorizzazioni appropriate, devi creare e scaricare la relativa chiave. Conserva la chiave in un luogo sicuro. Lo utilizzerai in seguito durante la configurazione del plug-in JClouds per l'autenticazione con l'API Compute Engine.
Crea il file di chiave:
gcloud iam service-accounts keys create jenkins-sa.json --iam-account $SA_EMAIL
In Cloud Shell, fai clic su Altro more_vert, quindi su Scarica file.
Digita
jenkins-sa.json
.Fai clic su Scarica per salvare il file in locale.
Crea un'immagine agente Jenkins
Il passaggio successivo consiste nel creare un'immagine di Compute Engine riutilizzabile che contiene il software e gli strumenti necessari per l'esecuzione come esecutore di Jenkins.
Crea una chiave SSH per Cloud Shell
Più avanti in questo tutorial userai Packer per creare le tue immagini, che richiede il comando ssh
per comunicare con le istanze della build. Per abilitare l'accesso SSH, crea e carica una chiave SSH in Cloud Shell:
Creare una coppia di chiavi SSH. Se ne esiste già una, il comando utilizza questa coppia di chiavi, altrimenti ne crea una nuova:
ls ~/.ssh/id_rsa.pub || ssh-keygen -N ""
Aggiungi la chiave SSH pubblica di Cloud Shell ai metadati del tuo progetto:
gcloud compute project-info describe \ --format=json | jq -r '.commonInstanceMetadata.items[] | select(.key == "ssh-keys") | .value' > sshKeys.pub echo "$USER:$(cat ~/.ssh/id_rsa.pub)" >> sshKeys.pub gcloud compute project-info add-metadata --metadata-from-file ssh-keys=sshKeys.pub
Crea l'immagine di riferimento
Il passaggio successivo consiste nell'utilizzare Packer per creare un'immagine di macchina virtuale (VM) di base per i tuoi agenti di build, che fungono da esecutori di build temporanei in Jenkins. L'agente Jenkins di base richiede solo
l'installazione di Java. Puoi personalizzare l'immagine aggiungendo comandi shell nella sezione provisioners
della configurazione di Packer o aggiungendo altri provisioner per la creazione di pacchetti.
In Cloud Shell, scarica e decomprimi la release più recente di Packer. L'esempio seguente utilizza Packer 1.7.10. Puoi visitare il sito web di Hashicorp per sapere se esiste una versione più recente:
wget https://releases.hashicorp.com/packer/1.7.10/packer_1.7.10_linux_amd64.zip unzip packer_1.7.10_linux_amd64.zip
Crea il file di configurazione per le build di immagini Packer:
export PROJECT=$(gcloud info --format='value(config.project)') cat > jenkins-agent.json <<EOF { "builders": [ { "type": "googlecompute", "project_id": "$PROJECT", "source_image_family": "ubuntu-2004-lts", "source_image_project_id": "ubuntu-os-cloud", "zone": "us-central1-a", "disk_size": "50", "image_name": "jenkins-agent-{{timestamp}}", "image_family": "jenkins-agent", "ssh_username": "ubuntu" } ], "provisioners": [ { "type": "shell", "inline": ["sudo apt-get update && sudo apt-get install -y default-jdk"] } ] } EOF
Crea l'immagine eseguendo Packer:
./packer build jenkins-agent.json
Al completamento della build, il nome dell'immagine disco viene visualizzato nel formato
jenkins-agent-[TIMESTAMP]
, dove[TIMESTAMP]
è l'epoca in cui è stata avviata la build.==> Builds finished. The artifacts of successful builds are: --> googlecompute: A disk image was created: jenkins-agent-1612997575
Installazione di Jenkins
In questa sezione utilizzerai Cloud Marketplace per eseguire il provisioning di un'istanza di Jenkins. Puoi personalizzare l'istanza in modo da utilizzare l'immagine dell'agente creata nella sezione precedente.
Vai alla soluzione Cloud Marketplace per Jenkins.
Fai clic su Launch .
Modifica il campo Tipo di macchina in 4 vCPU, 15 GB di memoria, n1-standard-4.
Fai clic su Esegui il deployment e attendi che il provisioning dell'istanza di Jenkins termini. Al termine, vedrai:
Apri l'istanza di Jenkins nel browser facendo clic sul link Indirizzo del sito.
Accedi a Jenkins utilizzando le opzioni Utente amministratore e Password amministratore visualizzate nel riquadro dei dettagli.
L'istanza Jenkins è ora pronta per essere utilizzata.
Configurazione dei plug-in Jenkins
Jenkins richiede plug-in per creare agenti on demand in Compute Engine e per archiviare gli artefatti in Cloud Storage. Devi installare e configurare questi plug-in.
Installazione di plug-in
- Nell'interfaccia utente di Jenkins, seleziona Manage Jenkins.
- Fai clic su Gestisci plug-in.
- Fai clic sulla scheda Disponibile.
Utilizza la barra dei filtri per trovare i seguenti plug-in e seleziona le caselle corrispondenti:
- Plug-in Compute Engine
- Plug-in Cloud Storage
L'immagine seguente mostra il plug-in di Cloud Storage selezionato:
Fai clic su Scarica ora e installa dopo il riavvio.
Fai clic sulla casella di controllo Riavvia Jenkins al termine dell'installazione e quando nessun job è in esecuzione. Jenkins si riavvia e completa le installazioni dei plug-in.
Crea credenziali plug-in
Devi creare Google Credentials
per i tuoi nuovi plug-in:
- Accedi di nuovo a Jenkins e fai clic su Manage Jenkins.
- Fai clic su Credentials (Credenziali).
- Fai clic su Jenkins in Store.
- Nel riquadro principale dell'interfaccia utente, fai clic su Global credentials (senza restrizioni).
Crea le credenziali Google:
- Fai clic su Add Credentials (Aggiungi credenziali).
- Imposta Tipo su Account di servizio Google da chiave privata.
- Nel campo Nome progetto, inserisci il tuo ID progetto Google Cloud.
- Fai clic su Scegli file.
- Seleziona il file
jenkins-sa.json
che hai scaricato in precedenza da Cloud Shell. Fai clic su Ok.
Fai clic su Jenkins.
Configura il plug-in di Compute Engine
Configura il plug-in di Compute Engine con le credenziali che utilizza per eseguire il provisioning delle istanze dell'agente.
- Fai clic su Gestisci Jenkins.
- Fai clic su Gestisci nodi e nuvole.
- Fai clic su Configura cloud.
- Fai clic su Add a new cloud (Aggiungi un nuovo cloud).
- Fai clic su Compute Engine.
Configura le impostazioni seguenti e sostituisci
[YOUR_PROJECT_ID]
con il tuo ID progetto Google Cloud:- Nome:
gce
- ID progetto:
[YOUR_PROJECT_ID]
- Limite di istanza:
8
- Nome:
Scegli l'account di servizio dall'elenco a discesa Credenziali account di servizio. È indicato come ID progetto Google Cloud.
Configura le configurazioni delle istanze Jenkins
Ora che il plug-in di Compute Engine è configurato, puoi configurare le configurazioni dell'istanza Jenkins per le varie configurazioni della build.
- Nella pagina Configura cloud, fai clic su Aggiungi add per Configurazioni delle istanze.
Inserisci le seguenti impostazioni Generali:
- Nome:
ubuntu-2004
- Descrizione:
Ubuntu agent
- Etichette:
ubuntu-2004
- Nome:
Inserisci quanto segue per le impostazioni di geolocalizzazione:
- Regione<:
us-central1
- Zona:
us-central1-f
- Regione<:
Fai clic su Avanzate.
In Configurazione macchina, scegli Tipo di macchina su n1-standard-1.
In Networking, scegli le seguenti impostazioni:
- Rete: lascia l'impostazione predefinita.
- Subnet: lascia l'impostazione predefinita.
- Seleziona Collegare IP esterno?.
Seleziona quanto segue per le impostazioni Disco di avvio:
- Per Progetto immagine, scegli il tuo progetto Google Cloud.
- Per Nome immagine, seleziona l'immagine che hai creato in precedenza utilizzando Packer.
Fai clic su Salva per mantenere le modifiche alla configurazione.
Creazione di un job Jenkins per testare la configurazione
Jenkins è configurato per avviare automaticamente un'istanza quando viene attivato un job che richiede un agente con l'etichetta ubuntu-2004
. Creare un job
che verifichi se la configurazione funziona come previsto.
- Fai clic su Crea nuovo job nell'interfaccia di Jenkins.
- Inserisci
test
come nome dell'elemento. - Fai clic su Progetto freestyle, quindi su OK.
- Seleziona le caselle Esegui build simultanee se necessario e Limita dove può essere eseguito il progetto.
- Nel campo Espressione etichetta, inserisci
ubuntu-2004
. - Nella sezione Crea, fai clic su Aggiungi passaggio di build.
- Fai clic su Esegui Shell.
Nella casella di comando, inserisci una stringa di test:
echo "Hello world!"
Fai clic su Salva.
Fai clic su Crea ora per avviare una build.
Caricamento degli artefatti delle build in Cloud Storage
Potrebbe essere opportuno archiviare gli artefatti della build per analisi o test futuri. Configura il job Jenkins per generare un artefatto e caricarlo in Cloud Storage. Il log di build viene caricato nello stesso bucket.
In Cloud Shell, crea un bucket di archiviazione per i tuoi artefatti:
export PROJECT=$(gcloud info --format='value(config.project)') gsutil mb gs://$PROJECT-jenkins-artifacts
Nell'elenco dei job nella UI di Jenkins, fai clic su test.
Fai clic su Configura.
In Crea, imposta il campo di testo Comando su:
env > build_environment.txt
In Azioni post-build, fai clic su Aggiungi azione post-creazione.
Fai clic su Cloud Storage Plugin.
Nel campo Posizione archiviazione, inserisci il percorso dell'artefatto, sostituendo l'ID progetto Google Cloud con
[YOUR_PROJECT_ID]
:gs://[YOUR_PROJECT_ID]-jenkins-artifacts/$JOB_NAME/$BUILD_NUMBER
Fai clic su Aggiungi operazione.
Fai clic su Caricamento classico.
Nel campo Pattern file, inserisci
build_environment.txt
.Nel campo Posizione archiviazione, inserisci il tuo percorso di archiviazione sostituendo l'ID progetto Google Cloud con
[YOUR_PROJECT_ID]
:gs://[YOUR_PROJECT_ID]-jenkins-artifacts/$JOB_NAME/$BUILD_NUMBER
Fai clic su Salva.
Fai clic su Crea ora per iniziare una nuova build. La build viene eseguita sull'istanza Compute Engine di cui hai eseguito il provisioning in precedenza. Una volta completata, la build carica il file dell'artefatto,
build_environment.txt
, nel bucket Cloud Storage configurato.In Cloud Shell, visualizza l'artefatto della build utilizzando
gsutil
:export PROJECT=$(gcloud info --format='value(config.project)') gsutil cat gs://$PROJECT-jenkins-artifacts/test/2/build_environment.txt
Configurazione della gestione del ciclo di vita degli oggetti
È più probabile che tu acceda agli artefatti della build recenti. Per risparmiare sui costi degli oggetti a cui si accede raramente, usa la gestione del ciclo di vita degli oggetti per spostare i tuoi artefatti da classi di archiviazione con prestazioni più elevate a classi di archiviazione con costi più bassi e a latenza più elevata.
In Cloud Shell, crea il file di configurazione del ciclo di vita per eseguire la transizione di tutti gli oggetti nello spazio di archiviazione Nearline dopo 30 giorni e gli oggetti Nearline allo spazio di archiviazione Coldline dopo 365 giorni.
cat > artifact-lifecycle.json <<EOF { "lifecycle": { "rule": [ { "action": { "type": "SetStorageClass", "storageClass": "NEARLINE" }, "condition": { "age": 30, "matchesStorageClass": ["MULTI_REGIONAL", "STANDARD", "DURABLE_REDUCED_AVAILABILITY"] } }, { "action": { "type": "SetStorageClass", "storageClass": "COLDLINE" }, "condition": { "age": 365, "matchesStorageClass": ["NEARLINE"] } } ] } } EOF
Carica il file di configurazione nel bucket di archiviazione degli artefatti:
export PROJECT=$(gcloud info --format='value(config.project)') gsutil lifecycle set artifact-lifecycle.json gs://$PROJECT-jenkins-artifacts
Esegui la pulizia
Elimina tutti gli agenti Jenkins ancora in esecuzione:
gcloud compute instances list --filter=metadata.jclouds-group=ubuntu-2004 --uri | xargs gcloud compute instances delete
Utilizzando Cloud Deployment Manager, elimina l'istanza di Jenkins:
gcloud deployment-manager deployments delete jenkins-1
Elimina il bucket Cloud Storage:
export PROJECT=$(gcloud info --format='value(config.project)') gsutil -m rm -r gs://$PROJECT-jenkins-artifacts
Elimina l'account di servizio:
export SA_EMAIL=$(gcloud iam service-accounts list --filter="displayName:jenkins" --format='value(email)') gcloud iam service-accounts delete $SA_EMAIL
Passaggi successivi
- Scopri di più sul deployment continuo con Jenkins
- Esegui il deployment di Jenkins su Kubernetes Engine
- Esplora le architetture di riferimento, i diagrammi e le best practice su Google Cloud. Visita il nostro Cloud Architecture Center.