Personalizzazione delle pipeline DevSecOps per i principianti

Imparate le basi per l'adozione di DevSecOps e l'avvio della vostra prima applicazione o microservizio.

Informazioni sulle toolchain DevSecops

Hai scoperto e testato IBM Cloud DevSecOps Continuous Integration (CI), Continuous Deployment (CD) e Continuous Compliance (CC), catene di strumenti che implementano le best practice DevSecOps e gli strumenti di sicurezza.

Ora siete pronti a integrare la vostra applicazione o microservizio e ad adottare DevSecOps.

Prima di iniziare

Per integrare un'applicazione in una toolchain DevSecOps sono necessarie le seguenti risorse:

  • Un repository Git di codice sorgente dell'applicazione che contiene il tuo codice dell'applicazione, a cui spesso si fa riferimento come "repository dell'applicazione".
  • Un file .pipeline-config.yaml. Questo file è il file di configurazione principale utilizzato dalle pipeline CI, CD e CC per personalizzare qualsiasi fase del processo di esecuzione della pipeline. Inizia con un file .pipeline-config.yaml di esempio, che puoi scaricare e personalizzare in base alle tue necessità. Tutte le fasi tranne la fase iniziale possono essere personalizzate utilizzando il file .pipeline-config.yaml. Il file attiva ed esegue gli script personalizzati per creare, verificare e distribuire l'applicazione. È possibile modificare il nome del file .pipeline-config.yaml o utilizzare file differenti per pipeline o trigger differenti. Assicurati che i valori del parametro nella tua pipeline o trigger corrispondano al tuo file di configurazione. Per ulteriori informazioni, vedi Parametri della pipeline.

IBM Cloud ha i seguenti modelli DevSecOps per iniziare:

Come le pipeline DevSecOps utilizzano i repository

Per costruire, testare e distribuire l'applicazione, le pipeline DevSecOps utilizzano due repository:

  • app-repo: il repository dell'applicazione, che contiene il codice origine per l'applicazione.
  • config-repo: il repository di configurazione, che contiene gli script e i file YAML di configurazione della pipeline.

Nell'applicazione di esempioDevSecOps, questi due repository sono gli stessi. La maggior parte di coloro che adottano DevSecOps inizia con questo modello. Ma, man mano che si onboarding di più microservizi, potrebbe essere necessario un repository di configurazione della pipeline separato e dedicato. Poiché il repository dell'applicazione e il repository di configurazione sono gli stessi nell'app di esempio, il repository viene clonato due volte quando vengono eseguite le pipeline, il che può causare errori. Pertanto, è una buona pratica avere un repository di configurazione separato per ospitare file di configurazione e script che possono essere condivisi e riutilizzati tra diverse toolchain e pipeline DevSecOps. Per ulteriori informazioni sulla personalizzazione del repository di configurazione, consultare la procedura di personalizzazione avanzata.

DevSecOps gli script considerano app-repo e config-repo come due archivi separati. Gli script clonano due volte i repository durante la fase iniziale della pipeline. Questi cloni vengono indicati come app-repo e one-pipeline-config-repo. Ogni fase viene eseguita nel contesto di config repo.

Caricamento di un'applicazione

Per semplicità, prima di continuare, creare e testare una catena di strumenti DevSecOps CI con l'applicazione Node di esempio.

Esistono tre modi principali per inserire la prima applicazione in una catena di strumenti DevSecOps CI esistente:

  • Opzione 1: aggiungi il tuo repository dell'applicazione alla toolchain e utilizza il repository dell'applicazione di esempio come repository di configurazione.
  • Opzione 2: sostituisci il repository dell'applicazione di esempio con il tuo repository dell'applicazione.
  • Opzione 3: aggiungi il tuo repository dell'applicazione alla toolchain e utilizza un repository di configurazione dedicato. Per ulteriori informazioni su questa opzione, consultare la procedura di personalizzazione avanzata.

Le catene di strumenti DevSecOps utilizzano i repository Gitlab gestiti da IBM, noti anche come GRIT. È possibile utilizzare altri provider Git. Il tuo repository dell'applicazione potrebbe essere ospitato su GitHub o Gitlab, ad esempio.

Opzione 1: aggiungi il tuo repository dell'applicazione e utilizza il repository dell'applicazione di esempio come repository di configurazione

Per aggiungere il repository dell'applicazione alla toolchain e utilizzare il repository dell'applicazione di esempio come repository di configurazione, completare la seguente procedura:

  1. Nella console IBM Cloud, fare clic sull'icona Menu Icona Menu > Automazione piattaforma > Catene di strumenti e selezionare la catena di strumenti che si desidera modificare.
  2. Fai clic su Aggiungi.
  3. Seleziona dove è ospitato il tuo repository dell'applicazione, Gitlab o GitHub.
  4. Utilizzare il server predefinito o aggiungerne uno nuovo.
  5. Inserisci l' URL e del server personalizzato e il token di accesso personale.
  6. Fai clic su Crea integrazione.
  7. Inserisci il tuo repository del codice sorgente dell'applicazione URL.
  8. Fai clic su Crea integrazione.

Successivamente, specifica il repository dell'applicazione di esempio come tuo repository di configurazione completando la seguente procedura:

  1. Nella console IBM Cloud, fare clic sull'icona Menu Icona Menu > Automazione piattaforma > Catene di strumenti e selezionare la catena di strumenti che si desidera modificare.
  2. Fare clic su pr - pipeline.
  3. Fare clic su Impostazioni e andare alla scheda Proprietà dell'ambiente.
  4. Modificare il valore della proprietà " pipeline-config-repo " in modo che punti all'archivio dell'applicazione di esempio URL.
  5. Tornare alla toolchain CI.
  6. Fare clic su ci - pipeline.
  7. Fare clic su Impostazioni e andare alla scheda Proprietà dell'ambiente.
  8. Modificare il valore della proprietà " pipeline-config-repo " in modo che punti all'archivio dell'applicazione di esempio URL.

Le tue pipeline CI ora utilizzano il repository dell'applicazione di esempio pipeline-config come tuo repository di configurazione.

Opzione 2: sostituire il repository dell'applicazione di esempio con il proprio repository dell'applicazione

Per sostituire il repository dell'applicazione di esempio con il tuo repository dell'applicazione, completa la seguente procedura:

  1. Nella console IBM Cloud, fare clic sull'icona Menu Icona Menu > Automazione piattaforma > Catene di strumenti e selezionare la catena di strumenti CI che si desidera modificare.
  2. Individuare il repository del codice origine dell'applicazione di esempio e selezionare Configura.
  3. Sostituisci il repository URL con il repository del codice sorgente dell'applicazione URL.
  4. Fai clic su Salva integrazione.

Dopo aver sostituito il repository dell'applicazione di esempio, assicurati che il nuovo repository dell'applicazione contenga un file .pipeline-config.yaml e gli script corrispondenti. Copiare il file .pipeline-config.yaml e gli script dal repository dell'applicazione di esempio al repository dell'applicazione oppure utilizzare questo file di configurazione di esempio.

Configurazione delle pipeline CI

Dopo aver aggiunto il repository dell'applicazione, è necessario configurare le pipeline CI per utilizzare il nuovo repository.

Configurazione dei trigger della pipeline

I trigger predefiniti utilizzano il repository dell'applicazione di esempio, quindi devi aggiornarli per utilizzare il tuo repository dell'applicazione. Verifica le impostazioni del trigger e modificale se necessario per assicurarti che tutti i trigger puntino al tuo repository dell'applicazione. Completa i seguenti passi:

  1. Nella console IBM Cloud, fare clic sull'icona Menu Icona Menu > Automazione piattaforma > Catene di strumenti e selezionare la catena di strumenti CI che si desidera modificare.
  2. Fare clic su pr - pipeline.
  3. Modifica l'attivatore PR ( Git ) e fornisci il tuo repository dell'applicazione URL e il ramo.
  4. Fare clic su Salva.
  5. Torna alla tua toolchain CI e fai clic su ci - pipeline.
  6. Modifica l' Git a CI Trigger e fornisci il repository dell'applicazione URL e il ramo. Assicurarsi che il nome dell'applicazione sia corretto nella sezione Proprietà.
  7. Fare clic su Salva.
  8. Modificare il Trigger manuale. Nella sezione Proprietà, assicurati che il nome dell'app sia corretto.
  9. Assicurati che le proprietà del repository e del ramo siano corrette e puntino al tuo repository dell'app.

Configurazione del file .pipeline-config.yaml

Copia il file .pipeline-config.yaml dal repository dell'applicazione di esempio al tuo repository dell'applicazione o utilizza questo file di configurazione di esempio.

Per pr-pipeline e ci-pipeline, verificare che i parametri pipeline-config, pipeline-config-branch e pipeline-config-repo siano impostati correttamente e corrispondano alla configurazione. Se questi parametri non sono impostati correttamente, potresti eseguire il commit delle modifiche al ramo errato, il che provoca un errore con la tua pipeline.

Se la variabile pipeline-config-repo non è impostata, le pipeline DevSecOps assumono che si tratti dello stesso repository del codice sorgente dell'applicazione.

Utilizzo di script personalizzati con DevSecOps

Il file 'pipeline-config.yaml è il componente chiave che orchestra e personalizza il comportamento della pipeline DevSecOps. Il file utilizza script per creare, verificare e distribuire l'applicazione. Il file definisce come sono configurati gli stage e quali script vengono eseguiti. Per ulteriori informazioni, consultare Script personalizzati.

Esistono due categorie principali di script utilizzati dalle pipeline DevSecOps:

  • Script relativi all'applicazione utilizzati per creare, verificare e distribuire l'applicazione. Questi script sono sotto la vostra responsabilità e non rientrano nell'ambito del supporto DevSecOps. Poiché questi script non hanno un'implementazione predefinita, è necessario aggiungerli all'applicazione o al repository di configurazione. Potrebbe essere necessario estrarre gli script da Jenkins o da un'altra origine.
  • Script di sicurezza e conformità che eseguono scansioni di sicurezza e conformità. La maggior parte viene con gli script predefiniti che è possibile sovrascrivere per utilizzare la propria implementazione personalizzata.

Ad eccezione della fase iniziale, ogni fase di una pipeline CI, CD o CC può essere personalizzata con i propri script per sovrascrivere l'implementazione predefinita della fase. La fase iniziale non può essere personalizzata con i propri script.

Sebbene gli script Bash siano forniti come esempi, puoi creare, verificare e distribuire la tua applicazione utilizzando altri linguaggi come Python o Go. Assicurati di utilizzare il image corretto per ogni fase. Fare riferimento alle immaginiDocker nella sezione pipeline DevSecOps.

Fare riferimento alla tabella Fasi e attività che riepiloga le diverse fasi della pipeline CI. La tabella fornisce inoltre informazioni consolidate che indicano se lo stage dispone di un'implementazione di riferimento predefinita, se può essere personalizzato o ignorato o se è presente una raccolta di prove esplicita richiesta dall'esecuzione dello stage.

Migrazione da Jenkins o Travis a DevSecOps

La maggior parte di chi adotta DevSecOps non parte dal nulla. La maggior parte degli adottanti dispone già di processi di integrazione e di distribuzione continui, insieme a una corrispondente libreria di script. Questi processi sono di solito implementati utilizzando Jenkins, Travis o qualche altra piattaforma.

Punti chiave per la migrazione a DevSecOps:

  • Il file di configurazione pipeline-config.yaml deve riflettere il modo in cui le pipeline CI e CD sono attualmente orchestrate. Le fasi e i passaggi devono essere mappati alle fasi della pipelineDevSecOps.
  • È necessario utilizzare gli stessi script, le stesse immagini di base e le stesse variabili già presenti.
  • Le proprietà del segreto devono essere migrate in un archivio segreto.
  • Le proprietà non segrete devono essere aggiunte come proprietà pipeline o trigger.

Utilizzo della modalit ... di sviluppo

È possibile utilizzare la modalità di sviluppo per le pipeline CI e CD per verificare l'implementazione del file .pipeline-config.yaml e degli script. La pipeline della modalità di sviluppo non esegue alcuna attività correlata alla sicurezza o alla conformità, il che riduce il runtime per la pipeline. Per ulteriori informazioni, vedi Esecuzione di pipeline in modalità di sviluppo.

Utilizzare la modalità di sviluppo solo per scopi di sviluppo. La modalità di sviluppo non sostituisce le pipeline CI e CD ufficiali di DevSecOps, che rimangono le implementazioni di riferimento.

Configurazione della pipeline CD

Nel flusso di lavoroDevSecOps di integrazione e distribuzione continua, la pipeline CI invia gli aggiornamenti al repository dell'inventario durante la fase " deploy-release della pipeline CI. Per ulteriori informazioni, vedi lo script release.sh di esempio.

In questo flusso di lavoro, più trigger CI e diverse toolchain DevSecOps CI possono contribuire allo stesso repository di inventario.

Contrariamente alla pipeline CI, lo script di distribuzione utilizzato dalla pipeline CD deve essere adattato dai tuoi script correnti in Jenkins, Travis o in qualche altra piattaforma per utilizzare le voci nel repository di inventario.

Questo codice di esempio mostra come richiamare le informazioni dall'inventario e utilizzarle per eseguire una distribuzione Kubernetes.

Posizione degli script DevSecOps

Le pipeline DevSecOps sono dotate di strumenti di sicurezza e di scansione predefiniti e di script associati.

Ad esempio, l'inizio di un log dello stage fa riferimento allo script predefinito:

scan-artifact:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
  dind: true
  dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
  abort_on_failure: false
  image_pull_policy: IfNotPresent
  script: |
    #!/bin/sh

    "/opt/commons/scan-artifact/scan.sh"

/opt/commons/scan-artifact/scan.sh è lo script predefinito.

La pipeline DevSecOps fornisce il percorso della cartella principale della libreria commons in una variabile d'ambiente chiamata " COMMONS_PATH, disponibile in tutti i task e le fasi. Per accedere a uno script creato nell'immagine base di conformità, utilizzare la variabile COMMONS_PATH con la cartella di script necessaria:

source "${COMMONS_PATH}/<script folder in commons>/<script file name>

Fare riferimento alla tabella Fasi e attività che riepiloga le varie fasi della pipeline CD. La tabella fornisce inoltre informazioni consolidate che indicano se lo stage ha un'implementazione di riferimento predefinita, se può essere personalizzata o ignorata o se è richiesta una raccolta di prove esplicite dall'esecuzione dello stage.

Proprietà ambiente

Le pipeline DevSecOps sono dotate di proprietà dell'ambiente predefinite, ma è possibile aggiungere tutte le proprietà personalizzate necessarie. È possibile accedere a questi valori di proprietà negli script utilizzando get_env, comando.

Dopo aver aggiunto la tua proprietà e il suo valore predefinito facoltativo alla pipeline o al trigger, utilizza il comando get_env nel tuo script per recuperare il valore della proprietà. Il seguente esempio richiama il valore della proprietà my-variable:

MY_VARIABLE=$(get_env my-variable "")

È anche possibile sovrascrivere dinamicamente il valore di una proprietà in uno script utilizzando set_env, comando. Il seguente esempio sovrascrive il valore nella proprietà my-variable:

set_env my-variable new-value

Fasi ignorate

Alcune fasi potrebbero essere irrilevanti. Ad esempio, potresti non creare alcuna immagine Docker oppure non hai ancora implementato i test di accettazione. Se si desidera ignorare uno stage, è possibile modificare il file .pipeline-config.yaml per includere exit 0 o impostare la variabile skip su true.

Il seguente esempio aggiunge exit 0 per ignorare una fase:

scan-artifact:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
  dind: true
  dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
  abort_on_failure: false
  image_pull_policy: IfNotPresent
  skip: false
  runAfter: null
  script: |
    #!/bin/sh

    exit 0
    "/opt/commons/scan-artifact/scan.sh"

Immagini Docker nelle pipeline DevSecOps

Per impostazione predefinita, le pipeline DevSecOps utilizzano IBM Immagini di Continuous Delivery. Queste immagini contengono alcuni degli strumenti più comuni come Node e Java per eseguire gli script. È anche possibile utilizzare le immagini di altri fornitori o le proprie immagini personalizzate che contengono gli strumenti preferiti.

Le immagini Docker utilizzate dalle pipeline DevSecOps sono specificate nel file '.pipeline-config.yaml. Ogni stage può utilizzare un'immagine differente.

Modifica della versione dell'immagine

In base ai tuoi requisiti, potresti dover utilizzare una versione differente di un'immagine. Per cambiare la versione dell'immagine, modificare il file .pipeline-config.yaml. Ad esempio, se hai fatto riferimento alla tua immagine nel tuo file YAML icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24, modificarla in icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.27 comporta l'utilizzo della versione 3.27 dell'immagine.

Allo stesso modo, modificare il dind_image per lo stage:

scan-artifact:
  image: icr.io/continuous-delivery/pipeline/pipeline-base-ubi:3.24
  dind: true
  dind_image: icr.io/continuous-delivery/toolchains/devsecops/docker:20.10.21-dind
(...)

Ottenere il supporto

IBM Cloud IBM l'assistente IA di , basato sull' watsonx di , è progettato per aiutarti a imparare a lavorare in IBM Cloud e a creare soluzioni con il catalogo di offerte disponibile. Vedere Ottenere aiuto dall'assistente IA.

Se non si riesce a risolvere il problema, è possibile aprire un caso di assistenza. Per ulteriori informazioni, vedere Creazione di casi di supporto. E, se vuoi inviare un feedback, consulta la sezione Invio di feedback.