共计 2590 个字符,预计需要花费 7 分钟才能阅读完成。
以 golang 构建我的项目为例。
新建工作
- 输出一个工作名称
- 抉择:构建一个自在格调的软件我的项目
- 可选:也能够复制已创立的工作
- 确定提交
配置
再次编辑刚创立的工作
形容
对你的我的项目进行形容,能够写如下信息。
- 项目名称
- 部署的 IP 地址
- 部署近程的目录
- 日志门路
- 配置目录及文件名称
- 启动服务
- 进行服务
- 重启服务
- 等等
Job Notifications
参数化构建过程
构选:参数化构建过程
-
GIT 参数
-
选项参数
- 配置“构建”和“回滚”参数。供构建时抉择
-
字符参数
- 设置填写构建 ID 号。
源码治理
个别应用 GIT,在 branches to build 指定分支应用变量 ${GIT_COMMIT}
, 即参数化构建过程那一步应用的 GIT 参数名称
填写无效的 GIT 地址。并应用受权的用户帐号,保障能够拜访仓库代码。
构建
会用到以下二个选项:
- 执行 Shell
- Send files or execute commands over SSH
构建我的项目的 SHELL
- 定义变量
- 删除或创立目录
- 判断用户是“构建”还是“回滚”进行区别操作
源码:
set -x
# 定义名称
program_name=go_test
# 我的项目压缩名称
program_filename=${program_name}.tar.gz
# 我的项目门路
target_path="${WORKSPACE}/target/"
# 备份门路
back_path="${WORKSPACE}/bak/"
if [-f "${back_path}${program_filename}" ];then
rm -f ${back_path}${program_filename}
fi
ls -l $back_path
# 以后构建 ID 的门路
back_path_num="${back_path}${BUILD_NUMBER}"
# 删除前必须判断是否存在
if [-f "${target_path}${program_filename}" ]; then
rm -rf "${target_path}${program_filename}"
echo "${target_path}${program_filename} 删除胜利"
fi
# 备份门路不存在则创立
if [! -d ${back_path_num} ]; then
mkdir -p $back_path_num
echo "$back_path_num 创立胜利"
fi
# 我的项目门路不存在则创立
if [! -d ${target_path} ]; then
mkdir -p $target_path
echo "$target_path 创立胜利"
fi
# 配置 Go 环境
set CGO_ENABLED=0
set GOARCH=amd64
set GOOS=linux
export GO111MODULE=on
export GOPROXY=https://goproxy.cn,direct
case $status in
deploy)
echo "开始构建我的项目..."
# 生成可执行文件
/usr/local/go/bin/go build -mod=vendor -tags=jsoniter -o "${program_name}" .
# 压缩打包
tar -zcf ${program_filename} --exclude=docs ${program_name}
# 将压缩好的程序复制到备份文件夹里
cp -f ${program_filename} ${back_path_num}
# 将压缩好的程序复制到 target 文件里
cp -f ${program_filename} ${target_path}
# 将其删除压缩包和二进制文件
rm -f ${program_filename}
rm -f ${program_name}
echo "构建实现"
;;
rollback)
echo "版本回滚. 回滚至 $version 版本"
cd "${back_path}${version}"
# 将历史版本的文件复到我的项目目录里
cp -f * "${target_path}"
# 回滚的版本也复制到以后版本的文件夹里,不便下次回滚。cp -f * "${back_path_num}"
;;
esac
复制到近程机器 SHELL
将 jenkins 打包好的文件复制到近程机器上。
源码:
set -x
# 项目名称
app_name=go_test.tar.gz
# 我的项目门路
app_path=/data/tmp/
# 复制目标目录
origin_path=/root/target/
# 源文件
origin_filename=${origin_path}${app_name}
# 解压文件
sudo tar -zxvf ${origin_filename} -C ${app_path}
# 复制完后,删除源始文件
if [-f "${origin_filename}" ];then
rm -f ${origin_filename}
echo "${origin_filename} delete success"
fi
# 写上你启动程序的代码。echo "completed"
保护备份 SHELL
jenkins 里的备份不可能有限的应用,否则磁盘会无奈应用。必须对备份的目录进行保护。
咱们能够设置保留 10 个版本的数据。
源码:
# 我的项目备份不可能有限备份。保留 10 个版本的历史数据。reserved_num=10 #保留文件数
file_dir=${WORKSPACE}/bak/
date=$(date "+%Y%m%d-%H%M%S")
cd $file_dir #进入备份目录
file_num=$(ls -l | grep '^d' | wc -l) #以后有几个文件夹,即几个备份
while(($file_num > $reserved_num))
do
old_file=$(ls -rt | head -1) #获取最旧的那个备份文件夹
echo $date "Delete File:"$old_file
rm -rf "${file_dir}$old_file"
let "file_num--"
done
ls -l $file_dir
公布操作
构建
- 抉择: Build with Parameters
- 抉择分支
- 抉择 status
回滚
- 抉择: Build with Parameters
- 抉择 status: rollback
- 设置 version 版本号
总结
Jenkins 保障了我的项目的继续集成与构建,减速了我的项目构建过程,保障人为烦扰。
版本回滚对于线上的业务是必不可少的一个性能,一旦线上异样须要马上回滚版本。容不得任何工夫耽误。
正文完