Dieses Tutorial beschreibt die Installation der neuesten Version des Automatisierungsservers ** Jenkins ** auf ** Alibaba Cloud ECS Ubuntu 16 **.
Alibaba Cloud Tech Share Autor Liptan Biswas, Tech Share /techshare?spm=a2c65.11461447.0.0.789b4a54a4WRLd) ist ein Alibaba Cloud-Incentive-Programm, das den Austausch von technischem Wissen und Best Practices innerhalb der Cloud-Community fördert.
Jenkins ist ein selbst gehosteter Open Source-Automatisierungsserver. Es ist bei DevOps-Ingenieuren sehr beliebt für die Implementierung einer kontinuierlichen Integration und Bereitstellung im Softwareentwicklungslebenszyklus. Jenkins wurde in Java geschrieben und bietet sofort einsatzbereite Unterstützung für die Erstellung von Apache Ant-, Maven- und sbt-Projekten. Sie können auch Batch-Skripte für Linux-Shells und Windows ausführen. Mehrere Versionsverwaltungssysteme wie Git, Mercurial, Subversion und CVS werden von Jenkins vollständig unterstützt. Es stehen mindestens 1000 Arten von Plug-Ins zur Verfügung, um die Funktionalität Ihrer Anwendung zu verbessern.
Builds in Jenkins können auf verschiedene Arten ausgelöst werden, z. B. durch Planen eines Builds zu einem bestimmten Zeitpunkt oder Aufrufen der Build-URL, nachdem eine Änderung im Quellcode des Versionskontrollsystems festgestellt wurde. Wenn der Build ausgelöst wird, ruft Jenkins den Quellcode aus dem Repository ab und startet den Build. Die automatisierten Tests werden ausgeführt und die Ausgabe gemäß den bereitgestellten Einstellungen gespeichert. Jenkins kann auch Pakete liefern, die nach einem erfolgreichen Build generiert wurden.
Dieses dreiteilige Tutorial zeigt Ihnen, wie Sie Jenkins installieren und wie Sie Jenkins für die kontinuierliche Integration und Bereitstellung verwenden.
Teil 1 dieses Tutorials ist mit der Ubuntu 16.04 64-Bit-Alibaba-Cloud Elastic Computer Service (ECS) -Instanz auf dem neuesten Stand. Installieren Sie die Version von Jenkins Automation Server. Richten Sie außerdem einen sicheren Nginx-Reverse-Proxy ein, um auf Ihre Jenkins-Instanz zuzugreifen. In Teil 2 erstellen Sie eine Beispiel-Java-Webanwendung als Maven-Projekt. Wir werden auch mit dem Erstellen eines Build-Jobs in Jenkins fortfahren. Schließlich automatisiert Teil 3 des Tutorials den Erstellungsprozess. Sie erfahren auch, wie Sie Jenkins für die kontinuierliche Lieferung verwenden.
1, [Alibaba Cloud ECS](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.789b4a54a4WRLd&biz_params=%7B%22intl%22:%22%7B%5C%22referralCode%5C% :% 5C% 22fmj2og% 5C% 22% 7D% 22% 7D) Ubuntu 16.04 64-Bit ist auf der Instanz installiert. 2. Eine Firewall- oder Sicherheitsgruppenregel, die so konfiguriert ist, dass die Ports "80" und "443" zugelassen werden. 3, Für ECS-Instanzen Erforderlich [Domainname](https: // www) .alibabacloud.com / domain? spm = a2c65.11461447.0.0.789b4a54a4WRLd & biz_params =% 7B% 22intl% 22:% 22% 7B% 22referralCode% 22:% 22fmj2og% 22% 7D% 22% 7D).
Anweisungen zum Erstellen und Herstellen einer Instanz finden Sie in der Kurzanleitung (https://www.alibabacloud.com/help/doc-detail/25422.htm?spm=a2c65.11461447.0.0.789b4a54a4WRLd). "Bitte folgen Sie dem. In diesem Tutorial haben Sie bereits eine Alibaba-Instanz erstellt und "jenkins.example.com" so festgelegt, dass sie auf Ihre Ubuntu-Instanz verweist. Es wird angenommen, dass Sie es sind. Führen Sie nach dem Herstellen einer Verbindung zur Instanz über SSH den folgenden Befehl aus, um den Repository-Cache und das Basissystem zu aktualisieren.
apt update && apt -y upgrade & apt -y autoremove
Es ist am besten, einen Sudo-Benutzer zu erstellen und alle Befehle auszuführen, anstatt alle Befehle als Root-Benutzer auszuführen. Jetzt erstellen wir einen Sudo-Benutzer. Sie können einen beliebigen Benutzernamen verwenden.
adduser aliyun
Fügen Sie den Benutzer nach dem Erstellen der Sudo-Gruppe hinzu.
usermod -aG sudo aliyun
Wechseln Sie nun zum neu erstellten Benutzer.
su - aliyun
Legen Sie den vollqualifizierten Domänennamen oder den vollqualifizierten Domänennamen als Hostnamen des Servers fest. Das Festlegen des Hostnamens ist nicht obligatorisch, aber Jenkins zeigt eine Warnmeldung an, wenn der Hostname nicht richtig eingestellt ist.
sudo hostnamectl set-hostname jenkins.example.com
Fügen Sie in ähnlicher Weise den Domänennamen zur Datei / etc / hosts hinzu.
echo "127.0.0.0.1 jenkins.example.com" | sudo tee -a /etc/hosts
Jenkins ist in Java geschrieben und Sie müssen möglicherweise in Zukunft Java-Anwendungen erstellen. Fahren wir also mit der Installation des Java Development Kit und des JDK fort. Jenkins unterstützt sowohl Oracle Java 8 als auch OpenJDK 8. Dieses Tutorial installiert Oracle Java Version 8. Oracle Java ist sowohl mit Java Runtime (JRE) als auch mit JDK gepackt. Fügen Sie das Oracle Java PPA-Repository hinzu.
sudo apt install -y software-properties-common
sudo add-apt-repository --yes ppa:webupd8team/java
sudo apt update
Installieren Sie Oracle Java 8.
sudo apt -y install oracle-java8-installer
Sie können überprüfen, ob Java erfolgreich installiert wurde, indem Sie den Befehl java -version ausführen.
aliyun@jenkins:~$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
Installieren Sie die folgenden Pakete und legen Sie den Standardpfad für java_home fest.
sudo apt -y install oracle-java8-set-default
Sie können jetzt überprüfen, ob die Variable JAVA_HOME festgelegt ist, indem Sie echo $ JAVA_HOME ausführen. Möglicherweise müssen Sie sich auch abmelden und wieder anmelden, um die gewünschte Ausgabe zu erhalten.
aliyun@jenkins:~$ echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle
Jenkins kann einfach über ein Repository installiert werden, das das Projekt selbst aktiv verwaltet. Durch die Installation über das Repository können Sie in Zukunft problemlos ein Upgrade durchführen, indem Sie den Befehl apt upgrade direkt verwenden. Importieren Sie den Schlüssel zum Signieren des Pakets in das Jenkins-Repository. Dadurch wird sichergestellt, dass das richtige Paket installiert ist.
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -.
Erstellen Sie eine neue Repository-Listendatei für Jenkins.
echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list
Installieren Sie Jenkins.
sudo apt update
sudo apt -y install jenkins git
Ich installiere Jenkins aus einem vom Projekt verwalteten Repository, daher muss ich die neueste verfügbare Version der Anwendung installieren. Git ist erforderlich, um das Git-Plugin auf Jenkins auszuführen. Führen Sie es aus, um Jenkins zu starten und es beim Start automatisch starten zu lassen.
sudo systemctl start jenkins
sudo systemctl enable jenkins
Sie können den Status des Dienstes mit dem Befehl systemctl status jenkins überprüfen.
aliyun@jenkins:~$ sudo systemctl status jenkins
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; bad; vendor preset: enabled)
Active: active (exited) since Fri 2018-05-04 12:37:03 UTC; 35s ago
Docs: man:systemd-sysv-generator(8)
May 04 12:37:02 jenkins.liptan.tk systemd[1]: Starting LSB: Start Jenkins at boot time...
May 04 12:37:02 jenkins.liptan.tk jenkins[4787]: * Starting Jenkins Automation Server jenkins
Führen Sie den folgenden Befehl aus, um die mit dem Jenkins-Server selbst verknüpften Protokolle anzuzeigen:
tail -f /var/log/jenkins/jenkins.log
Der erste Start von Jenkins wird einige Minuten dauern. Wenn in der Ausgabe die folgende Zeile angezeigt wird, ist Ihre Anwendung bereit.
aliyun@jenkins:~$ tail -f /var/log/jenkins/jenkins.log
May 02, 2018 2:14:29 PM hudson.WebAppMain$3 run
INFO: Jenkins is fully up and running
Jenkins läuft jetzt auf Ihrem Server. Fahren Sie mit der Nginx-Installation fort, damit Sie mit Ihrem Domain-Namen problemlos auf Ihre Jenkins-Instanz zugreifen können.
Hinweis: Wenn der Domänenname nicht so konfiguriert ist, dass er auf die Alibaba Cloud ECS-Instanz verweist, öffnen Sie den Port "808080" über die Sicherheitsgruppe der ECS-Instanz und öffnen Sie [http://172.16.0.1:8080](http: / /172.16.0.1:8080/?spm=a2c65.11461447.0.0.789b4a54a4WRLd), 172.16.0.1 kann auf die Jenkins-Instanz zugreifen, bei der es sich um die öffentliche IP-Adresse der ECS-Instanz handelt. Überspringen Sie den Nginx-Installationsabschnitt und folgen Sie dem Tutorial von Final Setup.
Jenkins verfügt über einen integrierten Webserver zum Bereitstellen von Anwendungen auf Port "808080". Es wird jedoch nicht empfohlen, einen solchen Webserver im Internet in einer Produktionsumgebung zu veröffentlichen. In diesem Lernprogramm wird Nginx als Reverse-Proxy verwendet, der Anforderungen von Clients an den Jenkins-Server weiterleitet. Das Einrichten eines Reverse-Proxys mit einem Domänennamen verbessert auch die Zugänglichkeit der Instanz, sodass Sie sich die IP-Adresse der Instanz nicht merken müssen.
Installieren Sie den Nginx-Webserver.
sudo apt -y install nginx
Starten Sie Nginx so, dass der Server beim Start automatisch gestartet wird.
sudo systemctl start nginx
sudo systemctl enable nginx
Es ist auch wichtig, Ihren Webserver mit SSL / TLS-Verschlüsselung zu schützen, da Anmeldungen und andere wichtige Daten vom Client an den Webserver gesendet werden und umgekehrt. Wenn die ausgetauschten Daten unverschlüsselt sind, können die Daten im Netzwerk gestohlen werden. In diesem Lernprogramm wird das kostenlose SSL-Zertifikat von Let's Encrypt CA verwendet. Wenn Sie ein produktionsfreundlicheres und zuverlässigeres SSL verwenden möchten, SSL-Zertifikat von Alibaba Cloud erwerben können.
Let's Encrypt bietet "Certbot", ein Tool, mit dem Zertifikate einfach angefordert und generiert werden können. Fügen Sie das Certbot-Repository zu Ihrem System hinzu und installieren Sie Certbot.
sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt update
sudo apt -y install certbot
Damit Certbot den Besitz einer Domain überprüfen kann, ist es wichtig, dass die Domain auf eine ECS-Instanz verweist. Andernfalls wird das Domänenzertifikat nicht generiert und ein Fehler angezeigt. Verwenden Sie Certbot, um ein Zertifikat anzufordern.
sudo certbot certonly --webroot -w /var/www/html -d jenkins.example.com
Wenn das Zertifikat generiert wird, wird eine Ausgabe ähnlich der folgenden angezeigt:
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for jenkins.example.com
Using the webroot path /var/www/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/jenkins.example.com/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/jenkins.example.com/privkey.pem
...
Erstellen Sie einen Cron-Job für die automatische Verlängerung, bevor das Zertifikat abläuft.
{ sudo crontab -l; echo '36 2 * * * * /usr/bin/certbot renew --post-hook "systemctl reload nginx"; } } | sudo crontab -l.
Sie können überprüfen, ob ein Cron-Job erstellt wurde, indem Sie den Befehl sudo crontab -l ausführen.
aliyun@jenkins:~$ sudo crontab -l
36 2 * * * /usr/bin/certbot renew --post-hook "systemctl reload nginx"
Erstellen Sie einen neuen Nginx-Serverblock für den Jenkins-Reverse-Proxy.
sudo nano /etc/nginx/sites-available/jenkins
Geben Sie im Editor die folgenden Einstellungen ein. Stellen Sie sicher, dass alle Vorkommen der Beispieldomäne durch die tatsächliche Domäne ersetzt werden.
upstream jenkins {
keepalive 32;
server 127.0.0.1:8080;
}
server {
listen 80;
server_name jenkins.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443;
server_name jenkins.example.com;
root /var/cache/jenkins/war/;
ssl_certificate /etc/letsencrypt/live/jenkins.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jenkins.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;
gzip on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/javascript text/xml application/xml application/rss+xml application/atom+xml application/rdf+xml;
gzip_buffers 16 8k;
gzip_disable "MSIE [1-6].(?!.*SV1)";
access_log /var/log/nginx/jenkins.access.log;
error_log /var/log/nginx/jenkins.error.log;
ignore_invalid_headers off;
location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" {
rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last;
}
location /userContent {
root /var/lib/jenkins/;
if (!-f $request_filename){
rewrite (.*) /$1 last;
break;
}
sendfile on;
}
location @jenkins {
sendfile off;
proxy_pass http://jenkins;
proxy_redirect default;
proxy_http_version 1.1;
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_max_temp_file_size 0;
client_max_body_size 10m;
client_body_buffer_size 128k;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_request_buffering off;
proxy_set_header Connection "";
}
location / {
if ($http_user_agent ~* '(iPhone|iPod)') {
rewrite ^/$ /view/iphone/ redirect;
}
try_files $uri @jenkins;
}
}
Aktivieren Sie die Konfigurationsdatei.
sudo ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/jenkins
Sie können die Konfigurationsdatei auf Fehler überprüfen, indem Sie sudo nginx -t ausführen.
aliyun@jenkins:~$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Starten Sie den Nginx-Webserver neu, damit die Konfigurationsänderungen wirksam werden.
sudo systemctl restart nginx
Der Zugriff auf Port "8080" ist nicht mehr erforderlich, da wir den Nginx-Reverse-Proxy für den Zugriff auf Jenkins verwenden. Wenn Sie den Zugriff auf Port "808080" in der Sicherheitsgruppe der Firewall oder ECS-Instanz aktiviert haben, können Sie ihn sicher entfernen. Ändern Sie die Einstellungen in der Jenkins-Standardkonfigurationsdatei, um den in Jenkins integrierten Server so zu konfigurieren, dass er nur auf Verbindungen vom lokalen Host wartet. Öffnen Sie die Einstellungsdatei.
sudo nano /etc/default/jenkins
Suchen Sie die folgende Zeile am Ende der Datei:
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT”
Ändern Sie die Einstellungen wie folgt.
HTTP_HOST=127.0.0.1
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=$HTTP_HOST"
Speichern Sie die Datei und beenden Sie den Editor. Führen Sie die Jenkins-Instanz aus und starten Sie sie neu.
sudo systemctl restart jenkins
Der integrierte Server von Jenkins akzeptiert jetzt nur Verbindungen von lokalen Hosts. Nur der Nginx-Proxy kann sicher darauf zugreifen.
Sie können von Ihrem bevorzugten Browser aus auf Ihre Jenkins-Instanz zugreifen, indem Sie die URL https://jenkins.example.com besuchen.
Während der Installation generiert Jenkins ein anfängliches Passwort. Dieses anfängliche Passwort ist erforderlich, um das Jenkins-Setup in Ihrem Browser abzuschließen. Wenn Sie über Ihren Browser auf Ihre Jenkins-Instanz zugreifen, werden Sie nach einem Administratorkennwort gefragt. Drucken Sie das anfängliche Administratorkennwort auf dem Terminal aus.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Sie sollten eine ähnliche Ausgabe sehen.
aliyun@jenkins:~$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
84ae7775fec245e69305c6db08389d69
Kopieren Sie das Passwort von Ihrem Gerät und fügen Sie es in Ihren Browser ein.
Wenn das ursprüngliche Kennwort erfolgreich überprüft wurde, fordert Setup die Installation eines Plug-Ins an. Da Plugins einfach über die Jenkins-Oberfläche verwaltet werden können, wählen Sie hier die Option Vorgeschlagene Plugins installieren. Dadurch werden die beliebtesten und nützlichsten Plug-Ins installiert, um die Funktionalität von Jenkins zu erweitern.
Zu diesem Zeitpunkt installiert SETUP das empfohlene Plug-In. Es wird in wenigen Minuten abgeschlossen sein. Der Installationsstatus jedes Plug-Ins wird angezeigt.
Wenn das Plug-In erfolgreich installiert wurde, werden Sie vom Setup aufgefordert, ein Administratorkonto zu erstellen. Geben Sie die grundlegenden Kontodaten ein, nach denen Jenkins fragen wird.
Schließlich sehen Sie eine Nachricht, dass Jenkins bereit ist. Gehen Sie zu Anmelden und melden Sie sich mit dem zuvor erstellten Administratorkonto an. Das Jenkins-Dashboard wird angezeigt.
Das ist das Ende. Alibaba Cloud ECS Wir haben erfolgreich einen Jenkins-Automatisierungsserver unter Ubuntu 16.04 installiert. Wir haben auch einen Nginx-Reverse-Proxy eingerichtet, um die Sicherheit mit Let's Encrypt SSL zu gewährleisten. Nachdem Ihre Jenkins-Instanz fertig ist, können Sie mit dem Erstellen Ihres ersten Build-Jobs fortfahren.
[Zweite Hälfte des Tutorials](https://community.alibabacloud.com/blog/ci%2Fcd-with-jenkins---part-2%3A-use-jenkins-for-continuous-integration_593720?spm=a2c65.11461447.0. In 0.789b4a54a4WRLd) erstellen wir eine webbasierte Java-Beispielanwendung als Maven-Projekt. Konfigurieren Sie Jenkins außerdem für die Arbeit mit JDK, Git und Maven. Richten Sie abschließend ein Jenkin-basiertes Build-Projekt für die Beispielanwendung ein und führen Sie den ersten Build aus.
Recommended Posts