公司基本都是用PHP写的后台代码,所以决定做一个jenkins自动构建代码,省着总让我手动一个一个文件传。
我要达到的最终目的是:在一个项目里面可以选择发布和回滚,构建过程清晰明了。
我的心路历程是这样的:
首先架构情况为gitlab和jenkins都是在本地,服务器都是买的云服务器,所以要在本地打包,接着通过jenkins的Send build artifacts over SSH插件上传到云服务器
然后之前用Phing插件做了一个只能发布,不能回滚的build.xml。也没细研究,肯定也能用它做回滚。用这个做的好处就是构建时候,构建过程特别清晰,明了。因为没细研究,所以我就用参数化构建,接着写一个脚本完成的。这样做就是我要的最终目的–清晰明了没达到,总感觉乱乱的,毕竟看过Phing之后,别的就没法看了
最后就是创建过程
注意:这里不推荐这种构建方案,比较费资源,代码打包都是打包整个项目,还需要上传至云服务器,还比较慢。
1.添加参数化构建过程
2.添加源码管理
3.添加构建步骤Execute shell
case $Status in
Deploy)
echo "status: $Status"
path="${WORKSPACE}/dist"
if [ -d $path ];then
echo "The file is already exists!!!"
else
mkdir -p $path
fi
cd ${WORKSPACE}
tar czf dis/${JOB_NAME}-${BUILD_NUMBER}.tar.gz * --exclude=dist
find ${WORKSPACE}/dist -mtime 2 -name "*.tar.gz" -exec rm -rf {} \;
echo "Completion!!!"
;;
RollBACK)
echo "Status: $Status"
echo "version: $Version"
file_old=`ls ${WORKSPACE}/dist | grep $Version`
cd ${WORKSPACE}/dist
cp -R $file_old ${JOB_NAME}-${BUILD_NUMBER}.tar.gz
;;
*)
exit
;;
esac
这里 ${WORKSPACE}、${JOB_NAME}、${BUILD_NUMBER}都是jenkins内置变量,这里我把官网的翻译贴出来:
BUILD_NUMBER
当前版本号,例如:153
JOB_NAME
此版本的项目名称
WORKSPACE
作为工作空间分配给构建目录的绝对路径。
脚本具体内容不难,就是如果选择“Deploy”就执行创建文件夹(用于保存压缩后的文件),然后执行压缩文件,后面我加了一个超过设定时间,就删除文件的句子。因为怕文件太多,占用空间。
如果选择”RollBACK”,获取到要回滚的BUILD_NUMBER,查找到文件内容包含 BUILD_NUMBER的压缩文件,我就把这个文件复制成为最新的构建文件。
4.添加构建后操作(用于把本地压缩好的文件上传到云服务器上)
Source files:
dist/${JOB_NAME}-${BUILD_NUMBER}.tar.gz
Exec command:
cd /PATH
tar -zxf ${JOB_NAME}-${BUILD_NUMBER}.tar.gz -C /PATH
source /usr/local/script/jenkins_delete_old.sh
最后就是把压缩好的文件上传到云服务器上,并解压到指定目录。
最终效果图如下:
这种方法可能比较蠢,但是还算比较简单高效。这里面写出了一些我的心路历程,就是我在制作前期所想的,在网上找到相关资料可能很多都跟我要的不匹配,所以就自己写了一个。如果有更好的办法,请大神们不吝赐教