Close

Suggerimenti per creare script di task con Bitbucket Pipelines

Primo piano di Sten Pittet
Sten Pittet

Scrittore collaboratore

Con Bitbucket Pipelines puoi adottare rapidamente un flusso di lavoro di continuous integration o continuous delivery per i tuoi repository. Un aspetto essenziale di questa attività è la trasformazione dei processi manuali in script che possono essere eseguiti automaticamente da una macchina senza la necessità dell'intervento umano. Tuttavia, a volte può essere difficile automatizzare i task poiché potrebbero verificarsi problemi di autenticazione, installazione di dipendenze o segnalazione di errori. Questa guida ti aiuterà con alcuni suggerimenti per scrivere gli script.

Ora

30 minuti

Pubblico

Persone che non hanno familiarità con continuous deployment e/o Bitbucket Pipelines

Passaggio 1: non registrare informazioni sensibili!

Prima di esaminare più dettagliatamente il mondo dell'automazione, devi rivedere i tuoi log e assicurarti di non generare dati sensibili come chiavi API, credenziali o altre informazioni che possano compromettere il tuo sistema. Non appena inizi a utilizzare Bitbucket Pipelines per eseguire gli script, i log saranno archiviati e leggibili da chiunque abbia accesso al tuo repository.

Passaggio 2: utilizza le chiavi SSH per la connessione a server remoti

L'autenticazione è spesso uno degli aspetti più problematici dell'automazione. Le chiavi SSH hanno il doppio vantaggio di essere molto sicure e di facilitare la gestione della connessione a server remoti. Con Bitbucket Pipelines puoi generare facilmente una nuova coppia di chiavi che può essere utilizzata su ogni pipeline per connettersi a server remoti.

Genera chiavi SSH direttamente da Bitbucket Pipelines

Dovrai semplicemente copiare le chiavi pubbliche nel tuo server remoto per poterti connettere dalla pipeline in esecuzione. Ad esempio, una volta che le chiavi SSH sono configurate sul server (è possibile utilizzare un URL o un indirizzo IP), lo script seguente elenca i file nella directory /var/www senza che sia necessario specificare una password.

bitbucket-pipelines.yml

image: node:4.6.0
   pipelines:
      default:
        - step:
           script:
              - ssh <user>@<server> ls -l /var/www

Non dimenticare di registrare tutti i server a cui devi connetterti nella sezione Known hosts (Host noti); diversamente, la pipeline si bloccherà, in attesa di approvazione, quando provi a connetterti al server remoto.

Passaggio 3: utilizza le variabili di ambiente protette per le chiavi e le credenziali API

Se hai la necessità di utilizzare un'API remota come parte dei tuoi script, è probabile che il tuo provider API ti consenta di utilizzare le sue risorse protette con una chiave API. Puoi aggiungere in sicurezza le credenziali a Bitbucket Pipelines utilizzando variabili di ambiente protette. Una volta salvate, puoi richiamarle negli script e rimarranno mascherate nell'output del log.

Bitbucket Pipelines mantiene le variabili protette mascherate nei log

Passaggio 4: esegui comandi in modalità non interattiva

Se hai bisogno di installare dipendenze come parte dello script, assicurati che questo non comporti la necessità da parte dell'utente di richiedere la convalida o l'input. Esamina la documentazione dei comandi che usi per vedere se è presente un flag che ti permette di eseguirli in modo non interattivo.

Ad esempio, il flag -y nel comando riportato di seguito installerà PostgreSQL su un server Debian.

apt-get install -y postgresql

Il flag -q ti consente di eseguire i comandi di Google Cloud SDK in modo non interattivo.

gcloud -q app deploy app.yaml

Passaggio 5: crea immagini Docker pronte per l'uso

L'installazione delle dipendenze necessarie per l'esecuzione della pipeline può richiedere molto tempo, che potresti risparmiare creando l'immagine Docker con gli strumenti e i pacchetti di base necessari per creare e testare la tua applicazione.

Ad esempio, nella seguente configurazione di Pipelines, installiamo l'interfaccia della riga di comando di AWS all'inizio per utilizzarla successivamente quando effettueremo la distribuzione dell'applicazione in AWS Elastic Beanstalk.

bitbucket-pipelines.yml

image: node:7.5.0
   pipelines:
      default:
       - step:
          script: # Modify the commands below to build your repository.
           - apt-get update && apt-get install -y python-dev
           - curl -O https://bootstrap.pypa.io/get-pip.py
           - python get-pip.py
           - pip install awsebcli --upgrade
           - npm install
           - npm test
           - eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
           - eb deploy hw-eb-tutorial

In questo caso il problema risiede nel fatto che l'interfaccia della riga di comando di AWS non cambia a ogni commit; ciò significa che si perde tempo nell'installazione di una dipendenza che potrebbe essere fornita in pacchetto per impostazione predefinita.

Il seguente Dockerfile può essere utilizzato per creare un'immagine Docker personalizzata pronta per le distribuzioni di Elastic Beanstalk.

Docker

FROM node:7.5.0 
RUN apt-get update \   && apt-get install -y python-dev \   && cd /tmp \   && curl -O https://bootstrap.pypa.io/get-pip.py \   && python get-pip.py \   && pip install awsebcli --upgrade \   && apt-get clean \   && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

Se lo utilizzo sotto il riferimento spittet/my-custom-image posso semplificare la configurazione di Bitbucket Pipelines in modo che contenga solo i comandi necessari per creare, testare e distribuire l'applicazione.

bitbucket-pipelines.yml

image: spittet/my-custom-image
   pipelines:
     default:
       - step:
            script: # Modify the commands below to build your repository.
              - npm install
              - npm test
              - eb init helloworld-beanstalk-bbp -r eu-west-1 -p node
              - eb deploy hw-eb-tutorial

Infine: anche gli script costituiscono codice

Questi suggerimenti dovrebbero aiutarti a trasformare le attività manuali in processi automatizzati che possono essere eseguiti ripetutamente e in modo affidabile da un servizio come Bitbucket Pipelines. Alla fine, saranno strumenti potenti in grado di supervisionare i tuoi rilasci e di attivare la distribuzione di interi ambienti di produzione su più server e piattaforme.

Questo è il motivo per cui è necessario gestire gli script di automazione come codice e sottoporli allo stesso processo di revisione e qualità che applichi al codice. Per fortuna puoi farlo facilmente con Bitbucket poiché la configurazione della pipeline viene archiviata con il codice, consentendoti di creare pull request nel contesto appropriato.

Infine, non dimenticare di eseguire script in un ambiente di test prima di applicarli alla produzione: i minuti in più che dedichi a questa attività potrebbero evitarti di cancellare dati di produzione per errore.

Sten Pittet
Sten Pittet

I've been in the software business for 10 years now in various roles from development to product management. After spending the last 5 years in Atlassian working on Developer Tools I now write about building software. Outside of work I'm sharpening my fathering skills with a wonderful toddler.


Condividi l'articolo
Argomento successivo

Letture consigliate

Aggiungi ai preferiti queste risorse per ricevere informazioni sui tipi di team DevOps e aggiornamenti continui su DevOps in Atlassian.

Illustrazione su Devops

Community DevOps

Illustrazione su Devops

Workshop di simulazione

Illustrazione di una mappa

Inizia gratis

Iscriviti alla nostra newsletter DevOps

Thank you for signing up