Come installare e configurare Concourse CI su Ubuntu 16.04

introduzione

L'integrazione continua è una pratica di sviluppo software DevOps che consente agli sviluppatori di unire frequentemente il codice modificato nel repository condiviso più volte al giorno. Dopo ogni unione, vengono eseguiti build e test automatici per rilevare problemi nel codice. Consente agli sviluppatori di trovare e risolvere rapidamente gli errori per migliorare la qualità del software e fornire la consegna continua del software. Passare avanti e indietro da Concourse è molto semplice in quanto mantiene tutta la sua configurazione in file dichiarativi che possono essere controllati nel controllo della versione. Fornisce inoltre un'interfaccia utente Web che visualizza le informazioni sulla build in modo interattivo.

Componenti dell'atrio.
  • ATC è il componente principale del Concourse. È responsabile per l'esecuzione dell'interfaccia utente Web e dell'API. Si occupa anche di tutta la programmazione della pipeline.
  • TSA è un server SSH personalizzato. È responsabile della registrazione sicura di un lavoratore presso ATC.
  • I lavoratori gestiscono inoltre due diversi servizi:
    1. Garden è un runtime contenitore e un'interfaccia per orchestrare contenitori in remoto su un lavoratore.
    2. Baggageclaim è un server di gestione cache e artefatti.
  • Fly è un'interfaccia a riga di comando utilizzata per interagire con l'ATC per configurare Concourse Pipelines.

Prerequisiti

  • Un'istanza del server Vultr Ubuntu 16.04.
  • Un utente sudo .

Assicurati di sostituire tutte le occorrenze di 192.0.2.1 e ci.example.com con il tuo attuale indirizzo IP pubblico Vultr e il nome di dominio effettivo.

Aggiorna il tuo sistema di base usando la guida Come aggiornare Ubuntu 16.04 . Dopo aver aggiornato il sistema, procedere con l'installazione di PostgreSQL.

Installa e configura il database PostgreSQL

PostgreSQL è un sistema di database relazionale di oggetti. Concourse memorizza i dati della pipeline in un database PostgreSQL. Aggiungi il repository PostgreSQL.

echo "deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update

Installa il server di database PostgreSQL.

sudo apt -y install postgresql

Avviare il server PostgreSQL e abilitarlo ad avviarsi automaticamente all'avvio.

sudo systemctl start postgresql
sudo systemctl enable postgresql

Cambia la password per l'utente PostgreSQL predefinito.

sudo passwd postgres

Accedi come utente PostgreSQL:

sudo su - postgres

Crea un nuovo utente PostgreSQL per Concourse CI.

createuser concourse

Nota : l'utente PostgreSQL predefinito può essere utilizzato per l'autenticazione del database, ma si consiglia di utilizzare un utente dedicato per l'autenticazione del database Concourse in una configurazione di produzione.

PostgreSQL fornisce una shell per eseguire query sul database. Passa alla shell PostgreSQL.

psql

Impostare una password per l'utente del database Concourse appena creato.

ALTER USER concourse WITH ENCRYPTED password 'DBPassword';

Importante : sostituire DBPassword con una password complessa. Prendi nota della password poiché sarà richiesta più avanti nel tutorial.

Crea un nuovo database per Concourse.

CREATE DATABASE concourse OWNER concourse;

Esci dalla psql shell.

\q

Passa all'utente sudo dell'utente corrente postgres.

exit

Scarica e installa Concourse CI

Scarica l'ultima versione dell'eseguibile Concourse e memorizzala in /usr/bin modo che possa essere eseguita direttamente. L'ultima versione dei binari Concourse e Fly è disponibile nella pagina di download di Concourse . Le nuove versioni sono molto frequenti. Sostituisci il link in basso con il nuovo link per la versione più recente.

sudo wget https://github.com/concourse/concourse/releases/download/v3.10.0/concourse_linux_amd64 -O /usr/bin/concourse

Allo stesso modo, scarica l'ultima versione dell'eseguibile fly e memorizzala in /usr/bin.

sudo wget https://github.com/concourse/concourse/releases/download/v3.10.0/fly_linux_amd64 -O /usr/bin/fly

Fly è l'interfaccia della riga di comando utilizzata per connettersi all'API ATC di Concourse CI. Fly è disponibile per più piattaforme come Linux, Windows e MacOS.

Assegna l'autorizzazione di esecuzione ai file scaricati concourse e fly binari.

sudo chmod +x /usr/bin/concourse /usr/bin/fly

Controlla se Concourse e Fly funzionano correttamente controllandone la versione.

concourse -version
fly -version

Genera e configura chiavi RSA

Le coppie di chiavi RSA forniscono un modo per crittografare la comunicazione tra i componenti del Concourse.

Perché Concourse funzioni, devono essere generate almeno tre coppie di chiavi. Per crittografare i dati della sessione, generare a session_signing_key. Questa chiave verrà utilizzata anche da TSA per firmare le richieste che invia all'ATC. Per proteggere il server SSH TSA, generare a tsa_host_key. Infine, genera un worker_key per ogni lavoratore.

Creare una nuova directory per archiviare le chiavi e la configurazione relative a Concourse CI.

sudo mkdir /opt/concourse

Genera le chiavi richieste.

sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/session_signing_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/tsa_host_key
sudo ssh-keygen -t rsa -q -N '' -f /opt/concourse/worker_key

Autorizzare la chiave pubblica dei lavoratori copiandone il contenuto nel authorized_worker_keys file.

sudo cp /opt/concourse/worker_key.pub /opt/concourse/authorized_worker_keys

Concourse iniziale

Concourse fornisce due componenti separati che devono essere avviati: il web e il lavoratore. Avvia il Web Concourse.

sudo concourse web \
  --basic-auth-username admin \
  --basic-auth-password StrongPass \
  --session-signing-key /opt/concourse/session_signing_key \
  --tsa-host-key /opt/concourse/tsa_host_key \
  --tsa-authorized-keys /opt/concourse/authorized_worker_keys \
  --postgres-user=concourse \
  --postgres-password=DBPassword \
  --postgres-database=concourse \
  --external-url http://192.0.2.1:8080

Modificare il nome utente e la password del basic-auth se desiderato. Assicurarsi che il percorso dei file chiave sia corretto e assicurarsi che sia fornito il valore corretto per nome utente e password nella configurazione del database PostgreSQL.

Nota : ATC ascolterà la porta predefinita 8080 e TSA ascolterà la porta 2222. Se non si desidera l'autenticazione, passare l' --no-really-i-dont-want-any-authopzione dopo aver rimosso le opzioni di autenticazione di base.

Una volta avviato il web server, verrà visualizzato il seguente output.

{"timestamp":"1503657859.661247969","source":"tsa","message":"tsa.listening","log_level":1,"data":{}}
{"timestamp":"1503657859.666907549","source":"atc","message":"atc.listening","log_level":1,"data":{"debug":"127.0.0.1:8079","http":"0.0.0.0:8080"}}

Arrestare il server per ora, poiché è ancora necessario configurare alcune altre cose.

Avviare Concourse CI Worker.

sudo concourse worker \
  --work-dir /opt/concourse/worker \
  --tsa-host 127.0.0.1 \
  --tsa-public-key /opt/concourse/tsa_host_key.pub \
  --tsa-worker-private-key /opt/concourse/worker_key

Il comando sopra presupporrà che TSA sia in esecuzione su localhost e ascolti la porta predefinita 2222.

Sebbene Concourse web e worker possano essere avviati facilmente utilizzando i comandi precedenti, si consiglia di utilizzare Systemd per gestire il server.

Configurare l'ambiente e il servizio Systemd

L'uso del servizio Systemd per la gestione dell'applicazione garantisce che l'applicazione venga avviata automaticamente in caso di errori e all'avvio. Il server Concourse non accetta i dati da nessun file di configurazione, ma può accedere ai dati dalle variabili di ambiente. Invece di impostare le variabili di ambiente globali, creare un nuovo file per archiviare le variabili di ambiente e quindi passare le variabili all'IC Concourse utilizzando il servizio Systemd.

Crea un nuovo file di ambiente per Concourse web.

sudo nano /opt/concourse/web.env

Popolare il file.

CONCOURSE_SESSION_SIGNING_KEY=/opt/concourse/session_signing_key
CONCOURSE_TSA_HOST_KEY=/opt/concourse/tsa_host_key
CONCOURSE_TSA_AUTHORIZED_KEYS=/opt/concourse/authorized_worker_keys

CONCOURSE_POSTGRES_USER=concourse
CONCOURSE_POSTGRES_PASSWORD=DBPassword
CONCOURSE_POSTGRES_DATABASE=concourse

CONCOURSE_BASIC_AUTH_USERNAME=admin
CONCOURSE_BASIC_AUTH_PASSWORD=StrongPass
CONCOURSE_EXTERNAL_URL=http://192.0.2.1:8080

Modificare il nome utente e la password del BASIC_AUTH se desiderato. Assicurarsi che il percorso dei file chiave sia corretto e assicurarsi che sia fornito il valore corretto per nome utente e password nella configurazione del database PostgreSQL.

Allo stesso modo, creare un file di ambiente per il lavoratore.

sudo nano /opt/concourse/worker.env

Popolare il file.

CONCOURSE_WORK_DIR=/opt/concourse/worker
CONCOURSE_TSA_WORKER_PRIVATE_KEY=/opt/concourse/worker_key
CONCOURSE_TSA_PUBLIC_KEY=/opt/concourse/tsa_host_key.pub
CONCOURSE_TSA_HOST=127.0.0.1

Poiché i file di ambiente contengono nomi utente e password, modificane le autorizzazioni in modo che non possano accedervi da altri utenti.

sudo chmod 600 /opt/concourse/*.env

Ora crea un nuovo utente per Concourse per eseguire l'ambiente web. Ciò garantirà che il server Web sia in esecuzione in un ambiente isolato.

sudo useradd concourse

Assegnare all'utente dell'atrio la proprietà della directory del file Concourse CI.

sudo chown -R concourse:concourse /opt/concourse

Creare un nuovo file di servizio systemd per il servizio Web Concourse.

sudo nano /etc/systemd/system/concourse-web.service

Popolare il file.

[Unit]
Description=Concourse CI web server

[Service]
Type=simple
User=concourse
Group=concourse
Restart=on-failure
EnvironmentFile=/opt/concourse/web.env
ExecStart=/usr/bin/concourse web
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_web

[Install]
WantedBy=multi-user.target

Salva e chiudi il file. Creare un nuovo file di servizio per il servizio di lavoratore Concourse.

sudo nano /etc/systemd/system/concourse-worker.service

Popolare il file.

[Unit]
Description=Concourse CI worker process

[Service]
Type=simple
Restart=on-failure
EnvironmentFile=/opt/concourse/worker.env
ExecStart=/usr/bin/concourse worker
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=concourse_worker

[Install]
WantedBy=multi-user.target

Il servizio Web e di lavoro ora può essere avviato direttamente.

sudo systemctl start concourse-web concourse-worker

Per abilitare l'avvio automatico del processo di lavoro e Web all'avvio, eseguire quanto segue.

sudo systemctl enable concourse-worker concourse-web

Per verificare lo stato dei servizi, eseguire quanto segue.

sudo systemctl status concourse-worker concourse-web

Se il servizio non è avviato o nello FAILED stato, rimuovere la cache dalla /tmp directory.

sudo rm -rf /tmp/*

Riavvia i servizi.

sudo systemctl restart concourse-worker concourse-web

Si noti che questa volta i servizi sono stati avviati correttamente. L'output al momento della verifica dello stato dei servizi sarà simile al seguente.

[user@vultr ~]$ sudo systemctl status concourse-worker concourse-web
● concourse-worker.service - Concourse CI worker process
   Loaded: loaded (/etc/systemd/system/concourse-worker.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
 Main PID: 3037 (concourse)
   CGroup: /system.slice/concourse-worker.service
           └─3037 /usr/bin/concourse worker

Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.934722900","source":"tsa","message":"t...""}}
Aug 26 07:27:42 vultr.guest concourse_worker[3037]: {"timestamp":"1503732462.941227913","source":"guardian","messag...0"}}

...

● concourse-web.service - Concourse CI web server
   Loaded: loaded (/etc/systemd/system/concourse-web.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2017-08-26 07:27:37 UTC; 55s ago
 Main PID: 3036 (concourse)
   CGroup: /system.slice/concourse-web.service
           └─3036 /usr/bin/concourse web

Aug 26 07:27:57 vultr.guest concourse_web[3036]: {"timestamp":"1503732477.925554752","source":"tsa","message":"tsa...ve"}}
Aug 26 07:28:02 vultr.guest concourse_web[3036]: {"timestamp":"1503732482.925430775","source":"tsa","message":"tsa...ve"}}
...
Hint: Some lines were ellipsized, use -l to show in full.

Connessione al server

Una volta avviato il server, è possibile accedere all'interfaccia Web di Concourse CI accedendo a http://192.0.2.1:8080 qualsiasi browser. Accedi utilizzando il nome utente e la password forniti nel file di ambiente.

Per connettersi al server tramite Fly, eseguire quanto segue.

fly -t my-ci login -c http://192.0.2.1:8080

Il comando precedente viene utilizzato per l'accesso iniziale al server. -t viene utilizzato per fornire un nome di destinazione. sostituire my-ci con qualsiasi nome di destinazione desiderato. Il comando sopra accederà al team predefinito main. Chiederà il nome utente e la password forniti nel file di ambiente.

L'output sarà simile al seguente.

[user@vultr ~]$ fly -t my-ci login -c http://192.0.2.1:8080
logging in to team 'main'

username: admin
password:

target saved

L'accesso target verrà salvato per un giorno. Successivamente, scadrà.

Per disconnettersi immediatamente.

fly -t my-ci logout

Fly può essere utilizzato per accedere al server al di fuori della rete, ma solo se il server ha un indirizzo IP pubblico ed è accessibile dall'esterno della rete. Il file binario Windows o MacOS può essere scaricato dal sito di download o dall'interfaccia utente Web del server.

Impostazione del proxy inverso Nginx

Gli accessi e altre informazioni inviate tramite l'interfaccia utente Web al server Concourse non sono protetti. La connessione non è crittografata. Un proxy inverso Nginx può essere impostato con un SSL gratuito Let's Encrypt.

Installa Nginx.

sudo apt -y install nginx

Avvia Nginx e abilita l'avvio automatico all'avvio.

sudo systemctl start nginx
sudo systemctl enable nginx

Aggiungi il repository Certbot.

sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update

Installa Certbot, che è l'applicazione client per Let's Encrypt CA.

sudo apt -y install certbot

Nota : per ottenere certificati da Let's Encrypt CA, il dominio per il quale devono essere generati i certificati deve essere puntato verso il server. In caso contrario, apportare le modifiche necessarie ai record DNS del dominio e attendere la propagazione del DNS prima di effettuare nuovamente la richiesta di certificato. Certbot controlla l'autorità di dominio prima di fornire i certificati.

Genera i certificati SSL.

sudo certbot certonly --webroot -w /var/www/html -d ci.example.com

È probabile che i certificati generati siano archiviati nella /etc/letsencrypt/live/ci.example.com/ directory. Il certificato SSL verrà archiviato come fullchain.pem e la chiave privata verrà archiviata come privkey.pem.

Let's Encrypt certificati scadranno tra 90 giorni, quindi si consiglia il rinnovo automatico per i certificati è impostato usando cronjobs. Cron è un servizio di sistema che viene utilizzato per eseguire attività periodiche.

Apri il file di lavoro cron.

sudo crontab -e

Aggiungi la seguente riga alla fine del file.

30 5 * * * /usr/bin/certbot renew --quiet

Il processo cron sopra riportato verrà eseguito ogni giorno alle 5:30. Se il certificato è in scadenza, verrà automaticamente rinnovato.

Crea un nuovo host virtuale.

sudo nano /etc/nginx/sites-available/concourse

Popolare il file.

server {
    listen 80;
    server_name ci.example.com;
    return 301 https://$host$request_uri;
}
server {

    listen 443;
    server_name ci.example.com;

    ssl_certificate           /etc/letsencrypt/live/ci.example.com/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/ci.example.com/privkey.pem;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_protocols  TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log    /var/log/nginx/concourse.access.log;

    location / {

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;
      proxy_pass          http://localhost:8080;
      proxy_read_timeout  90;

      proxy_redirect      http://localhost:8080 https://ci.example.com;
    }
  }

Nota : sostituire ci.example.com con il dominio effettivo.

Attiva il file di configurazione.

sudo ln -s /etc/nginx/sites-available/concourse /etc/nginx/sites-enabled/concourse

Modifica il file Environment creato per l'atrio Web.

sudo nano /opt/concourse/web.env

Modifica il valore di CONCOURSE_EXTERNAL_URL e aggiungi anche altre due righe alla fine del file.

CONCOURSE_EXTERNAL_URL=https://ci.example.com
CONCOURSE_BIND_IP=127.0.0.1
CONCOURSE_BIND_PORT=8080

Salvare il file e riavviare Concourse Web, Worker e Nginx.

sudo systemctl restart concourse-worker concourse-web nginx

Tutti i dati inviati da e verso il browser sono ora protetti con crittografie SSL.



Leave a Comment

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Lintelligenza artificiale può combattere con un numero crescente di attacchi ransomware?

Gli attacchi ransomware sono in aumento, ma l'intelligenza artificiale può aiutare ad affrontare l'ultimo virus informatico? L'intelligenza artificiale è la risposta? Leggi qui sai è AI boone o bane

ReactOS: è questo il futuro di Windows?

ReactOS: è questo il futuro di Windows?

ReactOS, un sistema operativo open source e gratuito è qui con l'ultima versione. Può essere sufficiente alle esigenze degli utenti Windows moderni e abbattere Microsoft? Scopriamo di più su questo vecchio stile, ma un'esperienza del sistema operativo più recente.

Rimani connesso tramite lapp desktop WhatsApp 24*7

Rimani connesso tramite lapp desktop WhatsApp 24*7

Whatsapp ha finalmente lanciato l'app desktop per utenti Mac e Windows. Ora puoi accedere facilmente a Whatsapp da Windows o Mac. Disponibile per Windows 8+ e Mac OS 10.9+

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

In che modo lintelligenza artificiale può portare lautomazione dei processi al livello successivo?

Leggi questo per sapere come l'intelligenza artificiale sta diventando popolare tra le aziende di piccole dimensioni e come sta aumentando le probabilità di farle crescere e dare un vantaggio ai loro concorrenti.

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Laggiornamento del supplemento macOS Catalina 10.15.4 sta causando più problemi che risolverli

Recentemente Apple ha rilasciato macOS Catalina 10.15.4 un aggiornamento supplementare per risolvere i problemi, ma sembra che l'aggiornamento stia causando più problemi che portano al bricking delle macchine mac. Leggi questo articolo per saperne di più

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per lestrazione dei dati dai Big Data

13 strumenti commerciali per l'estrazione dei dati dai Big Data

Che cosè un file system di journaling e come funziona?

Che cosè un file system di journaling e come funziona?

Il nostro computer memorizza tutti i dati in un modo organizzato noto come file system di journaling. È un metodo efficiente che consente al computer di cercare e visualizzare i file non appena si preme search.https://wethegeek.com/?p=94116&preview=true

Singolarità tecnologica: un lontano futuro della civiltà umana?

Singolarità tecnologica: un lontano futuro della civiltà umana?

Man mano che la scienza si evolve a un ritmo rapido, assumendo gran parte dei nostri sforzi, aumentano anche i rischi di sottoporci a una singolarità inspiegabile. Leggi, cosa potrebbe significare per noi la singolarità.

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Uno sguardo a 26 tecniche di analisi dei Big Data: Parte 1

Limpatto dellintelligenza artificiale nella sanità 2021

Limpatto dellintelligenza artificiale nella sanità 2021

L'intelligenza artificiale nell'assistenza sanitaria ha compiuto grandi passi avanti negli ultimi decenni. Pertanto, il futuro dell'IA in sanità continua a crescere giorno dopo giorno.