安装
Docker
https://www.jenkins.io/doc/book/installing/docker/ 宿主机目录:/var/lib/docker/volumes/jenkins-data/_data
bash
$ docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
$ docker exec -it boring_margulis /bin/bash
$ cat /var/jenkins_home/secrets/initialAdminPassword
Ubuntu
bash
# Java SDK
sudo apt-get install openjdk-8-jdk
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
# 验证是否安装成功及相关命令
# 使用 systemctl启动Jenkins
sudo systemctl start jenkins
# 使用其status命令来验证是否成功启动
sudo systemctl status jenkins
# 安装成功会显示以下
wuchendi@WuChendi:~/下载$ sudo systemctl status jenkins
● jenkins.service - LSB: Start Jenkins at boot time
Loaded: loaded (/etc/init.d/jenkins; generated)
Active: active (exited) since Mon 2020-10-19 22:00:52 CST; 12h ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 18959)
Memory: 0B
CGroup: /system.slice/jenkins.service
# 重启Jenkins
sudo systemctl restart jenkins
配置Jenkins
默认初始本地地址
bash
// ip:8080 (默认为8080端口,可修改)
192.168.xx.xxx:8080
// 重启Jenkins
192.168.xx.xxx:8080/restart
- 解锁 Jenkins
- 安装插件
install suggestes plugins(安装建议插件)
- 创建用户
安装完成后,系统将提示设置一个管理员用户。可以跳过,使用上面使用的初始化密码作为admin登录。
- 配置 URL
- 重启
- 初始化页面
修改时区
验证的话可以在
[http://ip:808](http://ip:8081)0/systemInfo
中查看user.timezone
因为Jenkins
容器使用的是UTC
时间,和我们的北京时间差了正好 8 个小时,针对我们是Docker
部署的,解决方法如下
bash
# 推荐(已验证)
# 容器修改完时间后需要重新启动容器
mkdir -p /usr/share/zoneinfo/Asia
touch /etc/timezone
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo "Asia/Shanghai" > /etc/timezone
docker restart practical_khayyam
# 未验证
# 猜想可以设置时区的方式
docker run -u root --rm -d -p 8080:8080 -p 50000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai
构建参数化
- 添加选项参数
- 添加字符参数
- 最终页面显示
- 构建 - 执行shell
bash
#!/bin/bash
DATE=$(date "+%Y%m%d-%H%M%S")
# 备份目录
FileDir="/fe_release_history/$JOB_NAME"
# 创建每次要备份的目录
PATH="$FileDir/$BUILD_NUMBER"
# 回滚目录文件
ROLLBACK_FILEDIR=$FileDir/$VERSION
# 保留备份个数
BUILD_SAVE=5
case $METHOD in
deploy)
echo "$DATE -- $JOB_NAME项目部署 - $METHOD"
# 进入备份目录
cd $FileDir
# 获取目录个数
FileNum=$(ls -l | grep '^d' | wc -l)
while (($FileNum > $BUILD_SAVE)); do
# 获取排序最小的文件夹
OldFile=$(ls -rt | head -1)
echo $DATE "Delete File:"$OldFile
rm -rf $FileDir/$OldFile
let "FileNum--"
done
if [ -d $PATH ]; then
echo "The file already exists"
else
mkdir -p $PATH
fi
# 进入项目目录-执行构建命令
cd $WORKSPACE
npm install
npm run build
# 将打包好的资源备份到相应目录,覆盖已存在的目标
cp -rf ${WORKSPACE}/dist/* $PATH
echo "备份完成"
echo "Completing!!!"
;;
rollback)
if [ -n "$VERSION" ]; then
echo "$DATE -- $JOB_NAME项目回滚版本: $VERSION"
if [ -d $ROLLBACK_FILEDIR ]; then
# 删除当前构建产物
rm -rf dist*
if [ -d 'dist' ]; then
echo "The file already exists"
else
mkdir -p dist
fi
# 进入回滚版本目录
cd $ROLLBACK_FILEDIR
# TODO: 这里需要调整,生产环境的包不需要复制到项目目录下,发到cos上(或资源服务器)
# 将备份拷贝到程序打包目录中,并覆盖之前的资源
cp -rf * ${WORKSPACE}/dist/
echo "Completing!!!"
else
echo "找不到备份目录, 请检查输入版本是否存在构建失败任务. tip: 设置保留备份个数最大值:5, 请检查恢复版本是否存在!!!"
exit 1
fi
else
echo "当前回滚版本为空, 请输入需要回滚的版本号!!!"
exit 1
fi
;;
*)
exit
;;
esac
- 构建成功会保存5个最新的备份