1. Jenkins 学习环境安装

Jenkins 的安装方式很多,在学习过程中,往往使用比较简单的方式进行安装,比如使用 Docker 直接启动Jenkins容器,或者采用软件仓库安装,抑或是直接使用war包启动。生产环境中,会涉及master和slave,一般使用 Docker 方式启动,或者在 Kubernertes 中安装。后续章节会讨论这些安装方式。
Jenkins 安装的官方文档: https://www.jenkins.io/doc/book/installing/
当前在Jenkins服务器之外建立了一个Nginx服务器,将 jenkins.ddn.com 的请求全部转发到后端的 jenkins 服务器上。
image.png

1.1. Jenkins安装

1.1.1. 使用软件仓库安装

官方提供了Ubuntu 和 CentOS系的软件仓库,这里使用CentOS 7作为演示,无法使用科学上网的朋友使用其它安装方式

  1. # 配置代理
  2. [root@centos-81 ~]# export http_proxy=http://10.4.7.1:10080
  3. [root@centos-81 ~]# export https_proxy=http://10.4.7.1:10080
  4. [root@centos-81 ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
  5. [root@centos-81 ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
  6. [root@centos-81 ~]# yum install -y jenkins java-1.8.0-openjdk-devel
  7. [root@centos-81 ~]# unset http_proxy https_proxy
  8. [root@centos-81 ~]# rpm -q jenkins
  9. jenkins-2.277.2-1.1.noarch
  10. [root@centos-81 ~]# java -version
  11. openjdk version "1.8.0_282"
  12. OpenJDK Runtime Environment (build 1.8.0_282-b08)
  13. OpenJDK 64-Bit Server VM (build 25.282-b08, mixed mode)
  14. [root@centos-81 ~]# systemctl daemon-reload
  15. [root@centos-81 ~]# systemctl start jenkins
  16. [root@centos-81 ~]# systemctl status jenkins
  17. jenkins.service - LSB: Jenkins Automation Server
  18. Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
  19. Active: active (running) since Sat 2021-04-17 09:39:59 CST; 7s ago
  20. Docs: man:systemd-sysv-generator(8)
  21. Process: 1722 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS)
  22. Tasks: 13
  23. Memory: 116.9M
  24. CGroup: /system.slice/jenkins.service
  25. └─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/...
  26. Apr 17 09:39:58 centos-81 systemd[1]: Starting LSB: Jenkins Automation Server...
  27. Apr 17 09:39:58 centos-81 runuser[1727]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)
  28. Apr 17 09:39:59 centos-81 jenkins[1722]: Starting Jenkins [ OK ]
  29. Apr 17 09:39:59 centos-81 systemd[1]: Started LSB: Jenkins Automation Server.
  30. # Jenkins 不是原生的service
  31. [root@centos-81 ~]# systemctl enable jenkins
  32. jenkins.service is not a native service, redirecting to /sbin/chkconfig.
  33. Executing /sbin/chkconfig jenkins on
  34. [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 解锁

image.png

  • 安装推荐的插件

image.png

  • 创建用户

image.png

  • 配置示例URL

image.png
image.png

  • 安装bule ocean插件(推荐)

【系统管理】—> 【插件管理】—>【可选插件】—>搜索并安装 blue ocean

  • 重启Jenkins实例,让Jenkins插件生效

image.png

  • 修改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服务


05-2-1-Jenkins安装 - 图8