Jenkins的安装与部署
前言
Jenkins是什么?
Jenkins是一个独立的开源软件项目,是基于Java开发的一种可扩展的持续集成(CI)工具,用于监控持续重复的工作,自动的构建和测试软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
持续集成(CI)是什么?
持续集成(CI)是在源代码变更后自动检测、拉取、构建和(在大多数情况下)进行单元测试的过程。
一 Jenkins 安装
1. 安装 jdk1.8
安装 jdk1.8 并为其配置 yum 源
Jenkins是基于java8编写的软件,所以在安装之前需要在主机上安装Java8的运行环境,及安装jdk 1.8
任务实施:
# yum install -y java-1.8.0-openjdk //安装jdk 1.8
# vi /etc/yum.repos.d/jenkins.repo //配置yum源
添加如下内容
[jenkins]
name=Jenkins
baseurl=http://pkg.jenkins.io/redhat
gpgcheck=1
#rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
//检测密钥
2. 安装 jenkins
安装并成功登录 jenkins
# yum -y install epel-release
# yum -y install daemonize
# yum install -y jenkins //安装jenkins
# systemctl start jenkins //启动jenkins
# netstat –ltnp //查看Jenkins是否启动(8080端口是否监听)
# systemctl stop firewalld //关闭防火墙
#less /var/log/jenkins/jenkins.log //查看安装日志,查询admin密码
登录网站
http://ip:8080
3. 自定义 jenkins
(1)安装基础插件
登陆后,会出现如下页面,这里涉及到 jenkins 的插件安装,建议选择 “安装推荐的插件”,点击 “安装推荐的插件” 后,进入 “新手入门” 页面,等待全部插件安装成功即可。
(2)创建第一个管理员用户
插件安装完成后,会出现 “创建第一个管理员用户” 页面,填写正确信息后,点击 “保存并完成”,这样第一个管理员用户就创建完毕了
二 Jenkins 相关配置及代码发布
1. Jenkins 发布 php 代码
(1)安装插件
先进入 “系统管理”,再进入 “管理插件”,在 “已安装” 中检查是否有 “Git plugin” 和 “Publish Over SSH” 两个插件,如果没有则需要安装,到 “可选插件” 中搜索并安装。
插件完成后,点击 “返回首页” 回到服务器中重启 jenkins 后,登录。
#systemctl restart jenkins //重启jenkins
(2)配置 Publish Over SSH
首先需要在服务器上 /.ssh 目录下生成一对密钥:
# cd ~/.ssh
# ssh-keygen -t rsa
检查是否生成成功:
# ls -al
总用量 8
drwx------. 2 root root 38 5月 13 15:58.
dr-xr-x---. 4 root root 354 5月 13 15:58 ..
-rw-------. 1 root root 1679 5月 13 15:58 id_rsa
-rw-r--r--. 1 root root 394 5月 13 15:58 id_rsa.pub
密钥生成成功后,登录 Jenkins, 点击 “系统管理” 然后点击 “系统设置”,下拉找到 “Publish Over SSH” 将刚才生成的服务器的私钥填入 “Publish over SSH” 中的 “key",如下:
错误记录:提示 .ssh目录不存在
解决方案:创建~/.ssh目录,并把目录权限设置为700。
# mkdir ~/.ssh
#chmod 700 ~/.ssh
(3)增加 SSH Server
“Publish over SSH”配置完成后,为了实现代码的成功发布,我们需要先查看并复制服务器的公钥:
# cat .ssh/id_rsa.pub
然后将复制的服务器公钥,添加到需要添加“SSH Servers”的远程机器的.ssh/authorized_keys目录下,若要增加服务器的“SSH Servers”,则需要将服务器的公钥添加到服务器的.ssh/authorized_keys目录下:
# vi .ssh/authorized_keys
在服务器上尝试登录远程机器
#ssh 192.168.200.55
错误记录:.ssh目录下无authorized_keys文件
解决方案:创建名为authorized_keys的文件,并且把它的用户权限设成600。
# cd ~/.ssh
# touch authorized_keys
# chmod 600 authorized_keys
# ls –al
总用量 4
drwx------. 2 root root 29 11月 4 14:58 .
dr-xr-x---. 3 root root 147 11月 4 12:41 ..
-rw-------. 1 root root 417 11月 4 12:38 authorized_keys
(4)构建新的任务
点击新建ltem,如下图:
输入任务名称,并选择构建软件项目的风格,应实验要求这里选择自由风格,如下图:
填写“描述”:
配置“源码管理”,选择管理源码的方式(这里选择git),将代码仓库的地址填入“Repositories URL”中,若代码仓库是私有仓库,还需要点击“添加”来添加凭证,其他保持默认即可:
配置“构建触发器” “构建环境”,应实验要求此处保持默认即可:
配置“构建”,此处用到了我们之前安装的 “publish over ssh” 插件,首先增加名为“Send files or exeute commands over SSH”的构建步骤:
然后在“Name”下选择机器名称(此处SSH Server个数由第3步中添加的数量决定);“Source files”表示要发布那些代码,在其下填写“**/**”(表示全部);
“Remote directory”表示把代码发送到远程机器的位置,填写“/tmp/Jenkins_test”(此处可自定义);“Exec command”下填写想要执行的命令,此处自定义可以为空:
点击“高级”,出现如下页面,其中“Pattern separator” 设置模式分隔符,“Exec timeout(ms)” 设置超时时间,此处保持默认即可:
通常情况下我们需要添加多个机器来进行任务,点击左下角“Add Server”来添加多个机器:
完成以上设置后,应用保存即可。
(5) 将代码发布到对方机器
首先进入任务,然后点击“立即构建”,查看“控制台输出”,最后登录各机器查看代码发布是否成功:
# cd /tmp/12345
ls -al
cd /tmp/jenkins_test
ls -al
2.Jenkins邮件配置
配置“邮件通知”,对邮件进行配置,这样当项目构建失败时,我们能第一时间收到通知。
首先进入“Manage Jenkins”,然后进入“Configure System”,填写“Jenkins location”, 设置系统管理员邮件地址,这里的邮件地址需要和后续要设置的发邮件地址一致
找到“邮件通知”,“SMTP服务器”中填写“smtp.163.com”,接着勾选“使用SMTP认证”,填写所使用邮箱的用户名及密码,“SMTP端口”使用25端口,接着勾选“通过发送测试邮件测试配置”,向其中填写用于发送测试邮件的邮箱地址后,点击“Test configuration”进行测试,发送成功后,保存:
注意:
1.“使用SMTP认证”下的密码需要我们去相应的邮箱获取。
获取步骤如下(以163邮箱为例):
登录163邮箱,点击上方“设置”,点击“POP3/SMTP/IMAP”,开启“IMAP/SMTP服务”和“POP3/SMTP服务”,找到“授权密码管理”,点击“新增授权密码”;接着按照提示步骤操作就可以了。
2.“使用SMTP认证”下的用户名中所填邮箱地址,要与“系统管理员邮箱地址”相同,否则会发送错误。
完成以上邮件配置后,我们还需要进入已经构建过的job里去配置接收邮件的地址。在已经构建过的项目test1中,点击“配置” :
然后在“增加构建后操作步骤”中,选择“E-mail Notification”,最后在“Recipients”中填写邮箱地址并勾选“每次不稳定的构建都发送邮件通知”,保存 :
最后在“Recipients”中填写邮箱地址并勾选“每次不稳定的构建都发送邮件通知”,应用保存 :
3.插件email-ext
安装并配置插件“Email Extension Plugin”
可以实现无论构建成功或失败,都会发送邮件通知构建结果。
(1) 安装插件
进入“Manage Jenkins”,然后进入 “Manage Plugins”,找到并安装插件“Email Extension Plugin”,插件安装成功后,重启jenkins。
(2)配置 Extended E-mail Notification
我们要使用 Extended E-mail Notification(email-ext) 去代替 “邮件通知”,所以我们需要先把“邮件通知”里设置的内容删掉:
删除邮件通知的配置后,配置Extended E-mail Notification,“SMTP server”中填入“smtp.163.com”;“SMTP Port”中填入端口号为“25”;“SMTP Username”和“SMTP Password”中分别填入邮箱用户名与密码:
然后下滑找到”Default Tiggers”,勾选”Always”,其他保持默认,保存 :
(3)配置对应任务
进入所创建的项目test1,下拉找到“构建后操作”,然后点击“增加构建后操作步骤”,选择“Editable Email Notification”,其中Project Recipient List为接收邮件的收件人,可以在默认内容后面增加额外的收件人邮箱,用英文逗号分隔 :
如下图,点击右下角的“Advanced settings”,找到“Triggers”(触发器,设置在什么情况下发送邮件),然后点击下方的“Add Trigger”,增加发邮件的条件,保存 :
(4)发送邮件测试
首先点击“立即构建”,然后查看“控制器输出”,如下图所示,可以看到发邮件的动作,最后收到邮件即为成功 :
4. Jenkins破解管理员密码
(1)破解管理员密码
[root@jenkins_test3 ~]# cd /var/lib/jenkins/users/
[root@jenkins_test3 users]# ls -la
总用量 8
drwxr-xr-x. 4 jenkins jenkins 91 11月 5 07:28 .
drwxr-xr-x. 18 jenkins jenkins 4096 11月 5 08:59 ..
drwx------. 2 jenkins jenkins 24 11月 4 10:35 admin_1088696786195199031
drwx------. 2 jenkins jenkins 24 11月 5 07:28 noreply_2292328003593846535
-rw-r--r--. 1 jenkins jenkins 407 11月 5 07:28 users.xml
[root@jenkins_test3 users]# cd admin_1088696786195199031
[root@jenkins_test3 admin_1088696786195199031]# vim config.xml
搜索定位到 <passwordHash>那一行,修改为
<passwordHash>#jbcrypt:$2a$10$usctvlMlqJ8XswbJ0QCcRuZ6ItKL30r0mEXXi5cXCrnWITuyP2E5W</passwordHash>
[root@jenkins_test3 admin_1088696786195199031]# systemctl restart jenkins //重启jenkins
新密码为000000
(2)手动设置随机字符串
若不想使用上述的密码,我们也可以自己定义一个随机字符串,进入jenkins界面,点击右上角admin,点击设置,下拉找到“密码”,自己定义一个随机字符串,将自己定义的随机字符串保存下来,位置自由,若以后忘记了密码,可在 /var/lib/jenkins/users/admin 文件中,将字符串修改成自己定义的字符串,这样密码就修改成功了。
5.Jenkins部署java项目
(1)准备工作
自己申请一个私有git仓库,生成密钥对,将公钥添加到git服务端
(2)连接代码仓库
[root@jenkins_test3 ~]# cd /home/
[root@jenkins_test3 home]# git config --global user.name "艺同学"
[root@jenkins_test3 home]# git config --global user.email "g2844434053@163.com"
[root@jenkins_test3 home]# mkdir test2
[root@jenkins_test3 home]# cd test2
[root@jenkins_test3 test2]# git init //创建一个新的本地存储库
初始化空的 Git 版本库于 /home/test2/.git/
[root@jenkins_test3 test2]# touch README.md
[root@jenkins_test3 test2]# git add README.md
//将更改添加到下一个提交
[root@jenkins_test3 test2]# git commit -m "first commit"
//向本地的版本库提交先前进行的更改
[master(根提交) 14751aa] first commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
[root@jenkins_test3 test2]# git remote add origin https://gitee.com/g1395310898/test2.git
//添加新的远程存储库
[root@jenkins_test3 test2]# git push -u origin master
//在远程上发布本地更改
Username for 'https://gitee.com': //填写代码仓库用户名
Password for 'https://g1395310898@gitee.com': //填写代码仓库的登陆密码
Counting objects: 3, done.
Writing objects: 100% (3/3), 220 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.2]
To https://gitee.com/g1395310898/test2.git
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
完成以上操作后,访问代码仓库,就可以看到刚刚推送成功的README.md文件,在服务器上修改README.md文件里的内容,再次推送到代码仓库,测试是否能够推送更改的内容,操作如下:
[root@jenkins_test3 test2]# vim README.md
dshihihohsdoodou
[root@jenkins_test3 test2]# git add README.md
[root@jenkins_test3 test2]# git commit -m "first commit1"
[master 84cf44a] first commit1
1 file changed, 1 insertion(+)
[root@jenkins_test3 test2]# git push -u origin master
Username for 'https://gitee.com': g1395310898
Password for 'https://g1395310898@gitee.com':
Counting objects: 5, done.
Writing objects: 100% (3/3), 267 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.2]
To https://gitee.com/g1395310898/test2.git
14751aa..84cf44a master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
以上操作执行完成后,再次访问代码仓库,就可以看到README.md文件的内容发生更改,推送成功 :
(3)下载zrlog
为了让我们的实验更加接近生产环境,我们需要一段Java的源代码,所以此处我们下载由Java编写的博客—— zrlog
[root@jenkins_test3 home]# wget https://codeload.github.com/94fzb/zrlog/zip/master
--2021-11-05 10:12:32-- https://codeload.github.com/94fzb/zrlog/zip/master
正在解析主机 codeload.github.com (codeload.github.com)... 20.205.243.165
正在连接 codeload.github.com (codeload.github.com)|20.205.243.165|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:未指定 [application/zip]
正在保存至: “master”
[ <=> ] 2,353,176 44.8KB/s 用时 84s
2021-11-05 10:13:57 (27.5 KB/s) - “master” 已保存 [2353176]
[root@jenkins_test3 home]# du -sh master
//查看master包的大小
2.3M master
[root@jenkins_test3 home]# unzip master
//解压master
[root@jenkins_test3 home]# mv zrlog-master/* test2/
//将zrlog-master下的文件全部移动到test2中
(4)提交代码
[root@jenkins_test3 home]# cd test2
[root@jenkins_test3 test2]# git add .
//将所有当前更改添加到下一个提交
[root@jenkins_test3 test2]#git commit -m "add zrlog"
//提交先前进行的更改
[root@jenkins_test3 test2]# git push
//在远程上发布本地更改
Username for 'https://gitee.com': g1395310898
Password for 'https://g1395310898@gitee.com':
Counting objects: 676, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (599/599), done.
Writing objects: 100% (674/674), 1.85 MiB | 664.00 KiB/s, done.
Total 674 (delta 93), reused 0 (delta 0)
remote: Resolving deltas: 100% (93/93), done.
remote: Powered by GITEE.COM [GNK-6.2]
To https://gitee.com/g1395310898/test2.git
84cf44a..b481622 master -> master
若我们可以在代码仓库中看到我们刚才提交的文件,说明提交成功。
(5)安装jdk (在远程机器上)
①下载
下载jdk-8u221-linux-x64.tar.gz 并存放至/usr/local下
②解压
[root@localhost ~]# cd /usr/local
[root@localhost local]# mkdir java
[root@localhost local]#mv jdk-8u221-linux-x64.tar.gz /usr/local/java/jdk-8u221-linux-x64.tar.gz
[root@localhost local]# cd java
[root@localhost java]# tar -zxvf jdk-8u221-linux-x64.tar.gz
③配置Java的环境变量
[root@localhost java]#vim /etc/profile
添加如下内容:
export JAVA_HOME=/usr/local/java/jdk1.8.0_221
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@localhost java]#source /etc/profile //重启使配置生效
④验证
[root@localhost java]#java –version
6.安装tomcat(在远程机器上)
Tomcat是用来运行zrlog的容器
(1)下载
下载apache-tomcat-9.0.54.tar.gz 并存放至/usr/local下
(2)解压
[root@jenkins_test4 ~]# cd /usr/local
[root@jenkins_test4 local]# tar -zxf apache-tomcat-9.0.54.tar.gz
(3)配置
[root@jenkins_test4 local]# mv /usr/local/apache-tomcat-9.0.54 /usr/local/tomcat
[root@jenkins_test4 local]# cd tomcat/
[root@jenkins_test4 tomcat]# vim /usr/local/tomcat/conf/tomcat-users.xml
//配置管理员用户
-->
<role rolename="admin"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user name="admin" password="jenkins.com" roles="admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status" />
</tomcat-users>
[root@jenkins_test4 tomcat]#vim webapps/manager/META-INF/context.xml
找到 allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" />
向其中加入我们要使用的网段,修改如下:
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.222.*" />
配置完成后启动:
[root@jenkins_test4 bin]# ./startup.sh //开启Tomcat
(4)验证
登录网址 http://IP:8080
首先,找到“Managing Tomcat”,点击“manager webapp” :
然后输入tomcat的用户名与密码完成验证
完成验证后,成功进入manager平台,说明tomcat各项配置均配置成功 :
7.安装maven(在服务器端安装)
(1)作用
Maven编译java的源码并打包
(2)下载
下载 apache-maven-3.8.3-bin.tar.gz 到 /usr/local/下
(3)解压
[root@jenkins_test3 local]# tar -zxf apache-maven-3.8.3-bin.tar.gz
(4)验证
[root@jenkins_test3 local]# /usr/local/apache-maven-3.8.3/bin/mvn --version
Apache Maven 3.8.3 (ff8e977a158738155dc465c6a97ffaf31982d739)
Maven home: /usr/local/apache-maven-3.8.3
Java version: 1.8.0_312, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"
(5)配置 maven
点击“Manage Jenkins”,点击“Global Tool Configuration”,找到“Maven配置”,填写Maven相关的文件路径。
下滑找到 Maven ,点击“新增Maven”,按照安装的Maven版本号来填写 Name,此处建议不要自动安装,所以不要勾选“自动安装”,然后在 服务器端获取Maven的路径填入MAVEN_HOME ,应用保存即可。
8.安装插件
(1)安装
Maven Integration plugin //用来创建一个maven的项目
Deploy to container Plugin //用来将war包,发布到远程去
(2)重启 jenkins
# systemctl restart jenkins
(3)验证
出现 “构建一个maven项目” ,说明安装成功!
9.创建 maven 项目
将任务名称填入“输入一个任务名称”下,并选择想要构建的项目类型,这里我们选择“构建一个maven项目” :
配置“源码管理”:选择“git”来进行源码管理;将私有的代码仓库的地址填入“Repository URL”;此时会出现错误提醒,这是因为我们添加的代码仓库是私有的,想要使用它必须为其添加凭证,点击“添加” 。
点击“添加”后出现下图页面,“类型”选择“SSH Username with private key”; “Username“为“git”(以代码仓库的地址为参考,可知此处使用的用户名应为git);勾选“Enter directly”,并将服务器的私钥添加到出现的“key”中,从而使得jenkins可以成功访问git;最后点击“添加”。
如下图所示,“凭证”添加完成之后,在“Credentials”下选择“git”,此时可以看到刚才出现的错误提示已经消失了。
下滑找到“Build”(其功能实质就是使用maven去编译我们的源码并生成包),“Root POM”为“pom.xml”;“Goals and options”下填写maven在编译时用到的选项,可留空,但在这里我们填写“clean install –D maven.test.skip=true”这条命令表示在编译之前先清理,跳过测试 :
下滑点击“增加构建后操作步骤”选择“Editable Email Notification”,在“Project Recipient List”下添加一个额外的邮箱,注意前后需要使用英文逗号隔开,如下图所示,应用,保存。
点击“Build Now”后,可以看见左下角出现了下图页面,点击此进程,查看“控制台输出”,输出出现错误,原因是我们安装的jdk是openjdk,只要重新jdk就可以解决这个问题,详细解决过程参考错误记录。
错误记录
错误一:构建时出现错误提示。
如果安装jdk时,安装的是 openjdk ,则会导致此处构建时,显示配置问题,从容导致构建失败 :
解决方案:
重新安装jdk就可以解决,可以直接安装jdk,也可以从已经安装jdk的远程机器拷贝,这里我们演示“从已经安装jdk的远程机器拷贝”这种方法:
[root@jenkins_test3 local]#scp -r 192.168.200.55:/usr/local/java/jdk1.8.0_221 /usr/local/jdk1.8.0_221
[root@jenkins_test3 local]# ls -al //验证拷贝是否成功
然后进入“全局工具配置”中,进行如下修改:
保存后,再次构建验证问题是否已经得到解决,点击“立即构建”后,查看“控制台输出”。
10.发布 war 包
找到“构建后操作”,点击“增加构建后操作”,点击“Deploy war/ear to a container”,“WAR/EAR files”填写“**/*.war”(表示全部的war包),Contex path留空,Containers选择Tomcat 9.x(根据自己部署的tomcat版本选择) :
Credentials这里需要点击右侧的“添加”,如下图所示,添加用于登录Tomcat的用户名和密码,若我们需要添加多个用户名和密码时,为了便于区分,我们可以为添加的用户名和密码添加“描述”,最后点击“添加”。
用户名和密码添加完成后,如下图所示,在“添加”前选择用户;“Tomcat URL”处填写要把war包发布到的那台机器的url,如http://192.168.200.55:8080;应用保存。
点击“立即构建”,查看“控制台输出”构建成功后,在远程机器上查看目录/usr/local/tomcat/webapps中是否存在刚刚发布的war包。由下图可知,发布成功。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」