一、Jenkins 相关配置及代码发布
1. Jenkins 发布 php 代码
1.1 安装插件
先进入"系统管理",再进入"管理插件",在"已安装"中检查是否有"Git plugin"和"Publish Over SSH"两个插件,如果没有则需要安装,到"可选插件"中搜索并安装。

插件完成后,点击 "返回首页"回到服务器中重启 jenkins后,登录。
[root@jenkins ~]# systemctl restart jenkins
2. 配置 publish Over SSH
首先需要在服务器上/.ssh目录下生成一对密钥,命令如下:
[root@jenkins ~]# mkdir /root/.ssh
[root@jenkins ~]# cd ~/.ssh
检查是否生成成功,命令如下:
[root@jenkins .ssh]# ls -al
总用量 8
drwx------. 2 root root 38 12月 17 15:20 .
dr-xr-x---. 7 root root 256 12月 17 15:19 ..
-rw-------. 1 root root 1679 12月 17 15:20 id_rsa
-rw-r--r--. 1 root root 408 12月 17 15:20 id_rsa.pub
密钥生成成功后,登录Jenkins,点击"系统管理"然后点击"系统设置",下拉找到"Publish Over SSH"将刚才生成的服务器的私钥填入 "Publish over SSH" 中的"key",如下图:
[root@jenkins ~]# cat /root/.ssh/id_rsa

3. 添加 SSH Server
"Publish over SSH"配置完成后,为了实现代码的成功发布,我们需要先查看并复制服务器的公钥,命令如下:
[root@jenkins ~]# cat /root/.ssh/id_rsa.pub
然后将复制的服务器公钥,添加到需要添加"SSH Servers"的远程机器的.ssh/authorized_keys目录下,若要增加服务器的"SSH Servers",则需要将服务器的公钥添加到服务器的.ssh/authorized_keys目录下。命令如下:

然后将复制的服务器公钥,添加到需要添加"SSH Servers"的远程机器的.ssh/authorized_keys目录下,若要增加服务器的"SSH Servers",则需要将服务器的公钥添加到服务器的.ssh/authorized_keys目录下。命令如下:
[root@test .ssh]# vi authorized_keys

在服务器尝试登录远程机器,如下图所示:
[root@jenkins ~]# ssh 192.168.200.71

尝试登陆成功后,登录jenkins,进入"Manage Jenkins",点击"Configure System",下滑找到"SSH Servers",填写所需要连接机器的各项设置,然后点击"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. 将代码发布到对方机器
首先进入任务,然后点击"立即构建",查看"控制台输出",最后登录各机器查看代码发布是否成功,如下图:



二、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里去配置接收邮件的地址。在已经构建过的项目ipromise中,点击"配置",如下图:

然后在"增加构建后操作步骤"中,选择"E-mail Notification",最后在"Recipients"中填写邮箱地址并勾选"每次不稳定的构建都发送邮件通知",保存,如下图:

最后在"Recipients"中填写邮箱地址并勾选"每次不稳定的构建都发送邮件通知",应用保存,如下图:

三、插件 email-ext
1.配置 Extended E-mail Notification
我们要使用 Extended E-mail Notification(email-ext) 去代替 "邮件通知",所以我们需要先把"邮件通知"里设置的内容删掉,如下图:

删除邮件通知的配置后,配置Extended E-mail Notification,"SMTP server"中填入"smtp.163.com";"SMTP Port"中填入端口号为"25";添加Credentials,分别填入邮箱用户名和密码。如下图:

然后下滑找到"Default Tiggers",勾选"Always",其他保持默认,保存。如下图:

2. 配置对应任务
进入任务2.1所创建的项目ipromise,下拉找到"构建后操作",然后点击"增加构建后操作步骤",选择"Editable Email Notification",其中Project Recipient List为接收邮件的收件人,可以在默认内容后面增加额外的收件人邮箱,用英文逗号分隔。如下图:


如下图,点击右下角的"Advanced settings",找到"Triggers"(触发器,设置在什么情况下发送邮件),然后点击下方的"Add Trigger",增加发邮件的条件,保存。如下图:

3. 发送邮件测试
首先点击"立即构建",然后查看"控制器输出",如下图所示,可以看到发邮件的动作,最后收到邮件即为成功。


四、Jenkins 破解管理员密码
1. 破解管理员密码
[root@jenkins ~]# cd /var/lib/jenkins/users
[root@jenkins users]# ls -la
总用量 12
drwxr-xr-x. 3 root root 57 12月 17 14:58 .
drwxr-xr-x. 11 jenkins jenkins 4096 12月 18 08:16 ..
drwx------. 2 root root 24 12月 17 20:36 admin_13975910729098858436
-rw-r--r--. 1 root root 301 12月 17 14:58 users.xml
[root@jenkins users]# cd admin_13975910729098858436
[root@jenkins admin_13975910729098858436]# vi config.xml
搜索定位到 <passwordHash>那一行,修改为
<passwordHash>#jbcrypt:$2a$10$usctvlMlqJ8XswbJ0QCcRuZ6ItKL30r0mEXXi5cXCrnWITuyP2E5W</passwordHash>
[root@jenkins admin_13975910729098858436]# systemctl restart jenkins
新密码为 000000
2. 手动设置随机字符串
若不想使用上述的密码,我们也可以自己定义一个随机字符串,进入jenkins界面,点击右上角admin,点击设置,下拉找到"密码",自己定义一个随机字符串,将自己定义的随机字符串保存下来,位置自由,若以后忘记了密码,可在 /var/lib/jenkins/users/admin 文件中,将字符串修改成自己定义的字符串,这样密码就修改成功了。
五、Jenkins 部署 java项目
1. 准备工作
自己申请一个私有git仓库,生成密钥对,将公钥添加到git服务端
[root@jenkins ~]# ssh-keygen -t ed25519 -C "xxxxx@xxxxx.com"
[root@jenkins ~]# cat ~/.ssh/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJvm5NIavNB9Xpv3pdcSStS/hf47D2VK+SGKAGl4dnsZ 3193752631@qq.com
复制生成后的 ssh key,返回gitee个人主页,通过主页 「个人设置」->「安全设置」->「SSH 公钥」 ,将生成的"SSH密钥"添加到仓库中。如下图。

2. 连接代码仓库
[root@jenkins ~]# cd /home/
[root@jenkins home]# git config --global user.name "gitee-ipromise"
[root@jenkins home]# git config --global user.email "3193752631@qq.com"
[root@jenkins home]# mkdir perfect
[root@jenkins home]# cd perfect/
[root@jenkins perfect]# git init
初始化空的 Git 版本库于 /home/perfect/.git/
[root@jenkins perfect]# touch README.md
[root@jenkins perfect]# git add README.md
[root@jenkins perfect]# git commit -m "first commit"
[master(根提交) b7f5d97] first commit
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 README.md
[root@jenkins perfect]# git remote add origin https://gitee.com/gitee-ipromise/perfect.git
[root@jenkins perfect]# git push -u origin master
Username for 'https://gitee.com': gitee-ipromise
Password for 'https://gitee-ipromise@gitee.com':
Counting objects: 3, done.
Writing objects: 100% (3/3), 211 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 084c23a7
To https://gitee.com/gitee-ipromise/perfect.git
* [new branch] master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
完成以上操作后,访问代码仓库,就可以看到刚刚推送成功的README.md文件,在服务器上修改README.md文件里的内容,再次推送到代码仓库,测试是否能够推送更改的内容,操作如下:
[root@jenkins perfect]# vi README.md
dshihihohsdoodou
[root@jenkins perfect]# git add README.md
[root@jenkins perfect]# git commit -m "first commit1"
[master 5742dd6] first commit1
1 file changed, 1 insertion(+)
[root@jenkins perfect]# git push -u origin master
Username for 'https://gitee.com': gitee-ipromise
Password for 'https://gitee-ipromise@gitee.com':
Counting objects: 5, done.
Writing objects: 100% (3/3), 258 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 8e4a2b83
To https://gitee.com/gitee-ipromise/perfect.git
b7f5d97..5742dd6 master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
以上操作执行完成后,再次访问代码仓库,就可以看到README.md文件的内容发生更改,推送成功,如下图所示:

3. 下载 zrlog
为了让我们的实验更加接近生产环境,我们需要一段Java的源代码,所以此处我们下载由Java编写的博客------ zrlog。
[root@jenkins home]# wget https://codeload.github.com/94fzb/zrlog/zip/master
--2024-12-18 16:26:40-- 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.1"
[ <=> ] 3,351,642 106KB/s 用时 32s
2024-12-18 16:27:12 (103 KB/s) - "master.1" 已保存 [3351642]
[root@jenkins home]# du -sh master
3.2M master
[root@jenkins home]# unzip master
[root@jenkins home]# mv zrlog-master/* perfect/
4. 提交代码
[root@jenkins home]# cd perfect/
[root@jenkins perfect]# git add .
[root@jenkins perfect]# git commit -m "add zrlog"
[root@jenkins perfect]# git push
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:
git config --global push.default matching
若要不再显示本信息并从现在开始采用新的使用习惯,设置:
git config --global push.default simple
参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)
Username for 'https://gitee.com': gitee-ipromise
Password for 'https://gitee-ipromise@gitee.com':
Counting objects: 802, done.
Compressing objects: 100% (714/714), done.
Writing objects: 100% (800/800), 2.37 MiB | 1.57 MiB/s, done.
Total 800 (delta 111), reused 0 (delta 0)
remote: Resolving deltas: 100% (111/111), done.
remote: Powered by GITEE.COM [1.1.5]
remote: Set trace flag 26402e87
To https://gitee.com/gitee-ipromise/perfect.git
5742dd6..f00fa55 master -> master
若我们可以在代码仓库中看到我们刚才提交的文件,说明提交成功。如下图:

5. 安装 jdk (在远程机器上)
(1)解压 jdk 包
将jdk-17.0.10_linux-x64_bin.tar.gz 上传到远程机器/usr/local下
[root@test ~]# cd /usr/local/
[root@test local]# mkdir java
[root@test local]# mv jdk-17.0.10_linux-x64_bin.tar.gz /usr/local/java/jdk-17.0.10_linux-x64_bin.tar.gz
[root@test local]# cd java/
[root@test java]# tar -zxvf jdk-17.0.10_linux-x64_bin.tar.gz
(2)配置 java 的环境变量
[root@test java]# vi /etc/profile
添加如下内容:
export JAVA_HOME=/usr/local/java/jdk-17.0.10
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@test java]# source /etc/profile
(3)验证
[root@test java]# java -version
java version "17.0.10" 2024-01-16 LTS
Java(TM) SE Runtime Environment (build 17.0.10+11-LTS-240)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.10+11-LTS-240, mixed mode, sharing)