Concourse CI installeren en configureren op Ubuntu 16.04

Invoering

Continuous Integration is een DevOps-softwareontwikkelingspraktijk waarmee de ontwikkelaars de gewijzigde code vaak meerdere keren per dag in de gedeelde repository kunnen samenvoegen. Na elke samenvoeging worden automatische builds en tests uitgevoerd om problemen in de code te detecteren. Het stelt de ontwikkelaars in staat de fouten snel te vinden en op te lossen om de softwarekwaliteit te verbeteren en een continue levering van de software te bieden. Overschakelen van Concourse is heel eenvoudig omdat het al zijn configuratie in declaratieve bestanden bewaart die kunnen worden gecontroleerd in versiebeheer. Het biedt ook een webgebruikersinterface die de build-informatie interactief weergeeft.

Concourse Components.
  • ATC is het belangrijkste onderdeel van de Concourse. Het is verantwoordelijk voor het uitvoeren van de web-UI en API. Het zorgt ook voor de planning van alle pijpleidingen.
  • TSA is een op maat gemaakte SSH-server. Het is verantwoordelijk voor het veilig registreren van een werknemer bij ATC.
  • Werknemers voeren verder twee verschillende services uit:
    1. Garden is een containerruntime en een interface voor het op afstand organiseren van containers op een werker.
    2. Baggageclaim is een cache- en artefactbeheerserver.
  • Fly is een opdrachtregelinterface die wordt gebruikt om te communiceren met de ATC om Concourse Pipelines te configureren.

Vereisten

Zorg ervoor dat u alle exemplaren van 192.0.2.1 en ci.example.com met uw daadwerkelijke openbare IP-adres van Vultr en uw daadwerkelijke domeinnaam vervangt.

Update uw basissysteem met behulp van de handleiding Ubuntu 16.04 bijwerken . Zodra uw systeem is bijgewerkt, gaat u verder met het installeren van PostgreSQL.

Installeer en configureer de PostgreSQL-database

PostgreSQL is een relationeel databasesysteem voor objecten. Concourse slaat zijn pijplijngegevens op in een PostgreSQL-database. Voeg de PostgreSQL-repository toe.

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

Installeer de PostgreSQL-databaseserver.

sudo apt -y install postgresql

Start de PostgreSQL-server en schakel deze in om automatisch te starten tijdens het opstarten.

sudo systemctl start postgresql
sudo systemctl enable postgresql

Wijzig het wachtwoord voor de standaard PostgreSQL-gebruiker.

sudo passwd postgres

Log in als de PostgreSQL-gebruiker:

sudo su - postgres

Maak een nieuwe PostgreSQL-gebruiker voor Concourse CI.

createuser concourse

Opmerking : de standaard PostgreSQL-gebruiker kan worden gebruikt voor authenticatie van de database, maar het wordt aanbevolen om een ​​toegewijde gebruiker te gebruiken voor authenticatie van Concourse-database in een productie-setup.

PostgreSQL biedt een shell om query's op de database uit te voeren. Schakel over naar de PostgreSQL-shell.

psql

Stel een wachtwoord in voor de zojuist aangemaakte gebruiker van de Concourse-database.

ALTER USER concourse WITH ENCRYPTED password 'DBPassword';

Belangrijk : vervang DBPassword door een sterk wachtwoord. Noteer het wachtwoord, dat later in de tutorial nodig is.

Maak een nieuwe database voor Concourse.

CREATE DATABASE concourse OWNER concourse;

Verlaat de psql schelp.

\q

Schakel over naar de sudo-gebruiker van de huidige postgresgebruiker.

exit

Download en installeer Concourse CI

Download de nieuwste versie van het Concourse-uitvoerbare bestand en sla het op /usr/bin zodat het direct kan worden uitgevoerd. De laatste versie van de Concourse en Fly binaries is te vinden op de Concourse downloadpagina . Nieuwe releases zijn zeer frequent. Vervang de onderstaande link door de nieuwe link voor de meest recente versie.

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

Download op dezelfde manier de nieuwste versie van het fly-uitvoerbare bestand en sla het op /usr/bin.

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

Fly is de opdrachtregelinterface die wordt gebruikt om verbinding te maken met de ATC API van Concourse CI. Fly is beschikbaar voor meerdere platforms zoals Linux, Windows en MacOS.

Wijs uitvoeringsrechten toe aan de gedownloade concourse en fly binaire bestanden .

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

Controleer of Concourse en Fly correct werken door hun versie te controleren.

concourse -version
fly -version

Genereer en stel RSA-sleutels in

RSA-sleutelparen bieden een manier om de communicatie tussen de componenten van de Concourse te versleutelen.

Om Concourse te laten werken, moeten er minimaal drie paar sleutels worden gegenereerd. Voor het versleutelen van de sessiegegevens, genereer een session_signing_key. Deze sleutel zal ook door TSA worden gebruikt om de verzoeken die het doet aan de ATC te ondertekenen. Om de TSA SSH-server te beveiligen, genereert u een tsa_host_key. Genereer ten slotte een worker_key voor elke werknemer.

Maak een nieuwe map om de sleutels en configuratie met betrekking tot Concourse CI op te slaan.

sudo mkdir /opt/concourse

Genereer de vereiste sleutels.

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

Autoriseer de openbare sleutel van de arbeiders door de inhoud ervan naar het authorized_worker_keys bestand te kopiëren .

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

Concourse starten

Concourse biedt twee afzonderlijke componenten die moeten worden gestart: het web en de werker. Start het Concourse-web.

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

Wijzig basic-auth desgewenst de gebruikersnaam en het wachtwoord van de . Zorg ervoor dat het pad naar de sleutelbestanden correct is en zorg ervoor dat de juiste waarde voor gebruikersnaam en wachtwoord in de PostgreSQL-databaseconfiguratie wordt opgegeven.

Opmerking : ATC luistert naar de standaardpoort 8080 en TSA luistert naar de poort 2222. Als authenticatie niet gewenst is, geeft u de --no-really-i-dont-want-any-authoptie door na het verwijderen van de basisauth-opties.

Zodra de webserver is gestart, wordt de volgende uitvoer weergegeven.

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

Stop de server voorlopig, want er moeten nog een paar dingen worden ingesteld.

Start de 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

Het bovenstaande commando gaat ervan uit dat de TSA op localhost draait en luistert naar de standaardpoort 2222.

Hoewel het Concourse-web en de werker gemakkelijk kunnen worden gestart met behulp van de bovenstaande opdrachten, wordt het aanbevolen om Systemd te gebruiken om de server te beheren.

Configureer Environment and Systemd Service

Het gebruik van de Systemd-service voor het beheren van de applicatie zorgt ervoor dat de applicatie automatisch wordt gestart bij storingen en tijdens het opstarten. De Concourse-server neemt geen gegevens van enig configuratiebestand, maar heeft toegang tot de gegevens van omgevingsvariabelen. In plaats van globale omgevingsvariabelen in te stellen, maakt u een nieuw bestand om de omgevingsvariabelen op te slaan en geeft u de variabelen vervolgens door aan de Concourse CI met behulp van de Systemd-service.

Maak een nieuw omgevingsbestand voor Concourse web.

sudo nano /opt/concourse/web.env

Vul het bestand in.

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

Wijzig BASIC_AUTH desgewenst de gebruikersnaam en het wachtwoord van de . Zorg ervoor dat het pad naar de sleutelbestanden correct is en zorg ervoor dat de juiste waarde voor gebruikersnaam en wachtwoord in de PostgreSQL-databaseconfiguratie wordt opgegeven.

Maak op dezelfde manier een omgevingsbestand voor de werknemer.

sudo nano /opt/concourse/worker.env

Vul het bestand in.

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

Aangezien de omgevingsbestanden gebruikersnamen en wachtwoorden bevatten, moet u de rechten wijzigen zodat ze niet toegankelijk zijn voor andere gebruikers.

sudo chmod 600 /opt/concourse/*.env

Maak nu een nieuwe gebruiker voor Concourse om de webomgeving te gebruiken. Dit zorgt ervoor dat de webserver in een geïsoleerde omgeving draait.

sudo useradd concourse

Geef de concourse-gebruiker het eigendom over de directory van het Concourse CI-bestand.

sudo chown -R concourse:concourse /opt/concourse

Maak een nieuw systemd-servicebestand voor de Concourse-webservice.

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

Vul het bestand in.

[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

Sla het bestand op en sluit het. Maak een nieuw servicebestand voor de Concourse-werkerservice.

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

Vul het bestand in.

[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

De web- en werkerservice kan nu direct worden gestart.

sudo systemctl start concourse-web concourse-worker

Voer het volgende uit om ervoor te zorgen dat het werker- en webproces automatisch begint tijdens het opstarten.

sudo systemctl enable concourse-worker concourse-web

Voer het volgende uit om de status van services te controleren.

sudo systemctl status concourse-worker concourse-web

Als de service niet is gestart of zich in de FAILED staat bevindt, verwijdert u de cache uit de /tmp directory.

sudo rm -rf /tmp/*

Start de services opnieuw op.

sudo systemctl restart concourse-worker concourse-web

Merk op dat deze keer de services correct zijn gestart. De output bij het verifiëren van de status van de services is vergelijkbaar met de volgende.

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

Verbinding maken met de server

Zodra de server is opgestart, is de webinterface van de Concourse CI toegankelijk door naar http://192.0.2.1:8080 in elke browser te gaan. Log in met de gebruikersnaam en het wachtwoord in het omgevingsbestand.

Voer de volgende stappen uit om verbinding te maken met de server via Fly.

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

De bovenstaande opdracht wordt gebruikt voor de eerste aanmelding bij de server. -t wordt gebruikt om een ​​doelnaam op te geven. vervang my-ci door een gewenste doelnaam. De bovenstaande opdracht logt in bij het standaardteam main. Het vraagt ​​om de gebruikersnaam en het wachtwoord die in het omgevingsbestand zijn opgegeven.

De uitvoer ziet er als volgt uit.

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

username: admin
password:

target saved

De doelaanmelding wordt een dag bewaard. Daarna vervalt het.

Om direct uit te loggen.

fly -t my-ci logout

Fly kan worden gebruikt om in te loggen op de server buiten het netwerk, maar alleen als de server een openbaar IP-adres heeft en toegankelijk is van buiten het netwerk. Het Windows- of MacOS-binaire bestand kan worden gedownload van de downloadsite of van de web-UI van de server.

Nginx Reverse Proxy instellen

Aanmeldingen en andere informatie die via de web-UI naar de Concourse-server wordt verzonden, zijn niet beveiligd. De verbinding is niet versleuteld. Een reverse proxy van Nginx kan worden opgezet met een Let's Encrypt gratis SSL.

Installeer Nginx.

sudo apt -y install nginx

Start Nginx en schakel het automatisch in tijdens het opstarten.

sudo systemctl start nginx
sudo systemctl enable nginx

Voeg de Certbot-repository toe.

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

Installeer Certbot, de clienttoepassing voor Let's Encrypt CA.

sudo apt -y install certbot

Opmerking : om certificaten van Let's Encrypt CA te verkrijgen, moet het domein waarvoor de certificaten moeten worden gegenereerd, naar de server worden gericht. Zo niet, breng dan de nodige wijzigingen aan in de DNS-records van het domein en wacht tot de DNS is gepropageerd voordat u opnieuw een certificaataanvraag indient. Certbot controleert de domeinautoriteit voordat de certificaten worden verstrekt.

Genereer de SSL-certificaten.

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

De gegenereerde certificaten worden waarschijnlijk in de /etc/letsencrypt/live/ci.example.com/ directory opgeslagen . Het SSL-certificaat wordt opgeslagen als fullchain.pem en de privésleutel wordt opgeslagen als privkey.pem.

Let's Encrypt-certificaten verlopen over 90 dagen, dus het wordt aanbevolen om automatische verlenging van de certificaten te gebruiken met cronjobs. Cron is een systeemservice die wordt gebruikt om periodieke taken uit te voeren.

Open het cron-taakbestand.

sudo crontab -e

Voeg de volgende regel toe aan het einde van het bestand.

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

De bovenstaande cron-taak wordt elke dag om 05.30 uur uitgevoerd. Als het certificaat vervalt, wordt het automatisch verlengd.

Maak een nieuwe virtuele host.

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

Vul het bestand in.

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;
    }
  }

Opmerking : vervang ci.example.com door het daadwerkelijke domein.

Activeer het configuratiebestand.

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

Bewerk het omgevingsbestand dat is gemaakt voor Concourse Web.

sudo nano /opt/concourse/web.env

Wijzig de waarde van CONCOURSE_EXTERNAL_URL en voeg ook nog twee regels toe aan het einde van het bestand.

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

Sla het bestand op en start Concourse Web, Worker en Nginx opnieuw op.

sudo systemctl restart concourse-worker concourse-web nginx

Alle gegevens die van en naar de browser worden verzonden, zijn nu beveiligd met SSL-coderingen.



Leave a Comment

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Ransomware-aanvallen nemen toe, maar kan AI helpen het nieuwste computervirus het hoofd te bieden? Is AI het antwoord? Lees hier weten is AI boezem of vloek

ReactOS: is dit de toekomst van Windows?

ReactOS: is dit de toekomst van Windows?

ReactOS, een open source en gratis besturingssysteem is hier met de nieuwste versie. Kan het voldoen aan de behoeften van moderne Windows-gebruikers en Microsoft uitschakelen? Laten we meer te weten komen over deze oude stijl, maar een nieuwere OS-ervaring.

Blijf verbonden via WhatsApp Desktop-app 24 * 7

Blijf verbonden via WhatsApp Desktop-app 24 * 7

WhatsApp heeft eindelijk de Desktop-app voor Mac- en Windows-gebruikers gelanceerd. Nu heb je eenvoudig toegang tot WhatsApp vanuit Windows of Mac. Beschikbaar voor Windows 8+ en Mac OS 10.9+

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Lees dit om te weten hoe kunstmatige intelligentie populair wordt onder de kleinschalige bedrijven en hoe het de kansen vergroot om ze te laten groeien en hun concurrenten voorsprong te geven.

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

Onlangs heeft Apple macOS Catalina 10.15.4 uitgebracht, een aanvullende update om problemen op te lossen, maar het lijkt erop dat de update meer problemen veroorzaakt die ertoe leiden dat mac-machines worden gemetseld. Lees dit artikel voor meer informatie

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

Wat is een logboekbestandssysteem en hoe werkt het?

Wat is een logboekbestandssysteem en hoe werkt het?

Onze computer slaat alle gegevens op een georganiseerde manier op, het zogenaamde Journaling-bestandssysteem. Het is een efficiënte methode waarmee de computer bestanden kan zoeken en weergeven zodra u op zoeken drukt.https://wethegeek.com/?p=94116&preview=true

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Naarmate de wetenschap zich snel ontwikkelt en veel van onze inspanningen overneemt, nemen ook de risico's toe om onszelf te onderwerpen aan een onverklaarbare singulariteit. Lees, wat singulariteit voor ons kan betekenen.

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

AI in de zorg heeft de afgelopen decennia grote sprongen gemaakt. De toekomst van AI in de gezondheidszorg groeit dus nog steeds met de dag.