Com instal·lar i configurar Concourse CI a CentOS 7

Introducció

La integració contínua és una pràctica de desenvolupament de programari DevOps que permet als desenvolupadors combinar amb freqüència el codi modificat al repositori compartit moltes vegades al dia. Després de cada fusió, es realitzen compilacions i proves automàtiques per detectar problemes al codi. Permet als desenvolupadors trobar i resoldre els errors ràpidament per millorar la qualitat del programari i oferir-lo de manera continuada. Canviar d'anada i tornada des de Concourse és molt fàcil, ja que conserva tota la seva configuració en fitxers declaratius que es poden comprovar al control de versions. També proporciona una interfície d'usuari web que mostra la informació de compilació de manera interactiva.

Components del congrés.
  • L'ATC és el component principal del Concours. És responsable d'executar la interfície d'usuari web i l'API. També s'encarrega de tota la programació del gasoducte.
  • TSA és un servidor SSH personalitzat. És responsable de registrar de manera segura un treballador a l'ATC.
  • Els treballadors també ofereixen dos serveis diferents:
    1. Garden és un temps d'execució de contenidors i una interfície per orquestrar contenidors de forma remota en un treballador.
    2. Baggageclaim és un servidor de gestió de memòria cau i d'artefactes.
  • Fly és una interfície de línia d'ordres que s'utilitza per interactuar amb l'ATC per configurar Concourse Pipelines.

Requisits previs

Assegureu-vos de substituir totes les ocurrències de 192.0.2.1i ci.example.comamb la vostra adreça IP pública de Vultr real i el nom de domini real.

Actualitzeu el vostre sistema base mitjançant la guia Com actualitzar CentOS 7 . Un cop actualitzat el vostre sistema, procediu a instal·lar PostgreSQL.

Instal·leu i configureu la base de dades PostgreSQL

PostgreSQL és un sistema de bases de dades relacionals d'objectes. Concourse emmagatzema les seves dades de pipeline en una base de dades PostgreSQL. Afegiu el repositori PostgreSQL.

sudo rpm -Uvh https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm

Instal·leu el servidor de bases de dades PostgreSQL.

sudo yum -y install postgresql96-server postgresql96-contrib

Inicialitzar la base de dades.

sudo /usr/pgsql-9.6/bin/postgresql96-setup initdb

initdbcrea un nou clúster de bases de dades PostgreSQL, que és una col·lecció de bases de dades gestionades per una única instància de servidor. Editeu el pg_hba.conffitxer per habilitar l'autenticació basada en MD5.

sudo nano /var/lib/pgsql/9.6/data/pg_hba.conf

Cerqueu les línies següents i canvieu els valors peeri identa la METHODcolumna a trusti md5, respectivament.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

Un cop actualitzada, la configuració hauria de ser així.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

Inicieu el servidor PostgreSQL i activeu-lo perquè s'iniciï automàticament en el moment de l'arrencada.

sudo systemctl start postgresql-9.6
sudo systemctl enable postgresql-9.6

Canvieu la contrasenya de l'usuari PostgreSQL predeterminat.

sudo passwd postgres

Inicieu sessió com a usuari de PostgreSQL:

sudo su - postgres

Creeu un nou usuari de PostgreSQL per a Concourse CI.

createuser concourse

Nota : l' usuari PostgreSQL predeterminat es pot utilitzar per a l'autenticació de la base de dades, però es recomana utilitzar un usuari dedicat per a l'autenticació de la base de dades Concourse en una configuració de producció.

PostgreSQL proporciona un shell per executar consultes a la base de dades. Canvieu a l'intèrpret d'ordres PostgreSQL executant:

psql

Establiu una contrasenya per a l'usuari de la base de dades Concourse que acaba de crear.

ALTER USER concourse WITH ENCRYPTED password 'DBPassword';

Important : substituïu-la DBPasswordper una contrasenya segura. Anoteu la contrasenya, ja que serà necessària més endavant al tutorial.

Creeu una nova base de dades per a Concourse.

CREATE DATABASE concourse OWNER concourse;

Surt de la psqlclosca.

\q

Canvia a l'usuari sudo des de l'usuari de postgres actual.

exit

Baixeu i instal·leu Concourse CI

Baixeu la darrera versió de l'executable Concourse i emmagatzemeu-la /usr/binperquè es pugui executar directament. La darrera versió dels binaris Concourse i Fly es pot trobar a la pàgina de descàrrega de Concourse . Els nous llançaments són molt freqüents. Substituïu l'enllaç següent pel nou enllaç per a la versió més recent.

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

De la mateixa manera, descarregueu l'última versió de l'executable fly i deseu-lo a /usr/bin.

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

Fly és la interfície de línia d'ordres per connectar-se a l'API ATC de Concourse CI. Fly està disponible per a diverses plataformes com Linux, Windows i MacOS.

Assigneu permís d'execució als fitxers binaris concoursei descarregats fly.

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

Comproveu si Concourse i Fly funcionen correctament comprovant la seva versió.

concourse -version
fly -version

Generar i configurar claus RSA

Els parells de claus RSA proporcionen una manera de xifrar la comunicació entre els components del Concourse.

Perquè Concourse funcioni, s'han de generar almenys tres parells de claus. Per xifrar les dades de la sessió, genereu un fitxer session_signing_key. Aquesta clau també la farà servir la TSA per signar les sol·licituds que faci a l'ATC. Per protegir el servidor TSA SSH, genereu un fitxer tsa_host_key. Finalment, genereu un worker_keyper a cada treballador.

Creeu un directori nou per emmagatzemar les claus i la configuració relacionades amb Concourse CI.

sudo mkdir /opt/concourse

Genereu les claus requerides.

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

Autoritzeu la clau pública dels treballadors copiant-ne el contingut al authorized_worker_keysfitxer:

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

Començament del Concurs

Concourse ofereix dos components separats que s'han d'iniciar, el web i el treballador. Inicieu la web del Concours.

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

Canvieu el nom d'usuari i la contrasenya basic-authsi ho desitja. Assegureu-vos que el camí als fitxers de claus sigui correcte i que es proporcioni el valor correcte per al nom d'usuari i la contrasenya a la configuració de la base de dades PostgreSQL.

Nota : L'ATC escoltarà el port predeterminat 8080i la TSA escoltarà el port 2222. Si no es desitja l'autenticació, passeu l' --no-really-i-dont-want-any-authopció després d'eliminar les opcions d'autenticació bàsiques.

Un cop iniciat el servidor web, s'hauria de mostrar la sortida següent.

{"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"}}

Atureu el servidor de moment, ja que encara s'han de configurar algunes coses més.

Inicieu el 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

L'ordre anterior suposarà que el TSA s'està executant a localhost i escoltant el port predeterminat 2222.

Tot i que el web i el treballador de Concourse es poden iniciar fàcilment mitjançant les ordres anteriors, es recomana utilitzar Systemd per gestionar el servidor.

Configura l'entorn i el servei Systemd

Using Systemd service for managing the application ensures that the application is automatically started on failures and at boot time. The Concourse server does not take data from any configuration file, but it can access the data from environment variables. Instead of setting global environment variables, create a new file to store the environment variables and then pass the variables to the Concourse CI using the Systemd service.

Create a new environment file for Concourse web.

sudo nano /opt/concourse/web.env

Populate the 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

Change the username and password of the BASIC_AUTH if desired. Make sure that the path to the key files are correct and make sure that the correct value for username and password in the PostgreSQL database configuration is provided.

Similarly, create an environment file for the worker.

sudo nano /opt/concourse/worker.env

Populate the 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

As the environment files contain username and passwords, change its permissions so that it cannot be accessed by other users.

sudo chmod 600 /opt/concourse/*.env

Now create a new user for Concourse to run the web environment. This will ensure that the web server is running in an isolated environment.

sudo adduser --system concourse

Give the concourse user ownership over Concourse CI file's directory.

sudo chown -R concourse:concourse /opt/concourse

Create a new systemd service file for the Concourse web service.

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

Populate the file.

[Unit]
Description=Concourse CI web server
After=postgresql-9.6.service

[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

Save and close the file. Create a new service file for the Concourse worker service.

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

Populate the file.

[Unit]
Description=Concourse CI worker process
After=concourse-web.service

[Service]
Type=simple
User=root
Group=root
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

The web and worker service can now be started directly by running:

sudo systemctl start concourse-web concourse-worker

To enable the worker and web process to automatically start at boot time, run:

sudo systemctl enable concourse-worker concourse-web

To check the status of services, run:

sudo systemctl status concourse-worker concourse-web

If the service is not started, or in the FAILED state, remove the cache from the /tmp directory.

sudo rm -rf /tmp/*

Restart the services.

sudo systemctl restart concourse-worker concourse-web

Notice that this time the services have started correctly. The output upon verifying the status of the services should be simil.

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

Adjust your firewall to allow port 8080, on which ATS is running and port 2222, on which TSA is running.

sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent
sudo firewall-cmd --zone=public --add-port=2222/tcp --permanent
sudo firewall-cmd --reload

Connecting to the Server

Once the server is started, the web interface of the Concourse CI can be accessed by going to http://192.0.2.1:8080 in any browser. Log in using the username and password provided in the environment file.

To connect to the server using Fly, run:

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

The above command is used for initial login to the server. -t is used to provide a target name. replace my-ci with any desired target name. The above command will log in to the default team main. It will ask for the username and password provided in the environment file.

The output will look like the following.

[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'inici de sessió objectiu es desarà durant un dia. Després d'això, caducarà.

Per tancar sessió immediatament.

fly -t my-ci logout

fly es pot utilitzar per iniciar sessió al servidor fora de la xarxa, però només si el servidor té una adreça IP pública i s'hi pot accedir des de fora de la xarxa. El binari de Windows o MacOS es pot descarregar des del lloc de descàrrega o des de la interfície d'usuari web del servidor.

Configuració del servidor intermediari invers Nginx

Els inicis de sessió i altra informació enviada a través de la interfície d'usuari web al servidor de Concourse no estan assegurades. La connexió no està xifrada. Es pot configurar un servidor intermediari invers Nginx amb un SSL gratuït de Let's Encrypt.

Instal·leu el servidor web Nginx i Certbot, que és l'aplicació client per a Let's Encrypt CA.

sudo yum -y install certbot-nginx nginx

Inicieu i activeu Nginx perquè s'iniciï automàticament en el moment de l'arrencada:

sudo systemctl start nginx
sudo systemctl enable nginx

Abans que es pugui sol·licitar els certificats, s'han d'habilitar els ports 80 i 443 o els serveis estàndard HTTP i HTTPS mitjançant el tallafoc. Certbot comprovarà l'autoritat del domini abans d'emetre certificats.

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent

El port 8080 ja no s'ha de permetre a través del tallafoc perquè Concourse ara s'executarà al port HTTPS estàndard. Elimineu l'entrada del tallafoc per permetre el port 8080.

sudo firewall-cmd --zone=public --remove-port=8080/tcp --permanent
sudo firewall-cmd --reload

Nota

To obtain certificates from Let's Encrypt CA, the domain for which the certificates are to be generated must be pointed towards the server. If not, make the necessary changes to the DNS records of the domain and wait for the DNS to propagate before making the certificate request again. Certbot checks the domain authority before providing the certificates.

Generar els certificats SSL.

sudo certbot certonly --webroot -w /usr/share/nginx/html -d ci.example.com

És probable que els certificats generats s'emmagatzemin al /etc/letsencrypt/live/ci.example.com/directori. El certificat SSL s'emmagatzemarà com a fullchain.pemi la clau privada com a privkey.pem.

Els certificats de Let's Encrypt caduquen en 90 dies, per la qual cosa es recomana que la renovació automàtica dels certificats estigui configurada mitjançant cronjobs. Cron és un servei del sistema que s'utilitza per executar tasques periòdiques.

Obriu el fitxer de treball cron.

sudo crontab -e

Afegiu la línia següent al final del fitxer.

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

El treball cron anterior s'executarà tots els dilluns a les 5:30 del matí. Si el certificat ha de caducar, es renovarà automàticament.

Creeu un nou host virtual.

sudo nano /etc/nginx/conf.d/concourse-ssl.conf

Omple el fitxer.

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 : substituïu ci.example.com-lo pel domini real.

Editeu el fitxer Environment creat per a concourse Web.

sudo nano /opt/concourse/web.env

Canvieu el valor de CONCOURSE_EXTERNAL_URLi afegiu també dues línies més al final del fitxer.

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

Deseu el fitxer i reinicieu el servidor web Concourse Web, Worker i Nginx:

sudo systemctl restart concourse-worker concourse-web nginx

Totes les dades enviades cap i des del navegador ara estan protegides amb xifratge SSL.


The Rise of Machines: Real World Applications of AI

The Rise of Machines: Real World Applications of AI

La Intel·ligència Artificial no està en el futur, és aquí mateix en el present. En aquest bloc Llegiu com les aplicacions d'Intel·ligència Artificial han afectat diversos sectors.

Atacs DDOS: una breu visió general

Atacs DDOS: una breu visió general

També ets víctima d'atacs DDOS i estàs confós sobre els mètodes de prevenció? Llegiu aquest article per resoldre les vostres consultes.

Us heu preguntat mai com guanyen diners els pirates informàtics?

Us heu preguntat mai com guanyen diners els pirates informàtics?

Potser haureu sentit que els pirates informàtics guanyen molts diners, però us heu preguntat mai com guanyen aquest tipus de diners? anem a discutir.

Invents revolucionaris de Google que us facilitaran la vida.

Invents revolucionaris de Google que us facilitaran la vida.

Vols veure els invents revolucionaris de Google i com aquests invents van canviar la vida de tots els éssers humans actuals? A continuació, llegiu al bloc per veure els invents de Google.

Divendres essencial: què va passar amb els cotxes impulsats per IA?

Divendres essencial: què va passar amb els cotxes impulsats per IA?

El concepte de cotxes autònoms per sortir a les carreteres amb l'ajuda de la intel·ligència artificial és un somni que tenim des de fa temps. Però malgrat les diverses promeses, no es veuen enlloc. Llegeix aquest blog per saber-ne més...

Singularitat tecnològica: un futur llunyà de la civilització humana?

Singularitat tecnològica: un futur llunyà de la civilització humana?

A mesura que la ciència evoluciona a un ritme ràpid, fent-se càrrec de molts dels nostres esforços, també augmenten els riscos de sotmetre'ns a una singularitat inexplicable. Llegeix, què pot significar per a nosaltres la singularitat.

Evolució de lemmagatzematge de dades – Infografia

Evolució de lemmagatzematge de dades – Infografia

Els mètodes d'emmagatzematge de les dades que han anat evolucionant poden ser des del naixement de les dades. Aquest bloc tracta l'evolució de l'emmagatzematge de dades a partir d'una infografia.

Funcionalitats de les capes darquitectura de referència de Big Data

Funcionalitats de les capes darquitectura de referència de Big Data

Llegeix el blog per conèixer de la manera més senzilla les diferents capes de l'Arquitectura Big Data i les seves funcionalitats.

6 avantatges sorprenents de tenir dispositius domèstics intel·ligents a les nostres vides

6 avantatges sorprenents de tenir dispositius domèstics intel·ligents a les nostres vides

En aquest món digital, els dispositius domèstics intel·ligents s'han convertit en una part crucial de les vides. A continuació, es mostren alguns avantatges sorprenents dels dispositius domèstics intel·ligents sobre com fan que la nostra vida valgui la pena i sigui més senzilla.

Lactualització del suplement de macOS Catalina 10.15.4 està causant més problemes que no pas solucions

Lactualització del suplement de macOS Catalina 10.15.4 està causant més problemes que no pas solucions

Recentment, Apple va llançar macOS Catalina 10.15.4, una actualització de suplements per solucionar problemes, però sembla que l'actualització està causant més problemes que provoquen el bloqueig de les màquines Mac. Llegiu aquest article per obtenir més informació