目录
一.引言
二.踩坑与实践
1.原始代码
2.mvn package 未执行与解决 [导入环境变量]
3.git pull 未执行与解决 [添加绝对路径]
三.总结
git 任务部署在通道机,每天6点需要定时更新 jar 包并打包上线,所以需要在 linux 服务器上:
A.部署 maven: 上一篇文章已经铺了完整过程:Linux 服务器 Maven 环境安装与测试
B.部署 git: 机器上已经有 git,所以省略了这一步,大家没有 git 可以搜索一下安装过程
C.crontab: 定时 git pull + mvn package,本文主要进行第三步实践。
# 进入目标环境
echo `date`
echo cd 目录
cd $targetPath# 更新代码
echo git 更新
git pull# 重新打包
echo package...
sh $targetPath/package.sh
将代码添加至 corontab 并将输出流指向 log,发现到点后只有 echo 的日志,没有 pull 和 package 的日志:
Fri Mar 10 14:13:01 CST 2023
cd 目录
git 更新
package...
package.sh 内部逻辑很简单即 mvn clean package 但是没有执行,通过网上查询发现是因为自己没有添加环境变量导致,在脚本前端增加 source 语句引入环境变量:
source /etc/profile
source /etc/bashrc
添加后发现重定向的 log 中 mvn package 信息已经正常输出,但是依旧不见 git 日志:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 02:57 min (Wall Clock)
[INFO] Finished at: 2023-03-10T14:16:00+08:00
[INFO] ------------------------------------------------------------------------
上面明明已经添加了环境变量为什么 git 不生效呢,我们查看了一下 $PATH:
/usr/local/bin
再使用 whereis git 查看下 git 的位置:
git: /usr/bin/git /usr/share/man/man1/git.1.gz
git 在 /usr/bin 下,PATH 是 /usr/local/bin 所以 git 没找到,这里直接在脚本中指定为绝对路径:
source /etc/profile
source /etc/bashrc# 进入目标环境
echo `date`
echo cd 目录
cd $targetPath# 更新代码
echo git 更新
/usr/bin/git pull# 重新打包
echo package...
sh package.sh
再次添加至 crontab,这次终于有 git 的日志了:
Fri Mar 10 14:20:01 CST 2023
cd 目录
git 更新
Already up-to-date.
package...
好久不写 shell 脚本,这么简单的逻辑搞了小半天实在不应该,深刻反思:
- shell 脚本一定要添加环境变量
- 添加环境变量找不到就用 whereis xxx 查找对应的绝对路径,下面是常用到的:
whereis java
whereis python
whereis maven