Introduksjon
Forutsetninger
Installer og konfigurer PostgreSQL-databasen
Last ned og installer Concourse CI
Generer og konfigurer RSA-nøkler
Starter Concours
Konfigurer miljø og systemtjeneste
Kobler til serveren
Sette opp Nginx Reverse Proxy
Introduksjon
Kontinuerlig integrasjon er en DevOps-programvareutviklingspraksis som gjør det mulig for utviklerne å flette den modifiserte koden ofte inn i det delte depotet mange ganger om dagen. Etter hver sammenslåing utføres automatiske bygg og tester for å oppdage problemer i koden. Det gjør det mulig for utviklerne å finne og løse feilene raskt for å forbedre programvarekvaliteten og sørge for kontinuerlig levering av programvaren. Det er veldig enkelt å bytte frem og tilbake fra Concourse ettersom den beholder all konfigurasjonen i deklarative filer som kan sjekkes inn i versjonskontroll. Det gir også et nettbrukergrensesnitt som viser byggeinformasjonen interaktivt.
Concourse komponenter.
- ATC er hovedkomponenten i Concourse. Den er ansvarlig for å kjøre web-UI og API. Den tar seg også av all rørledningsplanlegging.
- TSA er en spesialbygd SSH-server. Det er ansvarlig for sikker registrering av en arbeider hos ATC.
- Arbeidere driver videre to forskjellige tjenester:
- Garden er en containerruntime og et grensesnitt for å orkestrere containere eksternt på en arbeider.
- Baggageclaim er en server for cache- og artefaktadministrasjon.
- Fly er et kommandolinjegrensesnitt som brukes til å samhandle med ATC for å konfigurere Concourse Pipelines.
Forutsetninger
- En Vultr Ubuntu 16.04-serverforekomst.
- En sudo-bruker .
Pass på å erstatte alle forekomster av 192.0.2.1 og ci.example.com med din faktiske Vultr offentlige IP-adresse og faktiske domenenavn.
Oppdater basissystemet ditt ved å bruke veiledningen Hvordan oppdatere Ubuntu 16.04 . Når systemet ditt har blitt oppdatert, fortsett å installere PostgreSQL.
Installer og konfigurer PostgreSQL-databasen
PostgreSQL er et objektrelasjonsdatabasesystem. Concourse lagrer pipeline-dataene sine i en PostgreSQL-database. Legg til PostgreSQL-depotet.
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
Installer PostgreSQL-databaseserveren.
sudo apt -y install postgresql
Start PostgreSQL-serveren og la den starte automatisk ved oppstart.
sudo systemctl start postgresql
sudo systemctl enable postgresql
Endre passordet for standard PostgreSQL-bruker.
sudo passwd postgres
Logg på som PostgreSQL-bruker:
sudo su - postgres
Opprett en ny PostgreSQL-bruker for Concourse CI.
createuser concourse
Merk : Standard PostgreSQL-bruker kan brukes for autentisering av databasen, men det anbefales å bruke en dedikert bruker for autentisering av Concourse-databasen i et produksjonsoppsett.
PostgreSQL gir et skall for å kjøre spørringer på databasen. Bytt til PostgreSQL-skallet.
psql
Angi et passord for den nyopprettede Concourse-databasebrukeren.
ALTER USER concourse WITH ENCRYPTED password 'DBPassword';
Viktig : Erstatt DBPassword med et sterkt passord. Noter passordet, da det kreves senere i opplæringen.
Opprett en ny database for Concourse.
CREATE DATABASE concourse OWNER concourse;
Gå ut av psql skallet.
\q
Bytt til sudo-brukeren fra gjeldende postgresbruker.
exit
Last ned og installer Concourse CI
Last ned den nyeste versjonen av Concourse kjørbar og lagre den /usr/bin slik at den kan kjøres direkte. Den siste versjonen av Concourse- og Fly-binærfilene finner du på Concourse-nedlastingssiden . Nye utgivelser er svært hyppige. Erstatt lenken nedenfor med den nye lenken for den nyeste versjonen.
sudo wget https://github.com/concourse/concourse/releases/download/v3.10.0/concourse_linux_amd64 -O /usr/bin/concourse
På samme måte kan du laste ned den nyeste versjonen av fly-kjørbaren og lagre den i /usr/bin.
sudo wget https://github.com/concourse/concourse/releases/download/v3.10.0/fly_linux_amd64 -O /usr/bin/fly
Fly er kommandolinjegrensesnittet som brukes til å koble til ATC API for Concourse CI. Fly er tilgjengelig for flere plattformer som Linux, Windows og MacOS.
Tildel utføringstillatelse til de nedlastede concourse og fly binære filene.
sudo chmod +x /usr/bin/concourse /usr/bin/fly
Sjekk om Concourse og Fly fungerer som de skal ved å sjekke versjonen deres.
concourse -version
fly -version
Generer og konfigurer RSA-nøkler
RSA-nøkkelpar gir en måte å kryptere kommunikasjonen mellom komponentene i Concourse.
For at Concourse skal fungere, må minst tre par nøkler genereres. For å kryptere øktdataene, generer en session_signing_key. Denne nøkkelen vil også bli brukt av TSA til å signere forespørslene den sender til ATC. For å sikre TSA SSH-serveren, generer en tsa_host_key. Til slutt, generer en worker_key for hver arbeider.
Opprett en ny katalog for å lagre nøklene og konfigurasjonen relatert til Concourse CI.
sudo mkdir /opt/concourse
Generer de nødvendige nøklene.
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
Autoriser arbeidernes offentlige nøkkel ved å kopiere innholdet til authorized_worker_keys filen.
sudo cp /opt/concourse/worker_key.pub /opt/concourse/authorized_worker_keys
Starter Concours
Concourse har to separate komponenter som må startes: nettet og arbeideren. Start Concourse-nettet.
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
Endre brukernavnet og passordet til basic-auth om ønskelig. Sørg for at banen til nøkkelfilene er riktige og sørg for at riktig verdi for brukernavn og passord i PostgreSQL-databasekonfigurasjonen er oppgitt.
Merk : ATC vil lytte til standardporten 8080 og TSA vil lytte til porten 2222. Hvis autentisering ikke er ønsket, passerer du --no-really-i-dont-want-any-authalternativet etter at du har fjernet de grunnleggende autentiseringsalternativene.
Når webserveren er startet, vil følgende utgang vises.
{"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"}}
Stopp serveren for nå, ettersom noen flere ting fortsatt må konfigureres.
Start 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
Kommandoen ovenfor vil anta at TSA kjører på localhost og lytter til standardporten 2222.
Selv om Concourse web og worker enkelt kan startes ved å bruke kommandoene ovenfor, anbefales det å bruke Systemd for å administrere serveren.
Å bruke Systemd-tjenesten for å administrere applikasjonen sikrer at applikasjonen automatisk startes ved feil og ved oppstart. Concourse-serveren tar ikke data fra noen konfigurasjonsfil, men den kan få tilgang til dataene fra miljøvariabler. I stedet for å angi globale miljøvariabler, oppretter du en ny fil for å lagre miljøvariablene og sender deretter variablene til Concourse CI ved hjelp av Systemd-tjenesten.
Opprett en ny miljøfil for Concourse web.
sudo nano /opt/concourse/web.env
Fyll ut filen.
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 usernames 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 useradd 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
[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
[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
The web and worker service can now be started directly.
sudo systemctl start concourse-web concourse-worker
To enable the worker and web process to automatically start at boot time, run the following.
sudo systemctl enable concourse-worker concourse-web
To check the status of services, run the following.
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 will be similar to the following.
[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.
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 the following.
fly -t my-ci login -c http://192.0.2.1:8080
The above command is used for the 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
The target login will be saved for a day. After that, it will expire.
To log out immediately.
fly -t my-ci logout
Fly can be used to login to the server outside of the network, but only if the server has a public IP address and it is accessible from outside the network. The Windows or MacOS binary can be downloaded from the download site or from the web UI of the server.
Setting Up Nginx Reverse Proxy
Pålogginger og annen informasjon som sendes via web-UI til Concourse-serveren er ikke sikret. Forbindelsen er ikke kryptert. En Nginx omvendt proxy kan settes opp med en Let's Encrypt gratis SSL.
Installer Nginx.
sudo apt -y install nginx
Start Nginx og la den starte automatisk ved oppstart.
sudo systemctl start nginx
sudo systemctl enable nginx
Legg til Certbot-depotet.
sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update
Installer Certbot, som er klientapplikasjonen for Let's Encrypt CA.
sudo apt -y install certbot
Merk : For å få sertifikater fra Let's Encrypt CA, må domenet som sertifikatene skal genereres for, peke mot serveren. Hvis ikke, gjør de nødvendige endringene i DNS-postene til domenet og vent til DNS-en forplanter seg før du foretar sertifikatforespørselen igjen. Certbot sjekker domeneautoriteten før sertifikatene leveres.
Generer SSL-sertifikatene.
sudo certbot certonly --webroot -w /var/www/html -d ci.example.com
De genererte sertifikatene vil sannsynligvis bli lagret i /etc/letsencrypt/live/ci.example.com/ katalogen. SSL-sertifikatet vil bli lagret som fullchain.pem og den private nøkkelen vil bli lagret som privkey.pem.
La oss kryptere sertifikater utløper om 90 dager, så det anbefales automatisk fornyelse for sertifikatene er satt opp med cronjobs. Cron er en systemtjeneste som brukes til å kjøre periodiske oppgaver.
Åpne cron-jobbfilen.
sudo crontab -e
Legg til følgende linje på slutten av filen.
30 5 * * * /usr/bin/certbot renew --quiet
Cron-jobben ovenfor kjøres hver dag klokken 05.30. Hvis sertifikatet skal utløpe, vil det automatisk fornyes.
Opprett en ny virtuell vert.
sudo nano /etc/nginx/sites-available/concourse
Fyll ut filen.
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;
}
}
Merk : Erstatt ci.example.com med det faktiske domenet.
Aktiver konfigurasjonsfilen.
sudo ln -s /etc/nginx/sites-available/concourse /etc/nginx/sites-enabled/concourse
Rediger miljøfilen opprettet for concourse Web.
sudo nano /opt/concourse/web.env
Endre verdien på CONCOURSE_EXTERNAL_URL og legg også til to linjer til på slutten av filen.
CONCOURSE_EXTERNAL_URL=https://ci.example.com
CONCOURSE_BIND_IP=127.0.0.1
CONCOURSE_BIND_PORT=8080
Lagre filen og start Concourse Web, Worker og Nginx på nytt.
sudo systemctl restart concourse-worker concourse-web nginx
All data som sendes til og fra nettleseren er nå sikret med SSL-krypteringer.