Jenkins部署及反向代理
一、Jenkins介绍
简单写一下jenkins介绍,网上有很多,主要是后面的nginx反向代理配置,如果在只能暴露80端口,且有其他中间件的场景中,只能通过nginx配置反向代理来使用jenkins。
1.概念
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件项目可以进行持续集成。
2.功能
Jenkins的功能包括:
1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。
3.拓展
jenkins一般用于CI/CD流程中,在CI/CD中扮演很重要的角色。
3.1CI/CD
CI/CD 是指持续集成(Continuous Integration)和持续部署(Continuous Deployment)或持续交付(Continuous Delivery)
CI:持续集成(Continuous Integration)
CD:持续部署(Continuous Deployment)或者 持续交付(Continuous Delivery)
3.2具体实现
CI/CD实现方案:gitlab+jenkins+ansible/saltstack
gitlab:代码仓库
jenkins:是CI部分的核心组件,主要负责代码构建,上传仓库和部署触发
ansible/satlstack:自动化管理工具。CD部分的核心组件,主要负责远程、批量部署。
其中:
ansible适用于简单、小规模集群管理;配置相对简单。
saltstack适用于更复杂、更灵活、多维度、更大的集群管理;配置相对复杂。
博主曾用saltstack管理过上千台服务器,由于master—minion架构,也踩过saltstack的坑。(血泪史)
二、Jenkins搭建
1.准备环境
Server Prerequisites
Minimum hardware requirements:
256 MB of RAM
1 GB of drive space (although 10 GB is a recommended minimum if running Jenkins as a Docker container)
Recommended hardware configuration for a small team:
4 GB+ of RAM
50 GB+ of drive space
Software requirements
Jenkins:jenkins-2.504.1-1.1.noarch
JAVA:jdk-21-2000:21.0.7-8.x86_64
OS:Centos7.9 x86_64架构
jenkins 用最新版,java根据jenkins版本在jenkins官网找到对应的版本即可
jenkins官网:https://www.jenkins.io/doc/book/platform-information/support-policy-java/
2.部署
配置 Jenkins 官方 yum 源
[root@master jenkins]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
[root@master jenkins]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
部署java
[root@master jenkins]# wget https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.rpm
[root@master jenkins]# yum -y localinstall ./jdk-21_linux-x64_bin.rpm
[root@master jenkins]# java --version
java 21.0.7 2025-04-15 LTS
Java(TM) SE Runtime Environment (build 21.0.7+8-LTS-245)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.7+8-LTS-245, mixed mode, sharing)
部署jenkins
[root@master jenkins]# yum install jenkins
启动jenkins
[root@master jenkins]# systemctl start jenkins
[root@master jenkins]# jenkins --version
2.504.1
[root@master jenkins]# lsof -i:8080
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 3303059 root 10u IPv6 21608121 0t0 TCP *:webcache (LISTEN)
[root@master jenkins]# ps -ef | grep jenkins
root 3303059 1 0 10:53 ? 00:01:37 /usr/bin/java -Djava.awt.headless=true -jar /usr/share/java/jenkins.war --webroot=/var/cache/jenkins/war --httpPort=8080 --prefix=/jenkins --accessLoggerClassName=winstone.accesslog.SimpleAccessLogger --simpleAccessLogger.format=combined --simpleAccessLogger.file=/var/log/jenkins/access_log
root 3471520 3305680 0 18:15 pts/2 00:00:00 grep --color=auto jenkins
简单做一个jenkins的目录介绍
yum安装完自动注册系统服务,所以能用systemctl启动,启动文件默认位置和内容如下所示:
[root@master jenkins]# cd /usr/lib/systemd/system/
[root@master system]# pwd
/usr/lib/systemd/system
[root@master system]# ls jenkins.service
jenkins.service
[root@master system]# cat jenkins.service | egrep -v "^#|^$"
[Unit]
Description=Jenkins Continuous Integration Server
Requires=network.target
After=network.target
StartLimitBurst=5
StartLimitIntervalSec=5m
[Service]
Type=notify
NotifyAccess=main
ExecStart=/usr/bin/jenkins
Restart=on-failure
SuccessExitStatus=143
User=root
Group=root
Environment="JENKINS_HOME=/var/lib/jenkins"
WorkingDirectory=/var/lib/jenkins
Environment="JENKINS_WEBROOT=%C/jenkins/war"
Environment="JAVA_OPTS=-Djava.awt.headless=true"
Environment="JENKINS_PORT=8080"
Environment="JENKINS_ENABLE_ACCESS_LOG=true"
[Install]
WantedBy=multi-user.target
jenkins的工作空间
[root@master jenkins]# pwd
/var/lib/jenkins
[root@master jenkins]# ls -lrt
total 84
-rw-r--r-- 1 jenkins jenkins 64 Jun 23 11:09 secret.key
-rw-r--r-- 1 jenkins jenkins 0 Jun 23 11:09 secret.key.not-so-secret
drwxr-xr-x 2 jenkins jenkins 4096 Jun 23 11:09 jobs #流水线任务均在这个目录里面
-rw-r--r-- 1 jenkins jenkins 171 Jun 23 11:09 jenkins.telemetry.Correlator.xml
drwxr-xr-x 2 jenkins jenkins 4096 Jun 23 11:09 userContent
-rw-r--r-- 1 jenkins jenkins 258 Jun 23 11:09 queue.xml.bak
-rw-r--r-- 1 jenkins jenkins 156 Jun 23 11:09 hudson.model.UpdateCenter.xml
-rw-r--r-- 1 jenkins jenkins 1037 Jun 23 11:09 nodeMonitors.xml
-rw-r--r-- 1 jenkins jenkins 1660 Jun 23 11:10 config.xml
drwxr-xr-x 89 jenkins jenkins 12288 Jun 23 11:25 plugins #安装的插件信息
-rw------- 1 jenkins jenkins 1680 Jun 23 11:25 identity.key.enc
drwxr-xr-x 2 jenkins jenkins 4096 Jun 23 11:25 updates
-rw-r--r-- 1 jenkins jenkins 370 Jun 23 11:25 hudson.plugins.git.GitTool.xml
drwxr-xr-x 2 jenkins jenkins 4096 Jun 23 11:25 logs #健康检查信息,只保存最新的信息,一分钟更新一次
drwxr-xr-x 3 jenkins jenkins 4096 Jun 23 11:27 users #用户配置
-rw-r--r-- 1 jenkins jenkins 187 Jun 23 11:34 jenkins.model.JenkinsLocationConfiguration.xml
-rw-r--r-- 1 jenkins jenkins 7 Jun 23 11:34 jenkins.install.UpgradeWizard.state
-rw-r--r-- 1 jenkins jenkins 7 Jun 23 11:34 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r-- 1 jenkins jenkins 1267 Jun 23 11:35 hudson.plugins.emailext.ExtendedEmailPublisher.xml
drwx------ 2 jenkins jenkins 4096 Jun 23 12:09 secrets #秘钥保存目录
部署nginx
部署过程参考下列博客标题三中1.编译安装
https://blog.csdn.net/weixin_43866248/article/details/132230464?spm=1011.2415.3001.5331
检查nginx进程
[root@master ~]# ps -ef | grep nginx
root 3047802 1 0 Jun17 ? 00:00:00 nginx: master process /opt/web_app/nginx-1.16.1/sbin/nginx -c /opt/web_app/nginx-1.16.1/conf/nginx.conf
root 3306591 3047802 0 Jun20 ? 00:00:00 nginx: worker process
root 3497912 3496966 0 10:38 pts/1 00:00:00 grep --color=auto nginx
3.nginx配置反向代理
根据官网提示,先修改jenkins的访问路径contextpath
官网提示,如果浏览器访问的时候想在Jenkins URL后面加path,那么必须要加这个配置,本次测试就是想通过http://www.example.com/jenkins来访问我的jenkins
直接修改配置文件/usr/lib/systemd/system/jenkins.service,大概在116行的位置
[root@master ~]# vim /usr/lib/systemd/system/jenkins.service
112 # Set to true to enable logging to /var/log/jenkins/access_log.
113 Environment="JENKINS_ENABLE_ACCESS_LOG=true"
114
115 # Servlet context (important if you want to use reverse proxying)
116 Environment="JENKINS_PREFIX=/jenkins" #这个JENKINS_PREFIX要跟nginx location保持一致
[root@master ~]# systemctl daemon-reload
[root@master ~]# systemctl restart jenkins
再修改nginx配置,添加以下内容
[root@master ~]# vim /opt/web_app/nginx-1.16.1/conf/nginx.conflocation /jenkins { #这个location需要跟JENKINS_PREFIX保持一致,这一步很关键proxy_pass http://localhost:8080;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;}
[root@master ~]# /opt/web_app/nginx-1.16.1/sbin/nginx -t
nginx: the configuration file /opt/web_app/nginx-1.16.1/conf/nginx.conf syntax is ok
nginx: configuration file /opt/web_app/nginx-1.16.1/conf/nginx.conf test is successful
[root@master ~]# /opt/web_app/nginx-1.16.1/sbin/nginx -s reload
三、配置初始化
1.在浏览器初始化jenkins
在浏览器输出你的域名+jenkins:http://www.example.com/jenkins