Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署_工具技巧Maven部署技巧

凌晨两点。

Jenkins GitLab Maven CICD 整合_工具技巧Maven部署技巧_Jenkins Maven Git 自动化部署

隔壁的猫发出那种类似叫春的声音,我的服务器同样在发出声响。并非是源于思念之情,而是由于我再次使用 kill -9 指令处理了那个令人厌恶的 java 进程。端口 8088 处于被占用的状态,其对应的 pid 为 20807,我注视着它,宛如在看着一个像赖床般不愿起身的孩子。

其实我只是想睡个安稳觉。

然而代码终究是得进行部署的。你大概也是如此,眼眶呈现黑色,不停地刷着控制台日志,对着GitLab的token吐出一句“你又过期了”。随后复制以glpat -开头的那串杂乱无章的代码,仿若在进行黑市交易那般。粘贴进去,点击一次,出现绿灯。

工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署

没人知道这套“自动化”背后,全是手动的泪。

Jenkins Maven Git 自动化部署_Jenkins GitLab Maven CICD 整合_工具技巧Maven部署技巧

## Git 明明记得一切,却从不告诉你哪里会崩

工具技巧Maven部署技巧_Jenkins Maven Git 自动化部署_Jenkins GitLab Maven CICD 整合

他们讲,运用Git去管理历史内容,借助Maven来管理构建流程。这番话语实在是极为正确 ,正确到如同教科书那般。

Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署_工具技巧Maven部署技巧

然而,教科书并不会向你告知:当你运用yum为CentOS安装Git之际,其版本低至连Jenkins都无法识别它,此时你必须前往进行源码编译,随后对着./configure所出现的报错愣神半小时。

更不会向你讲:你于IDEA内顺遂地commit,将其push至远程仓库之时,而后前往GitLab页面去点击那个Merge Request,一旦呈现绿色,你便认定一切已然妥当无误了。

Jenkins Maven Git 自动化部署_工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合

但其实你忘了配置 .gitignore。

Jenkins Maven Git 自动化部署_工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合

那个占据 200MB 空间的 node_modules,是被你关系亲密的好友连带推上去的。你欠缺自我认定的勇气脸皮去承认,我也缺失问询的勇气脸皮去问。

## Maven 是个好仆人,也是个坏主子

Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署_工具技巧Maven部署技巧

根目录下的 Root POM 无需改动,鉴于其所处位置恰好在根目录那儿。教程当中就是这般记述的。

于是你保持默认,点保存。然后那个橘红色的灯亮了。

server.port=8088

@RestController
@RequestMapping("/")
public class HelloController {
 
    @RequestMapping
    public String sayHello() {
        return "Hello dev";
    }
}

[错误],未能执行目标…… ,出现这种情况,是在执行某个任务时,遭遇了致使目标执行失败的状况。

你前往查看控制台输出,那儿有 400 行日志,你对其进行翻阅,一直翻到末尾,这时会看到一行内容如下:“阿里云仓库找不到 2.7.11 - SNAPSHOT”。

那么个时刻,你切实领会明白了啥叫做“SNAPSHOT”,即快照之意,迅速地,照那么一下便消逝不见啦,而你呢,也即将快速消失了。

Jenkins GitLab Maven CICD 整合_工具技巧Maven部署技巧_Jenkins Maven Git 自动化部署

你把版本改成 2.7.10,重新跑。

绿了。

Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署_工具技巧Maven部署技巧

## 包传过去了,然后呢?

工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署

配置通过 SSH 发送文件,需执行 Post Steps。

Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署_工具技巧Maven部署技巧

你万分谨慎地于“Transfer Set”之中填入source files,自workspace着手寻觅那个jar,把路径填写正确之后,勾选“Remove prefix”,将/target/前面多余的部分去除。

你以为它会在测试服务器的 /root 下出现。

但你没有 mkdir -p /root/myapp。

报错。File not found。

你并非不晓得要去构建目录,你不过是忘却了,你老是忘却,你还忘掉了今日乃是周五,下周一前来进行验收。

工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署

## 真正杀死你的不是 bug,是那个还活着的进程

工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署

脚本写好了。clean.sh。

先执行ps -ef命令,再通过该命令的输出结果执行grep java命令,接着以上一个命令的输出结果为基础执行grep -v grep命令,随后取上一个命令输出结果中第二列的数据,最后根据这些数据执行xargs kill -15命令。

Jenkins GitLab Maven CICD 整合_工具技巧Maven部署技巧_Jenkins Maven Git 自动化部署

你对着这行命令思索了三秒钟,为何要使用grep -v grep呢?这是由于倘若不添加它,grep自身也会被视作java进程而被终止。

是的,工具有时会把自己当成敌人。

你执行了。没反应。再加个 -9。好了,进程死了。

接着呀,你去运行 nohup java -jar ,随后呢,将输出引导重新定向至 log.out。

工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署

将浏览器打开,192.168.40.97这个地址中的8088端口,出现转圈的情况,出现转圈的情况,又出现转圈的情况。

你去看 log.out,只看到一行:

Jenkins GitLab Maven CICD 整合_工具技巧Maven部署技巧_Jenkins Maven Git 自动化部署

Web服务器启动了,其处于端口8088上。

它活了。你也活了。

## 一套“简单”的自动化部署

什么是简单?

那里有三台服务器,其中一台在运行着 Git,另外一台在运行着 Jenkins,还有一台在运行着你所说的那个总是沉睡不醒的 Spring Boot。

Jenkins Maven Git 自动化部署_工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合

这并非单纯的简易,这乃是“简约”,将全部的繁杂都化简为日常的痛楚,就如同牙髓炎那般,构不成致命威胁,然而却会时不时地疼上一回,以此来提示你它依旧存在着。

我们谋求自动化,谋求到最终发觉最为自动的环节是:每一回都依靠手动去清理进程,每一回都凭借手动去删除 /target,每一回都经由手动去输入那个以 glpat- 起始的 token。

Jenkins Maven Git 自动化部署_工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合

## 脚本写完了,猫不叫了

凌晨四点。

我把那个 clean.sh 加到 Pre Steps。

工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署

保存。

运行。

Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署_工具技巧Maven部署技巧

#14 构建。

控制台输出最后一行:

工具技巧Maven部署技巧_Jenkins Maven Git 自动化部署_Jenkins GitLab Maven CICD 整合

Finished: SUCCESS

我打开浏览器。

192.168.40.97:8088

[root@jenkins98 target]# java -jar jenkins-study-0.0.1-SNAPSHOT.jar

欢迎页。Hello World。

我突然不知道应该笑还是应该关掉终端去睡觉。

## 结不结束,它都在那里

其实这篇文章写到这里已经 1100 字了。

但我觉得什么都没说清楚。

工具技巧Maven部署技巧_Jenkins Maven Git 自动化部署_Jenkins GitLab Maven CICD 整合

是我没表述清晰,你头一回配通Git凭证之际,险些将PAT明文写到博客当中。

我未曾表述清晰,在你使用 mvn clean package 之后,target 目录当中放置着那个体积为 50MB 的 jar,你凝视着它,仿若凝视着自己刚刚诞生的婴孩。

我也没说清楚你删掉 nohup 进程时那种快感。

算了。

自动化的部署便是这般模样——你清清楚楚地撰写了一百行的配置内容,可到头来却发觉最具可靠性的竟然仍是那一行:

工具技巧Maven部署技巧_Jenkins Maven Git 自动化部署_Jenkins GitLab Maven CICD 整合

尝试终止myapp进程,先通过jps命令查找包含“myapp”的那一项,再提取该项每行第一个字段,最后给于该项进程类似强制终止的操作。

管你什么 Git 什么 Maven 什么 SSH 插件。

这个世界太复杂,我只想要端口不被占用。

工具技巧Maven部署技巧_Jenkins GitLab Maven CICD 整合_Jenkins Maven Git 自动化部署