Εισαγωγή
Προαπαιτούμενα
Εγκαταστήστε και διαμορφώστε τη βάση δεδομένων PostgreSQL
Λήψη και εγκατάσταση του Concourse CI
Δημιουργία και ρύθμιση κλειδιών RSA
Έναρξη Concourse
Διαμόρφωση υπηρεσίας περιβάλλοντος και συστήματος
Σύνδεση με τον διακομιστή
Ρύθμιση του Nginx Reverse Proxy
Εισαγωγή
Η συνεχής ενσωμάτωση είναι μια πρακτική ανάπτυξης λογισμικού DevOps που επιτρέπει στους προγραμματιστές να συγχωνεύουν συχνά τον τροποποιημένο κώδικα στο κοινόχρηστο αποθετήριο πολλές φορές την ημέρα. Μετά από κάθε συγχώνευση, εκτελούνται αυτόματες εκδόσεις και δοκιμές για τον εντοπισμό προβλημάτων στον κώδικα. Επιτρέπει στους προγραμματιστές να βρίσκουν και να επιλύουν γρήγορα τα σφάλματα για να βελτιώσουν την ποιότητα του λογισμικού και να παρέχουν συνεχή παράδοση του λογισμικού. Η εναλλαγή από το Concourse είναι πολύ εύκολη, καθώς διατηρεί όλες τις παραμέτρους του σε δηλωτικά αρχεία που μπορούν να ελεγχθούν στον έλεγχο έκδοσης. Παρέχει επίσης μια διεπαφή χρήστη Ιστού που εμφανίζει τις πληροφορίες κατασκευής διαδραστικά.
Συστατικά Συνεδρίου.
- Το ATC είναι το κύριο συστατικό του Concourse. Είναι υπεύθυνο για την εκτέλεση της διεπαφής χρήστη και του API Ιστού. Φροντίζει επίσης για όλο τον προγραμματισμό των αγωγών.
- Το TSA είναι ένας προσαρμοσμένος διακομιστής SSH. Είναι υπεύθυνο για την ασφαλή εγγραφή ενός εργαζομένου στο ATC.
- Οι εργαζόμενοι εκτελούν περαιτέρω δύο διαφορετικές υπηρεσίες:
- Το Garden είναι ένας χρόνος εκτέλεσης κοντέινερ και μια διεπαφή για την ενορχήστρωση κοντέινερ εξ αποστάσεως σε έναν εργαζόμενο.
- Το Baggageclaim είναι ένας διακομιστής διαχείρισης κρυφής μνήμης και τεχνουργημάτων.
- Το Fly είναι μια διεπαφή γραμμής εντολών που χρησιμοποιείται για την αλληλεπίδραση με το ATC για τη διαμόρφωση των αγωγών Concourse.
Προαπαιτούμενα
- Μια παρουσία διακομιστή Vultr Ubuntu 16.04.
- Ένας χρήστης sudo .
Φροντίστε να αντικαταστήσετε όλες τις εμφανίσεις 192.0.2.1 και ci.example.com με την πραγματική δημόσια διεύθυνση IP του Vultr και το πραγματικό όνομα τομέα σας.
Ενημερώστε το βασικό σας σύστημα χρησιμοποιώντας τον οδηγό Πώς να ενημερώσετε το Ubuntu 16.04 . Αφού ενημερωθεί το σύστημά σας, προχωρήστε στην εγκατάσταση της PostgreSQL.
Εγκαταστήστε και διαμορφώστε τη βάση δεδομένων PostgreSQL
Το PostgreSQL είναι ένα σύστημα σχεσιακής βάσης δεδομένων αντικειμένων. Το Concourse αποθηκεύει τα δεδομένα διοχέτευσης σε μια βάση δεδομένων PostgreSQL. Προσθέστε το αποθετήριο 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
Εγκαταστήστε τον διακομιστή βάσης δεδομένων PostgreSQL.
sudo apt -y install postgresql
Ξεκινήστε τον διακομιστή PostgreSQL και ενεργοποιήστε τον να ξεκινά αυτόματα κατά την εκκίνηση.
sudo systemctl start postgresql
sudo systemctl enable postgresql
Αλλάξτε τον κωδικό πρόσβασης για τον προεπιλεγμένο χρήστη PostgreSQL.
sudo passwd postgres
Συνδεθείτε ως χρήστης PostgreSQL:
sudo su - postgres
Δημιουργήστε έναν νέο χρήστη PostgreSQL για το Concourse CI.
createuser concourse
Σημείωση : Ο προεπιλεγμένος χρήστης PostgreSQL μπορεί να χρησιμοποιηθεί για τον έλεγχο ταυτότητας της βάσης δεδομένων, αλλά συνιστάται η χρήση αποκλειστικού χρήστη για τον έλεγχο ταυτότητας της βάσης δεδομένων Concourse σε μια εγκατάσταση παραγωγής.
Η PostgreSQL παρέχει ένα κέλυφος για την εκτέλεση ερωτημάτων στη βάση δεδομένων. Μεταβείτε στο κέλυφος PostgreSQL.
psql
Ορίστε έναν κωδικό πρόσβασης για τον νέο χρήστη της βάσης δεδομένων Concourse.
ALTER USER concourse WITH ENCRYPTED password 'DBPassword';
Σημαντικό : Αντικαταστήστε DBPassword με έναν ισχυρό κωδικό πρόσβασης. Σημειώστε τον κωδικό πρόσβασης, καθώς θα απαιτηθεί αργότερα στο σεμινάριο.
Δημιουργήστε μια νέα βάση δεδομένων για το Concourse.
CREATE DATABASE concourse OWNER concourse;
Βγείτε από το psql κέλυφος.
\q
Μετάβαση στον χρήστη sudo από τον τρέχοντα postgresχρήστη.
exit
Λήψη και εγκατάσταση του Concourse CI
Πραγματοποιήστε λήψη της πιο πρόσφατης έκδοσης του εκτελέσιμου Concourse και αποθηκεύστε το /usr/bin έτσι ώστε να μπορεί να εκτελεστεί απευθείας. Η πιο πρόσφατη έκδοση των δυαδικών αρχείων Concourse και Fly βρίσκεται στη σελίδα λήψης Concourse . Οι νέες κυκλοφορίες είναι πολύ συχνές. Αντικαταστήστε τον παρακάτω σύνδεσμο με τον νέο σύνδεσμο για την πιο πρόσφατη έκδοση.
sudo wget https://github.com/concourse/concourse/releases/download/v3.10.0/concourse_linux_amd64 -O /usr/bin/concourse
Ομοίως, πραγματοποιήστε λήψη της πιο πρόσφατης έκδοσης του εκτελέσιμου αρχείου fly και αποθηκεύστε το στο /usr/bin.
sudo wget https://github.com/concourse/concourse/releases/download/v3.10.0/fly_linux_amd64 -O /usr/bin/fly
Το Fly είναι η διεπαφή γραμμής εντολών που χρησιμοποιείται για τη σύνδεση στο ATC API του Concourse CI. Το Fly είναι διαθέσιμο για πολλές πλατφόρμες όπως Linux, Windows και MacOS.
Εκχωρήστε άδεια εκτέλεσης στα ληφθέντα concourse και fly δυαδικά αρχεία.
sudo chmod +x /usr/bin/concourse /usr/bin/fly
Ελέγξτε εάν τα Concourse and Fly λειτουργούν σωστά ελέγχοντας την έκδοσή τους.
concourse -version
fly -version
Δημιουργία και ρύθμιση κλειδιών RSA
Τα ζεύγη κλειδιών RSA παρέχουν έναν τρόπο κρυπτογράφησης της επικοινωνίας μεταξύ των στοιχείων του Concourse.
Για να λειτουργήσει το Concourse, πρέπει να δημιουργηθούν τουλάχιστον τρία ζεύγη κλειδιών. Για την κρυπτογράφηση των δεδομένων περιόδου λειτουργίας, δημιουργήστε ένα session_signing_key. Αυτό το κλειδί θα χρησιμοποιηθεί επίσης από την TSA για την υπογραφή των αιτημάτων που υποβάλλει στο ATC. Για να ασφαλίσετε τον διακομιστή TSA SSH, δημιουργήστε ένα tsa_host_key. Τέλος, δημιουργήστε ένα worker_key για κάθε εργαζόμενο.
Δημιουργήστε έναν νέο κατάλογο για να αποθηκεύσετε τα κλειδιά και τις ρυθμίσεις παραμέτρων που σχετίζονται με το Concourse CI.
sudo mkdir /opt/concourse
Δημιουργήστε τα απαιτούμενα κλειδιά.
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
Εξουσιοδοτήστε το δημόσιο κλειδί των εργαζομένων αντιγράφοντας τα περιεχόμενά του στο authorized_worker_keys αρχείο.
sudo cp /opt/concourse/worker_key.pub /opt/concourse/authorized_worker_keys
Έναρξη Concourse
Το Concourse παρέχει δύο ξεχωριστά στοιχεία που πρέπει να ξεκινήσουν: το web και το worker. Ξεκινήστε τον ιστό του 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
Αλλάξτε το όνομα χρήστη και τον κωδικό πρόσβασης του, basic-auth εάν θέλετε. Βεβαιωθείτε ότι η διαδρομή προς τα βασικά αρχεία είναι σωστή και βεβαιωθείτε ότι παρέχεται η σωστή τιμή για το όνομα χρήστη και τον κωδικό πρόσβασης στη διαμόρφωση της βάσης δεδομένων PostgreSQL.
Σημείωση : Το ATC θα ακούσει την προεπιλεγμένη θύρα 8080 και το TSA θα ακούσει τη θύρα 2222. Εάν δεν είναι επιθυμητός έλεγχος ταυτότητας, περάστε την --no-really-i-dont-want-any-authεπιλογή αφού αφαιρέσετε τις βασικές επιλογές ελέγχου ταυτότητας.
Μόλις ξεκινήσει ο διακομιστής web, θα εμφανιστεί η ακόλουθη έξοδος.
{"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"}}
Διακόψτε τον διακομιστή προς το παρόν, καθώς πρέπει να ρυθμίσετε μερικά ακόμη πράγματα.
Ξεκινήστε το 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
Η παραπάνω εντολή θα υποθέσει ότι το TSA εκτελείται σε localhost και ακούει την προεπιλεγμένη θύρα 2222.
Αν και ο ιστός του Concourse και ο εργαζόμενος μπορούν να ξεκινήσουν εύκολα χρησιμοποιώντας τις παραπάνω εντολές, συνιστάται η χρήση του Systemd για τη διαχείριση του διακομιστή.
Η χρήση της υπηρεσίας Systemd για τη διαχείριση της εφαρμογής διασφαλίζει ότι η εφαρμογή ξεκινά αυτόματα σε περίπτωση αποτυχίας και κατά την εκκίνηση. Ο διακομιστής Concourse δεν λαμβάνει δεδομένα από κανένα αρχείο διαμόρφωσης, αλλά μπορεί να έχει πρόσβαση στα δεδομένα από μεταβλητές περιβάλλοντος. Αντί να ορίσετε καθολικές μεταβλητές περιβάλλοντος, δημιουργήστε ένα νέο αρχείο για να αποθηκεύσετε τις μεταβλητές περιβάλλοντος και, στη συνέχεια, περάστε τις μεταβλητές στο Concourse CI χρησιμοποιώντας την υπηρεσία Systemd.
Δημιουργήστε ένα νέο αρχείο περιβάλλοντος για το Concourse web.
sudo nano /opt/concourse/web.env
Συμπληρώστε το αρχείο.
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
Η παραπάνω εντολή χρησιμοποιείται για την αρχική σύνδεση στο διακομιστή. -t χρησιμοποιείται για την παροχή ενός ονόματος στόχου. αντικαταστήστε my-ci με οποιοδήποτε επιθυμητό όνομα στόχου. Η παραπάνω εντολή θα συνδεθεί στην προεπιλεγμένη ομάδα main. Θα ζητήσει το όνομα χρήστη και τον κωδικό πρόσβασης που παρέχονται στο αρχείο περιβάλλοντος.
Η έξοδος θα μοιάζει με την ακόλουθη.
[user@vultr ~]$ fly -t my-ci login -c http://192.0.2.1:8080
logging in to team 'main'
username: admin
password:
target saved
Η σύνδεση στόχος θα αποθηκευτεί για μια ημέρα. Μετά από αυτό, θα λήξει.
Για να αποσυνδεθείτε αμέσως.
fly -t my-ci logout
Το Fly μπορεί να χρησιμοποιηθεί για σύνδεση στο διακομιστή εκτός δικτύου, αλλά μόνο εάν ο διακομιστής έχει δημόσια διεύθυνση IP και είναι προσβάσιμος εκτός δικτύου. Μπορείτε να κάνετε λήψη του δυαδικού αρχείου Windows ή MacOS από την τοποθεσία λήψης ή από το περιβάλλον εργασίας web του διακομιστή.
Ρύθμιση του Nginx Reverse Proxy
Οι συνδέσεις και άλλες πληροφορίες που αποστέλλονται μέσω της διεπαφής χρήστη web στον διακομιστή του Concourse δεν είναι ασφαλείς. Η σύνδεση δεν είναι κρυπτογραφημένη. Ένας αντίστροφος διακομιστής μεσολάβησης Nginx μπορεί να ρυθμιστεί με ένα δωρεάν SSL Let's Encrypt.
Εγκαταστήστε το Nginx.
sudo apt -y install nginx
Ξεκινήστε το Nginx και ενεργοποιήστε το να ξεκινά αυτόματα κατά την εκκίνηση.
sudo systemctl start nginx
sudo systemctl enable nginx
Προσθέστε το αποθετήριο Certbot.
sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt-get update
Εγκαταστήστε το Certbot, το οποίο είναι η εφαρμογή πελάτη για το Let's Encrypt CA.
sudo apt -y install certbot
Σημείωση : Για να αποκτήσετε πιστοποιητικά από το Let's Encrypt CA, ο τομέας για τον οποίο πρόκειται να δημιουργηθούν τα πιστοποιητικά πρέπει να κατευθύνεται προς τον διακομιστή. Εάν όχι, κάντε τις απαραίτητες αλλαγές στις εγγραφές DNS του τομέα και περιμένετε να διαδοθεί το DNS προτού υποβάλετε ξανά το αίτημα πιστοποιητικού. Το Certbot ελέγχει την αρχή τομέα πριν από την παροχή των πιστοποιητικών.
Δημιουργήστε τα πιστοποιητικά SSL.
sudo certbot certonly --webroot -w /var/www/html -d ci.example.com
Τα πιστοποιητικά που δημιουργούνται είναι πιθανό να αποθηκευτούν στον /etc/letsencrypt/live/ci.example.com/ κατάλογο. Το πιστοποιητικό SSL θα αποθηκευτεί ως fullchain.pem και το ιδιωτικό κλειδί θα αποθηκευτεί ως privkey.pem.
Τα πιστοποιητικά Let's Encrypt λήγουν σε 90 ημέρες, επομένως συνιστάται η αυτόματη ανανέωση για τα πιστοποιητικά να ρυθμίζεται με χρήση cronjob. Το Cron είναι μια υπηρεσία συστήματος που χρησιμοποιείται για την εκτέλεση περιοδικών εργασιών.
Ανοίξτε το αρχείο εργασίας cron.
sudo crontab -e
Προσθέστε την ακόλουθη γραμμή στο τέλος του αρχείου.
30 5 * * * /usr/bin/certbot renew --quiet
Η παραπάνω εργασία cron θα εκτελείται καθημερινά στις 5:30 π.μ. Εάν το πιστοποιητικό πρόκειται να λήξει, θα ανανεωθεί αυτόματα.
Δημιουργήστε έναν νέο εικονικό κεντρικό υπολογιστή.
sudo nano /etc/nginx/sites-available/concourse
Συμπληρώστε το αρχείο.
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;
}
}
Σημείωση : Αντικαταστήστε ci.example.com με τον πραγματικό τομέα.
Ενεργοποιήστε το αρχείο διαμόρφωσης.
sudo ln -s /etc/nginx/sites-available/concourse /etc/nginx/sites-enabled/concourse
Επεξεργαστείτε το αρχείο Environment που δημιουργήθηκε για το concourse Web.
sudo nano /opt/concourse/web.env
Αλλάξτε την τιμή του CONCOURSE_EXTERNAL_URL και προσθέστε επίσης δύο ακόμη γραμμές στο τέλος του αρχείου.
CONCOURSE_EXTERNAL_URL=https://ci.example.com
CONCOURSE_BIND_IP=127.0.0.1
CONCOURSE_BIND_PORT=8080
Αποθηκεύστε το αρχείο και επανεκκινήστε τα Concourse Web, Worker και Nginx.
sudo systemctl restart concourse-worker concourse-web nginx
Όλα τα δεδομένα που αποστέλλονται από και προς το πρόγραμμα περιήγησης είναι πλέον ασφαλισμένα με κρυπτογράφηση SSL.