Ce didacticiel décrit l'installation de la dernière version du serveur d'automatisation ** Jenkins ** sur ** Alibaba Cloud ECS Ubuntu 16 **.
Alibaba Cloud Tech Share Auteur Liptan Biswas, Tech Share /techshare?spm=a2c65.11461447.0.0.789b4a54a4WRLd) est un programme d'incitation Alibaba Cloud qui encourage le partage des connaissances techniques et des meilleures pratiques au sein de la communauté cloud.
Jenkins est un serveur d'automatisation auto-hébergé open source. Il est très populaire parmi les ingénieurs DevOps pour la mise en œuvre d'une intégration continue et d'une livraison continue dans le cycle de vie du développement logiciel. Écrit en Java, Jenkins fournit un support prêt à l'emploi pour la création de projets Apache Ant, Maven et sbt. Vous pouvez également exécuter des scripts batch pour les shells Linux et Windows. Les systèmes de gestion de versions multiples tels que Git, Mercurial, Subversion et CVS sont entièrement pris en charge par Jenkins. Au moins 1000 types de plug-ins sont disponibles pour améliorer les fonctionnalités de votre application.
Les builds dans Jenkins peuvent être déclenchés de plusieurs manières, par exemple en planifiant une build à un moment précis ou en appelant l'URL de build après avoir détecté un changement dans le code source du système de contrôle de version. Lorsque la construction est déclenchée, Jenkins récupère le code source du référentiel et démarre la construction. Les tests automatisés sont exécutés et la sortie est enregistrée en fonction des paramètres fournis. Jenkins peut également fournir des packages générés après une compilation réussie.
Ce didacticiel en trois parties vous montrera comment installer Jenkins et comment utiliser Jenkins pour une intégration et un déploiement continus.
La partie 1 de ce didacticiel est à jour avec l'instance Ubuntu 16.04 64 bits Alibaba Cloud Elastic Computer Service (ECS). Installez la version de Jenkins Automation Server. Configurez également un proxy inverse Nginx sécurisé pour accéder à votre instance Jenkins. Dans la partie 2, vous allez créer un exemple d'application Web Java en tant que projet Maven. Nous allons également procéder au processus de création d'un travail de build dans Jenkins. Enfin, la troisième partie du didacticiel automatise le processus de construction. Vous apprendrez également à utiliser Jenkins pour une livraison continue.
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%22 :% 5C% 22fmj2og% 5C% 22% 7D% 22% 7D) Ubuntu 16.04 64 bits est installé sur l'instance. 2. Une règle de pare-feu ou de groupe de sécurité configurée pour autoriser les ports «80» et «443». 3, Pour les instances ECS Obligatoire [nom de domaine](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).
Pour obtenir des instructions sur la création d'une instance et la connexion à celle-ci, consultez le Guide de démarrage rapide (https://www.alibabacloud.com/help/doc-detail/25422.htm?spm=a2c65.11461447.0.0.789b4a54a4WRLd). "Veuillez suivre le. Dans ce didacticiel, vous avez déjà créé une instance Alibaba et défini "jenkins.example.com" pour pointer vers votre instance Ubuntu. On suppose que vous l'êtes. Après vous être connecté à l'instance via SSH, exécutez la commande suivante pour mettre à jour le cache du référentiel et le système de base.
apt update && apt -y upgrade & apt -y autoremove
Il est préférable de créer un utilisateur sudo et d'exécuter toutes les commandes au lieu d'exécuter toutes les commandes en tant qu'utilisateur root. Créons maintenant un utilisateur sudo. Vous pouvez utiliser n'importe quel nom d'utilisateur de votre choix.
adduser aliyun
Après avoir créé l'utilisateur, ajoutez-le au groupe sudo.
usermod -aG sudo aliyun
Passez maintenant à l'utilisateur nouvellement créé.
su - aliyun
Définissez le nom de domaine complet ou le nom de domaine complet comme nom d'hôte du serveur. La définition du nom d'hôte n'est pas obligatoire, mais Jenkins affichera un message d'avertissement si le nom d'hôte n'est pas défini correctement.
sudo hostnamectl set-hostname jenkins.example.com
De même, ajoutez le nom de domaine au fichier / etc / hosts.
echo "127.0.0.0.1 jenkins.example.com" | sudo tee -a /etc/hosts
Jenkins est écrit en Java et vous devrez peut-être créer des applications Java à l'avenir, alors passons au kit de développement Java et à l'installation de JDK. Jenkins prend en charge à la fois Oracle Java 8 et OpenJDK 8. Ce didacticiel installe Oracle Java version 8. Oracle Java contient à la fois Java Runtime (JRE) et JDK. Ajoutez le référentiel Oracle Java PPA.
sudo apt install -y software-properties-common
sudo add-apt-repository --yes ppa:webupd8team/java
sudo apt update
Installez Oracle Java 8.
sudo apt -y install oracle-java8-installer
Vous pouvez vérifier si Java est installé avec succès en exécutant la commande java -version.
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)
Installez les packages suivants et définissez le chemin par défaut de java_home.
sudo apt -y install oracle-java8-set-default
Vous pouvez maintenant vérifier si la variable JAVA_HOME est définie en exécutant echo $ JAVA_HOME. Vous devrez peut-être également vous déconnecter et vous reconnecter pour obtenir le résultat souhaité.
aliyun@jenkins:~$ echo $JAVA_HOME
/usr/lib/jvm/java-8-oracle
Jenkins peut être facilement installé via un référentiel que le projet lui-même maintient activement. En installant via le référentiel, vous pouvez facilement mettre à niveau à l'avenir en utilisant directement la commande apt upgrade. Importez la clé utilisée pour signer le package dans le référentiel Jenkins. Cela garantira que le package correct est installé.
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -.
Créez un nouveau fichier de liste de référentiels pour Jenkins.
echo "deb https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list
Installez Jenkins.
sudo apt update
sudo apt -y install jenkins git
J'installe Jenkins à partir d'un référentiel géré par le projet, je dois donc installer la dernière version disponible de l'application. Git est requis pour exécuter le plugin Git sur Jenkins. Pour démarrer Jenkins et le faire démarrer automatiquement au démarrage, exécutez-le.
sudo systemctl start jenkins
sudo systemctl enable jenkins
Vous pouvez vérifier l'état du service avec la commande systemctl status jenkins.
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
Pour voir les journaux associés au serveur Jenkins lui-même, exécutez la commande suivante:
tail -f /var/log/jenkins/jenkins.log
Le premier lancement de Jenkins prendra quelques minutes. Si vous voyez la ligne suivante dans la sortie, votre application est prête.
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 est maintenant en cours d'exécution sur votre serveur. Poursuivez l'installation de Nginx afin de pouvoir accéder facilement à votre instance Jenkins en utilisant votre nom de domaine.
Remarque: Si le nom de domaine n'est pas configuré pour pointer vers l'instance Alibaba Cloud ECS, ouvrez le port "808080" via le groupe de sécurité de l'instance ECS et ouvrez [http://172.16.0.1:8080](http: / /172.16.0.1:8080/?spm=a2c65.11461447.0.0.789b4a54a4WRLd), 172.16.0.1 peut accéder à l'instance Jenkins, qui est l'adresse IP publique de l'instance ECS. Ignorez la section d'installation de Nginx et suivez le didacticiel de la configuration finale.
Jenkins a un serveur Web intégré pour servir les applications sur le port "808080", mais il n'est pas recommandé de publier un tel serveur Web sur Internet dans un environnement de production. Ce didacticiel utilise Nginx comme proxy inverse qui transmet les demandes des clients au serveur Jenkins. La configuration d'un proxy inverse avec un nom de domaine améliore également l'accessibilité de l'instance, vous n'avez donc pas besoin de vous souvenir de l'adresse IP de l'instance.
Installez le serveur Web Nginx.
sudo apt -y install nginx
Démarrez Nginx pour que le serveur démarre automatiquement au démarrage.
sudo systemctl start nginx
sudo systemctl enable nginx
Il est également important de protéger votre serveur Web avec le cryptage SSL / TLS, car les connexions et autres données importantes sont envoyées du client au serveur Web et vice versa. Si les données échangées ne sont pas cryptées, les données du réseau peuvent être volées. Ce didacticiel utilise le certificat SSL gratuit de Let's Encrypt CA. Si vous souhaitez utiliser un SSL plus fiable et plus convivial pour la production, Achetez un certificat SSL auprès d'Alibaba Cloud pouvez.
Let's Encrypt fournit "Certbot", un outil qui facilite la demande et la génération de certificats. Ajoutez le référentiel Certbot à votre système et installez Certbot.
sudo add-apt-repository --yes ppa:certbot/certbot
sudo apt update
sudo apt -y install certbot
Pour que Certbot vérifie la propriété d'un domaine, il est important que le domaine pointe vers une instance ECS. Sinon, le certificat de domaine ne sera pas généré et une erreur sera affichée. Utilisez Certbot pour demander un certificat.
sudo certbot certonly --webroot -w /var/www/html -d jenkins.example.com
Lorsque le certificat est généré, vous verrez une sortie similaire à ce qui suit:
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
...
Créez une tâche cron pour un renouvellement automatique avant l'expiration du certificat.
{ sudo crontab -l; echo '36 2 * * * * /usr/bin/certbot renew --post-hook "systemctl reload nginx"; } } | sudo crontab -l.
Vous pouvez vérifier si une tâche cron a été créée en exécutant la commande sudo crontab -l.
aliyun@jenkins:~$ sudo crontab -l
36 2 * * * /usr/bin/certbot renew --post-hook "systemctl reload nginx"
Créez un nouveau bloc de serveur Nginx pour le proxy inverse Jenkins.
sudo nano /etc/nginx/sites-available/jenkins
Entrez les paramètres suivants dans l'éditeur. Assurez-vous de remplacer toutes les occurrences de l'exemple de domaine par le domaine réel.
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;
}
}
Activez le fichier de configuration.
sudo ln -s /etc/nginx/sites-available/jenkins /etc/nginx/sites-enabled/jenkins
Vous pouvez rechercher des erreurs dans le fichier de configuration en exécutant sudo nginx -t.
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
Redémarrez le serveur Web Nginx pour que les modifications de configuration prennent effet.
sudo systemctl restart nginx
L'accès au port "8080" n'est plus nécessaire car nous utilisons le proxy inverse Nginx pour accéder à Jenkins. Si vous avez activé l'accès au port "808080" dans le groupe de sécurité du pare-feu ou de l'instance ECS, vous pouvez le supprimer en toute sécurité. Pour configurer le serveur intégré Jenkins afin qu'il n'écoute que les connexions de l'hôte local, modifiez les paramètres dans le fichier de configuration par défaut de Jenkins. Ouvrez le fichier de paramètres.
sudo nano /etc/default/jenkins
Recherchez la ligne suivante à la fin du fichier:
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT”
Modifiez les paramètres comme suit.
HTTP_HOST=127.0.0.1
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=$HTTP_HOST"
Enregistrez le fichier et quittez l'éditeur. Exécutez et redémarrez l'instance Jenkins.
sudo systemctl restart jenkins
Le serveur intégré de Jenkins n'accepte désormais que les connexions des hôtes locaux. Seul le proxy Nginx peut y accéder en toute sécurité.
Vous pouvez accéder à votre instance Jenkins à partir de votre navigateur préféré en visitant l'URL https://jenkins.example.com.
Lors de l'installation, Jenkins générera un mot de passe initial. Ce mot de passe initial est requis pour terminer la configuration de Jenkins à partir de votre navigateur. Si vous accédez à votre instance Jenkins depuis votre navigateur, vous verrez que vous demandez un mot de passe administrateur. Imprimez le mot de passe administrateur initial sur le terminal.
sudo cat /var/lib/jenkins/secrets/initialAdminPassword
Vous devriez voir une sortie similaire.
aliyun@jenkins:~$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
84ae7775fec245e69305c6db08389d69
Copiez le mot de passe de votre appareil et collez-le dans votre navigateur.
Si le mot de passe initial est correctement vérifié, le programme d'installation demandera un plug-in à installer. Les plugins peuvent être facilement gérés depuis l'interface Jenkins, alors sélectionnez l'option Installer les plugins suggérés ici. Cela installera les plug-ins les plus populaires et les plus utiles pour étendre les fonctionnalités de Jenkins.
À ce stade, SETUP installe le plug-in recommandé. Il sera terminé dans quelques minutes. L'état d'installation de chaque plug-in s'affiche.
Si le plug-in est correctement installé, le programme d'installation vous demandera de créer un compte administrateur. Entrez les détails du compte de base que Jenkins demandera.
Enfin, vous verrez un message indiquant que Jenkins est prêt. Accédez à Connexion et connectez-vous avec le compte administrateur que vous avez créé précédemment. Le tableau de bord Jenkins s'affiche.
C'est la fin. Alibaba Cloud ECS Nous avons installé avec succès un serveur d'automatisation Jenkins sur Ubuntu 16.04. Nous avons également mis en place un proxy inverse Nginx pour assurer la sécurité avec Let's Encrypt SSL. Maintenant que votre instance Jenkins est prête, vous pouvez passer à la création de votre première tâche de build.
[Deuxième moitié du didacticiel](https://community.alibabacloud.com/blog/ci%2Fcd-with-jenkins---part-2%3A-use-jenkins-for-continuous-integration_593720?spm=a2c65.11461447.0. Dans 0.789b4a54a4WRLd), nous allons créer un exemple d'application Java Web en tant que projet Maven. Configurez également Jenkins pour qu'il fonctionne avec JDK, Git et Maven. Enfin, configurez un projet de génération basé sur Jenkin pour l'exemple d'application et exécutez la première génération.
Recommended Posts