Jenkins 持续集成部署
Jenkins的安装与部署
前言
当我们在实施一个项目时,从新代码中获得反馈的速度越快,问题越早得到解决,获得反馈的一种常见方法是在新代码之后运行测试,但这就导致了当代码正在编译并且正在运行测试时,开发人员无法在测试完成之前继续工作,从而使生产效率大大降低。Jenkins通过提供持续集成功能解决了问题。合并新代码后。Jenkins可以自动进行构建,运行测试和部署应用程序。这篇文章会向大家介绍jenkins的安装方式和使用方法。
单元一 Jenkins安装
学习目标
本单元主要完成学习目标;
(1)学会安装jdk1.8
(2)学会安装jenkins
(3)了解jenkins的初始化过程
任务1.1 安装jdk 1.8
任务描述
安装jdk1.8并为其配置yum源。
知识学习
Jenkins是基于java8编写的软件,所以在安装之前需要在主机上安装Java8的运行环境,及安装jdk 1.8
务实施
[root@localhost ~]# wget https://download.oracle.com/java/17/archive/jdk-17.0.6_linux-x64_bin.rpm [root@localhost ~]# yum install -y jdk-17.0.6_linux-x64_bin.rpm #配置yum源 [root@localhost ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo #安装依赖 [root@localhost ~]# yum install fontconfig java-17-openjdk #探索密钥 [root@localhost ~]# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io-2023.key |
任务1.2 安装jenkins
任务描述
安装并成功登录jenkins
知识学习
jenkins是什么?
Jenkins是一个独立的开源软件项目,是基于java开发的一种可扩展的持续集成(CI)工具,用于监控持续重复的工作,自动的构建和测试软件项目,旨在提供一个开发易用的软件平台,使软件的持续集成变成可能。
持续集成(CI)是什么?
持续集成(CI)是在源代码变更后自动检测、拉取、构建和(在大多数情况下)进行单元测试的过程。
任务实施
[root@localhost ~]# yum -y install epel-release [root@localhost ~]# yum -y install daemonize [root@localhost ~]# yum install -y jenkins #启动服务 [root@localhost ~]# systemctl start jenkins #关闭防火墙 [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 #查看密码 [root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPassword f1a21e8118d342fab2515af0999368a2 |
任务1.3自定义jenkins
任务描述
本任务主要实现以下两个内容
(1)安装基础插件
(2)创建第一个管理员用户
任务实施
1.安装插件
登录后,会出现如下界面,这里涉及到jenkins的插件安装,建议选择“安装推荐的插件”,
点击“安装推荐的插件”后,今日“新手入门”页面,等待全部插件安装成功即可。
2.创建第一个管理员用户
插件安装完成后,会出现“创建第一个管理员用户”页面,填写正确信息后,点击“保存并完成”,这样第一个管理员用户就创建完毕了,如下图:
单元二jenkins相关配置及代码发布
学习目标
详细了解jenkins各配置及插件的作用,学会发布代码
任务2.1jenkins 发布php代码
任务描述
(1)了解如何安装插件。
(2)了解如何配置Publish Over SSH、添加公钥、增加SSH Server
(3)了解构建一个新的任务的流程
任务实施
1.安装插件
先进入“系统管理”,在进入“管理插件”,在“已安装”中检查是否有“Git plugin”和“Publish Over SSH” 两个插件,如果没有则需要安装,到“可选插件”中搜索并安装。
插件完成后,点击“返回首页”回到服务器中重启jenkins后。登录。
[root@localhost ~]# systemctl restart jenkins #重启 |
2.配置Publish Over SSH
首先需要在服务器上./.目录下生成一对密钥,命令如下:
[root@localhost ~]# cd ~/.ssh [root@localhost .ssh]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:9kEjor318PCZg3Tj1bJDAAjlNfa2pc6PROcFZSGSe6I root@localhost.localdomain The key's randomart image is: +---[RSA 2048]----+ | .o..= ... +. | | ..o +.. + | | o . *.o | | o . +o*.o | | . . S.Bo= o | | =E# X + | | . . & + | | . + . | | . . | +----[SHA256]-----+ |
检查是否生成成功。命令如下:
[root@localhost .ssh]# ls -al 总用量 8 drwxr-xr-x. 2 root root 38 12月 16 15:45 . dr-xr-x---. 4 root root 195 12月 16 15:43 .. -rw-------. 1 root root 1679 12月 16 15:45 id_rsa -rw-r--r--. 1 root root 408 12月 16 15:45 id_rsa.pub |
密钥生成成功后,登录Jenkins。点击“系统管理”然后点击“系统设置”,下拉找到“Publish Over SSH”将刚才生成的服务器的私钥填入“Publish over SSH”中的“key”,如下图:
如果提示.ssh目录不存在,则创建~/.ssh目录,并把目录权限设置为700
[root@localhost ~]# mkdir ~/.ssh [root@localhost ~]# chmod 700 ~/.ssh |
3.增加SSH Server
Publish over SSH”配置完成后,为了实现代码的成功发布,我们需要先查看并复制服务器的公钥,命令如下:
然后将复制的服务器公钥,添加到需要添加“SSH Servers”的远程机器的.ssh/authorized_keys目录下,若要增加服务器的“SSH Servers”,则需要将服务器的公钥添加到服务器的.ssh/authorized_keys目录下。命令如下:
[root@client ~]# cat ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDlOvCstNk3LLiFGQ2InNsWQgHx15nWjgt2UqKzd3JNG2jHvKgeoO6H6iMg4DKjI0fzpBxrfRaR4gJI2jf04mKfRUhhNn9yCm5Bpbx00pA2m0iuxDMbZSd3MBso7gNWnGqpTyZtCe7q9p1Ml8iJYItleDDJOlFq6yU3W5yTliOBtOKlcBahQ1alpzW5QlATTluHv9TaE/yrvW3M3D+WljIRD8OtVwT+UeqpgNQPNGa1yZWSnSsLROysieNUVFKCTqsQ66Px7UGy3GRRNjw3FoZPr7saKx8WiYU6vphdYeJOAmuGh8//8GFjCiTP/wR10RUmZYFkmVCAuBQVm7/76qqx root@localhost.localdomain
在服务器上尝试登录远程机器,如下图所示:
尝试登录成功后,登录jenkins进入“Manage Jenkins”,点击“Configure System”,下滑找到“SSH Server”,填写所需要连接机器的各项设置,然后点击“Test Configuration”,显示“success”,即成功。如下图所示:
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.将代码发布到对方机器
首先进入任务,然后点击“立即构建”,查看“控制台输出”,最后登录各机器查看代码发布是否成功,如下图:
任务2.2 jenkins 邮件配置
任务描述
配置“邮件通知”,对邮件进行配置,这样当项目构建失败时,我们能第一时间收到通知。
项目实施
首先进入“Manage Jenkins”,然后进入“Configure System”,填写“Jenkins location”, 设置系统管理员邮件地址,这里的邮件地址需要和后续要设置的发邮件地址一致,如下图:
找到“邮件通知”,“SMTP服务器”中填写“smtp.163.com”,接着勾选“使用SMTP认证”,填写所使用邮箱的用户名及密码,“SMTP端口”使用25端口,接着勾选“通过发送测试邮件测试配置”,向其中填写用于发送测试邮件的邮箱地址后,点击“Test configuration”进行测试,发送成功后,保存。如下图:
完成以上邮件配置后,我们还需要进入已经构建过的job里去配置接收邮件的地址。在已经构建过的项目test1中,点击“配置”,然后在“增加构建后操作步骤”中,选择“E-mail Notification”,最后在“Recipients”中填写邮箱地址并勾选“每次不稳定的构建都发送邮件通知”,保存,如下图:
最后在“Recipients”中填写邮箱地址并勾选“每次不稳定的构建都发送邮件通知”,应用保存,如下图:
任务2.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.qq.com”;“SMTP Port”中填入端口号为“465”;“SMTP Username”和“SMTP Password”中分别填入邮箱用户名与密码。如下图:
然后下滑找到”Default Tiggers”,勾选”Always”,其他保持默认,保存。如下图:
3.配置对应任务
进入任务2.1所创建的项目test1,下拉找到“构建后操作”,然后点击“增加构建后操作步骤”,选择“Editable Email Notification”,其中Project Recipient List为接收邮件的收件人,可以在默认内容后面增加额外的收件人邮箱,用英文逗号分隔。如下图:
如下图,点击右下角的“Advanced settings”,找到“Triggers”(触发器,设置在什么情况下发送邮件),然后点击下方的“Add Trigger”,增加发邮件的条件,保存。如下图:
4.发送邮件测试
首先点击“立即构建”,然后查看“控制器输出”,如下图所示,可以看到发邮件的动作,最后收到邮件即为成功。
任务2.4jenkins破解管理员密码
任务描述
(1)学会在服务端破解管理员密码
(2)可以手动设置随机字符串
任务实施
1.破解管理员密码
[root@localhost ~]# cd /var/lib/jenkins/users/ [root@localhost users]# ls -la 总用量 12 drwxr-xr-x. 3 jenkins jenkins 58 12月 16 14:39 . drwxr-xr-x. 16 jenkins jenkins 4096 12月 17 19:32 .. -rw-r--r--. 1 jenkins jenkins 304 12月 16 14:39 users.xml drwx------. 2 jenkins jenkins 24 12月 16 15:50 yansong_4245125874000227710 [root@localhost users]# cd yansong_4245125874000227710/ [root@localhost yansong_4245125874000227710]# vi config.xml [root@localhost yansong_4245125874000227710]# systemctl restart jenkins [root@localhost yansong_4245125874000227710]# 新密码为000000 |
2.手动设置字符串
若不想使用上述的密码,我们也可以自己定义一个随机字符串,进入jenkins界面,点击右上角admin,点击设置,下拉找到“密码”,自己定义一个随机字符串,将自己定义的随机字符串保存下来,位置自由,若以后忘记了密码,可在 /var/lib/jenkins/users/admin 文件中,将字符串修改成自己定义的字符串,这样密码就修改成功了。
任务2.5jenkins 部署java项目
任务描述
本任务是完整的创建一个java项目
任务实施
1.准备工作
自己申请一个私有git仓库,生成密钥对,将公钥添加到git服务端
2.连接代码仓库
[root@localhost ~]# cd /home [root@localhost home]# git config --global user.name "门同学" [root@localhost home]# git config --global user.email "445517363@qq.com" [root@localhost home]# mkdir test2 [root@localhost home]# cd test2 [root@localhost test2]# git init 初始化空的 Git 版本库于 /home/test2/.git/ [root@localhost test2]# touch README.md [root@localhost test2]# git add README.md [root@localhost test2]# git commit -m "first commit" [master(根提交) 14bd0b7] first commit 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README.md [root@localhost test2]# git remote add origin menyansong/test2 [root@localhost test2]# git push -u origin master Username for 'https://gitee.com': menyansong Password for 'https://menyansong@gitee.com': Counting objects: 3, done. Writing objects: 100% (3/3), 216 bytes | 0 bytes/s, done. Total 3 (delta 0), reused 0 (delta 0) remote: Powered by GITEE.COM [1.1.5] remote: Set trace flag a4410b94 To https://gitee.com/menyansong/test2.git * [new branch] master -> master 分支 master 设置为跟踪来自 origin 的远程分支 master。 |
3.下载zrlog
为了让我们的实验更加接近生产环境,我们需要一段java的源代码,所以此处我们下载由java编写的博客——zrlog
[root@localhost home]# wget https://codeload.github.com/94fzb/zrlog/zip/master [root@localhost home]# unzip master [root@localhost home]# mv zrlog-master/* test2/ |
4.提交代码
[root@localhost home]# cd test2/ [root@localhost test2]# git add . #添加所有更改 [root@localhost test2]# git commit -m "add zrlog" #提交更改 [root@localhost test2]# git push #推送更改到远程仓库 |
若我们可以在代码中看到我们刚才提交的文件,说明提交成功。如下图:
5.安装jdk(在远程机器上)
(1)下载
下载jdk-8u221-linux-x64.tar.gz 并存放至/usr/local下 |
(2) 解压
[root@localhost ~]# cd /usr/local/ [root@localhost local]# mkdir java [root@localhost local]# mv jdk-8u271-linux-x64.tar.gz /usr/local/java/ [root@localhost local]# cd java [root@localhost java]# tar -zxvf jdk-8u271-linux-x64.tar.gz |
(3)配置java的环境变量
[root@localhost java]# vi /etc/profile export JAVA_HOME=/usr/local/java/jdk1.8.0_271 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar [root@localhost java]# source /etc/profile #重启配置生效 |
(4)验证
[root@localhost java]# java -version java version "1.8.0_271" Java(TM) SE Runtime Environment (build 1.8.0_271-b09) Java HotSpot(TM) 64-Bit Server VM (build 25.271-b09, mixed mode) |
6.安装tomcat(在远程机器上)
(1)作用
tomcat是用来运行zrlog的容器
(2)下载
下载apache-tomcat-9.0.0.54.tar.gz #并存放至/usr/local下 |
(3)解压
[root@client ~]# cd /usr/local/ [root@client local]# tar -zxf apache-tomcat-9.0.94.tar.gz |
(4)配置
[root@client local]# mkdir tomcat [root@client local]# mv /usr/local/apache-tomcat-9.0.94 /usr/local/tomcat [root@client local]# cd tomcat/ [root@client tomcat]# vi /usr/local/tomcat/apache-tomcat-9.0.94/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@client apache-tomcat-9.0.94]# vi 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.213.*" /> 配置完成后启动: [root@client bin]# ./startup.sh #开启Tomcat |
传一个jdk的包
解压完成后移动到这个目录下
[root@client tomcat]# mv jdk1.8.0_271 /usr/local/tomcat/apache-tomcat-9.0.94/ [root@client apache-tomcat-9.0.94]# cd /usr/local/tomcat/apache-tomcat-9.0.94/jdk1.8.0_271/ [root@client jdk1.8.0_271]# vi /etc/profile #在最后添加这两行 export JAVA_HOME=/usr/local/tomcat/apache-tomcat-9.0.94/jdk1.8.0_271/ #注意路径 export PATH=$JAVA_HOME/bin:$PATH [root@client jdk1.8.0_271]# source /etc/profile #重启配置文件 [root@client jdk1.8.0_271]# java -version java version "1.8.0_271" [root@client jdk1.8.0_271]# cd .. [root@client apache-tomcat-9.0.94]# ls bin conf jdk1.8.0_271 LICENSE NOTICE RELEASE-NOTES temp work BUILDING.txt CONTRIBUTING.md lib logs README.md RUNNING.txt webapps [root@client apache-tomcat-9.0.94]# cd bin [root@client bin]# ./startup.sh Using CATALINA_BASE: /usr/local/tomcat/apache-tomcat-9.0.94 Using CATALINA_HOME: /usr/local/tomcat/apache-tomcat-9.0.94 Using CATALINA_TMPDIR: /usr/local/tomcat/apache-tomcat-9.0.94/temp Using JRE_HOME: /usr/local/tomcat/apache-tomcat-9.0.94/jdk1.8.0_271/ Using CLASSPATH: /usr/local/tomcat/apache-tomcat-9.0.94/bin/bootstrap.jar:/usr/local/tomcat/apache-tomcat-9.0.94/bin/tomcat-juli.jar Using CATALINA_OPTS: Tomcat started. |
(5)验证
首先找到“Managing Tomcat”,点击“manager webapp”,如下图所示:
然后输入tomcat的用户名与密码完成验证,如下图所示:
7.安装maven(在服务器端安装)
(1)作用
maven编译java的源码并打包
(2)下载
下载apache-maven-3.8.3-bin.tar.gz 到/usr/local/下 |
(3)解压
[root@localhost local]# tar -zxf apache-maven-3.8.8-bin.tar.gz |
(4)验证
[root@localhost local]# /usr/local/apache-maven-3.8.8/bin/mvn --version Apache Maven 3.8.8 (4c87b05d9aedce574290d1acc98575ed5eb6cd39) Maven home: /usr/local/apache-maven-3.8.8 Java version: 1.8.0_271, vendor: Oracle Corporation, runtime: /usr/local/java/jdk1.8.0_271/jre Default locale: zh_CN, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-1160.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
[root@localhost ~]# systemctl restart jenkins |
(3)验证
出现“构建一个maven项目”,说明安装成功!
9.创建maven项目
将任务名称填入“输入一个任务名称”下,并选择想要构建的项目类型,这里我们选择“构建一个maven项目”,如下图:
配置“源码管理”:选择“git”来进行源码管理;将私有的代码仓库的地址填入“Repository URL”;此时会出现错误提醒,这是因为我们添加的代码仓库是私有的,想要使用它必须为其添加凭证,点击“添加”。如下图:
点击“添加”后出现下图页面,“类型”选择“SSH Username with private key”; “Username“为“git”(以代码仓库的地址为参考,可知此处使用的用户名应为git);勾选“Enter directly”,并将服务器的私钥添加到出现的“key”中,从而使得jenkins可以成功访问git;最后点击“添加”。如下图:
私钥
[root@localhost ~]# cat ~/.ssh/id_rsa |
如下图所示,“凭证”添加完成之后,在“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”下添加一个额外的邮箱,注意前后需要使用英文逗号隔开,如下图所示,应用,保存。如下图:
点击“立即构建”后,查看“控制台输出”,如下图: