1. Jenkins 学习环境安装
Jenkins 的安装方式很多,在学习过程中,往往使用比较简单的方式进行安装,比如使用 Docker 直接启动Jenkins容器,或者采用软件仓库安装,抑或是直接使用war包启动。生产环境中,会涉及master和slave,一般使用 Docker 方式启动,或者在 Kubernertes 中安装。后续章节会讨论这些安装方式。
Jenkins 安装的官方文档: https://www.jenkins.io/doc/book/installing/。
当前在Jenkins服务器之外建立了一个Nginx服务器,将 jenkins.ddn.com 的请求全部转发到后端的 jenkins 服务器上。
1.1. Jenkins安装
1.1.1. 使用软件仓库安装
官方提供了Ubuntu 和 CentOS系的软件仓库,这里使用CentOS 7作为演示,无法使用科学上网的朋友使用其它安装方式
# 配置代理
[root@centos-81 ~]# export http_proxy=http://10.4.7.1:10080
[root@centos-81 ~]# export https_proxy=http://10.4.7.1:10080
[root@centos-81 ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@centos-81 ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
[root@centos-81 ~]# yum install -y jenkins java-1.8.0-openjdk-devel
[root@centos-81 ~]# unset http_proxy https_proxy
[root@centos-81 ~]# rpm -q jenkins
jenkins-2.277.2-1.1.noarch
[root@centos-81 ~]# java -version
openjdk version "1.8.0_282"
OpenJDK Runtime Environment (build 1.8.0_282-b08)
OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)
[root@centos-81 ~]# systemctl daemon-reload
[root@centos-81 ~]# systemctl start jenkins
[root@centos-81 ~]# systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: active (running) since Sat 2021-04-17 09:39:59 CST; 7s ago
Docs: man:systemd-sysv-generator(8)
Process: 1722 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)
Tasks: 13
Memory: 116.9M
CGroup: /system.slice/jenkins.service
└─1743 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/...
Apr 17 09:39:58 centos-81 systemd[1]: Starting LSB: Jenkins Automation Server...
Apr 17 09:39:58 centos-81 runuser[1727]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)
Apr 17 09:39:59 centos-81 jenkins[1722]: Starting Jenkins [ OK ]
Apr 17 09:39:59 centos-81 systemd[1]: Started LSB: Jenkins Automation Server.
# Jenkins 不是原生的service
[root@centos-81 ~]# systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on
[root@centos-81 ~]# chkconfig jenkins on
1.1.2. 使用war包安装
[root@centos-80 ~]# mkdir -p /opt/release/jenkins-2.249.3 && cd /opt/release/jenkins-2.249.3
[root@centos-80 jenkins-2.249.3]# yum install -y java
[root@centos-80 jenkins-2.249.3]# wget -c http://ftp-chi.osuosl.org/pub/jenkins/war-stable/2.249.3/jenkins.war
[root@centos-80 jenkins-2.249.3]# ln -s /opt/release/jenkins-2.249.3 /opt/apps/jenkins
[root@centos-80 jenkins-2.249.3]# java -jar jenkins.war --help
[root@centos-80 ~]# useradd jenkins
[root@centos-80 ~]# chown -R jenkins.jenkins /opt/release/jenkins-2.249.3 /opt/logs/jenkins/
[root@centos-80 ~]# su - jenkins
[jenkins@centos-80 ~]$ cd /opt/apps/jenkins/
[jenkins@centos-80 jenkins]$ bash run.sh start # 启动jenkins
启动脚本 run.sh
内容如下:
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
export JENKINS_HOME="/opt/apps/jenkins"
[ $USER != "jenkins" ] && echo "Please use jenkins run the shell script" && exit 1
cd $JENKINS_HOME
[ $# -eq 0 ] && action=start || action=$1
case $action in
start)
ps uax|grep -v grep| grep -q "jenkins.war" && echo "jenkins is running" && exit 2
java -jar jenkins.war --daemon --logfile=/opt/logs/jenkins/jenkins.log --httpPort=8080
;;
stop)
pid=$(ps uax|grep -v grep| grep "jenkins.war" | awk '{print $2}')
[ -z $pid ] && echo "jenkins not runing" && exit 3
kill $pid
;;
restart)
pid=$(ps uax|grep -v grep| grep "jenkins.war" | awk '{print $2}')
[ -n $pid ] && kill $pid
for i in {1..30}
do
count=$(ps uax|grep -v grep| grep "jenkins.war" | wc -l)
[ $count -ne 0 ] && sleep 1 && state=1 && continue
state=0 && java -jar jenkins.war --daemon --logfile=/opt/logs/jenkins/jenkins.log --httpPort=8080 && break
done
[ $state -eq 1 ] && echo "jenkins stop failed" && exit 4
;;
*)
echo "bash $0 start|stop|restart"
esac
1.1.3. 使用Docker启动
Jenkins 镜像主页: https://hub.docker.com/_/jenkins
# 推荐使用docker-compose替代docker命令
# jenkins镜像中使用jenkins用户启动的,uid和gid都为1000
[root@centos-81 ~]# mkdir /data/jenkins/ ; chown 1000:1000 /data/jenkins/
[root@centos-81 ~]# docker run -d --name jenkin -p 8080:8080 -p 50000:50000 -v /data/jenkins:/var/jenkins_home jenkins:2.60.3
1.1.4. 使用K8S部署jenkins
不推荐学习使用,因为k8s部署的jenkins一般为master,配合 Kubernetes 动态 agent 完成 Jenkins 是在 k8s 下的最佳实践!
1.2. Jenkins初始化
在上述安装完成之后,进入Jenkins主页: jenkins.ddn.com 后需要进行初始化操作:
- Jenkins 解锁
- 安装推荐的插件
- 创建用户
- 配置示例URL
- 安装bule ocean插件(推荐)
【系统管理】—> 【插件管理】—>【可选插件】—>搜索并安装 blue ocean
- 重启Jenkins实例,让Jenkins插件生效
- 修改Jenkins插件源(可选)
在当前实验中,Jenkins 插件下在速度较快,因此没有修改该参数。如果需要修改,可以如下操作:
在 /opt/apps/jenkins/hudson.model.UpdateCenter.xml
中修改 <url> </url>
为 <url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url>
,然后重启Jenkins服务