1.前言
通过docker安装Jenkins,从gitee上面拉取代码.部署到另一台服务器,并用docker启动.达到一键式构建的目标
扩展功能. 1.支持版本回退. 2.限制版本数量,超出自动清理
2.环境准备
Centos7.x
docker
jdk安装包(maven构建项目的环境,本文是1.8)
maven安装包
git安装包
1.jdk
jdk-8u161-linux-x64.tar.gz 上传到 /home/jdk
cd /home/jdk
tar -zxvf jdk-8u161-linux-x64.tar.gz
mv jdk-8u161-linux-x64 jdk1.8
2.maven
apache-tomcat-8.5.50.tar.gz 上传到 /home/maven
cd /home/maven
tar -zxvf apache-tomcat-8.5.50.tar.gz
mv apache-tomcat-8.5.50 maven
3.git
git-2.24.1.tar.gz 上传到 /home/git
cd /home/git
tar -zxvf git-2.24.1.tar.gz
安装git到 /home/git/git
cd /home/git/git-2.24.1
make prefix=/home/git/git all
make prefix=/home/git/git install
可能会遇到些问题,通过 yum安装缺少的依赖可以解决
成功安装后 会有 /home/git/git/bin/git 文件
3.Jenkins 安装
1.通过docker下载Jenkins
docker search jenkins/jenkins
docker pull jenkins/jenkins
2.启动Jenkins,这步很关键,挂载目录一定要选择对
docker run -u root -d -p 18080:8080 -p 50000:50000 \
-v /home/jenkins:/var/jenkins_home \
-v /home/maven/maven:/usr/local/maven \
-v /home/git/git:/usr/local/git \
-v /home/jdk/jdk1.8:/usr/local/jdk \
-v /etc/localtime:/etc/localtime \
--name jenkins \
jenkins/jenkins
将 jdk,maven,git 的目录挂载到容器
或者 使用 docker-compose , 后面的是 启动脚本
services:
jenkins:
container_name: jenkins
image: jenkins/jenkins
restart: always user: root
ports:
- 18080:8080
- 50000:50000
volumes:
- ./jenkins_home:/var/jenkins_home
- ./maven:/usr/local/maven
- ./git:/usr/local/git
- ./jdk8:/usr/local/jdk
- /etc/localtime:/etc/localtime
#!/bin/bash
name=jenkins
usage() {
echo -e "\n sh start.sh start|stop|restart|logs|ps\n"
}
## 下面是主流程
if [ -z "$1" ]
then
usage
exit 0
fi
case $1 in
'start')
echo docker-compose up -d
docker-compose up -d
;;
'restart')
echo docker restart $name
docker restart $name
;;
'stop')
echo docker-compose down
docker-compose down
## echo docker stop and rm
## docker stop $name
## docker rm $name
;;
'logs')
echo docker logs -f --tail=300 $name
docker logs -f --tail=300 $name
;;
'ps')
echo docker ps | grep $name
docker ps | grep $name
;;
*)
usage
;;
esac
3.访问jenkins安装插件
去 /home/jenkins/secrets/initialAdminPassword 中找密码
点击 安装推荐的插件. 这一步比较耗时.
完成后还需安装3个插件,chinese,publish Over ssh,Maven Integration
4.全局工具配置
1.jdk
2.git
3.maven
5.系统配置
java环境变量
ssh服务器配置.就是项目最终要部署的服务器
这里可以通过 账号密码配置, 也可以通过 ssh免密登录.之后的 链接gitee也会说明
6.新建任务
1.General
增加两个参数, 一个选项 一个字符就可以. 用于 版本构建和回退
2.源码管理. 又一个难点
这里介绍两种方式:
1)ssh免密登录
2)账户密码登录
1)ssh免密登录
配置之前需要先进入容器生成 秘钥
docker exec -it jenkins /bin/bash
ssh-keygen -t rsa #之后一路回车
id_rsa: 私钥. 用于在Jenkins中填写
id_rsa.pub:公钥. 需要在 gitee中配置
2)账户密码登录
在系统设置内增加下环境变量.
否则会出现错误:
stderr: fatal: unable to find remote helper for 'https'
3.Pre Steps
有可能pom不是根目录,自行修改
clean install -Dmaven.test.skip=true
4.Post Steps
这个地方是重点
需要配置3个
1.构建和回退脚本
2.把jar包上传到远程服务器并执行docker.sh脚本启动
3.删除多余备份版本,只保留8个
case $status in
go)
echo "status:$status"
path="../his/${BUILD_NUMBER}" #创建每次要备份的目录,可以自行更改
if [ -d $path ];
then
echo "The files is already exists "
else
mkdir -p $path
fi
\cp -r ${WORKSPACE}/* $path #复制当前版本代码到历史文件夹
#composer update
echo "Completing!"
;;
back)
echo "status:$status"
echo "version:$version"
rm -rf ${WORKSPACE}/* #删除工作空间代码
cd ../his/$version #进入备份目录
echo $version #输出获取的版本号
\cp -r ./* ${WORKSPACE}/ #拷贝历史版本至工作空间
;;
*)
exit
;;
esac
cd ../his/ #进入备份的目录
ls -t |awk 'NR>8'|xargs rm -rf #先安装时间排序,然后保留前8个历史版本
4.项目服务器docker文件
登录到项目需要部署的服务器,
在项目的文件夹新建两个文件 Dockerfile 和 docker.sh
Dockerfile
FROM openjdk:8-jre
#基础镜像
#指定dev,指定nacos注册地址&配置中心地址
ENV PARAMS="--server.port=8080 --spring.profiles.active=dev --spring.cloud.nacos.discovery.server-addr=ip:18848 --spring.cloud.nacos.config.server-addr=ip:18848 --spring.cloud.nacos.config.namespace=test --spring.cloud.nacos.config.file-extension=yml"
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
# 统一改名app.jar
COPY *.jar /app.jar
EXPOSE 8080
#传入环境变量
ENTRYPOINT ["/bin/sh","-c","java -Dfile.encoding=utf8 -Djava.security.egd=file:/dev/./urandom -jar app.jar ${PARAMS}"]
docker.sh 构建脚本
#!/bin/bash
#变量声明
APP_NAME="ticket"
APP_PORT="8080"
echo 1-停止启动服务 docker stop ${APP_NAME}
docker stop ${APP_NAME}
echo 2-删除服务 docker rm ${APP_NAME}
docker rm ${APP_NAME}
echo 3-删除镜像 docker rmi ${APP_NAME}
docker rmi ${APP_NAME}
echo 4-构建新镜像 docker build -t ${APP_NAME} .
docker build -t ${APP_NAME} .
echo 5-启动新镜像
docker run -d -p ${APP_PORT}:8080 --name ${APP_NAME} ${APP_NAME}
echo 6-脚本执行完成
5.一键构建
5.补充,不使用插件上传脚本,vue项目和springboot
1)springboot项目上传样例
sshpass -p '目标服务器密码' scp -o StrictHostKeyChecking=no -v -r -P 22 ${WORKSPACE}/system/target/boot-service.jar root@192.168.100.100:/home/boot
##远程执行启动脚本
sshpass -p '密码'' ssh -p 22 root@192.168.100.100 << eeooff
cd /home/boot
sh start.sh restart
exit
eeooff
exit;
2)vue项目样例
#source /etc/profile #声明环境变量
#npm cache verify #清除缓存
npm install #安装
rm -rf dist
npm run build #构建生产环境项目
cd ${WORKSPACE}
rm -f dist.tar
tar -cvf dist.tar dist ##打tar包
chmod -R 755 dist.tar
# zip -r dist.zip dist #打包成.zip格式
##开始上传
sshpass -p '密码' scp -o StrictHostKeyChecking=no -v -r -P 22 ${WORKSPACE}/dist.tar root@192.168.100.100:/home/nginx/html/test
##远程执行启动脚本
sshpass -p '密码' ssh -p 22 root@192.168.100.100 << eeooff
cd /home/nginx/html/test
rm -rf ./dist
tar xvf dist.tar
chmod -R 755 ./dist
rm -f dist.tar
exit
eeooff
exit;
来源:https://www.cnblogs.com/changhai/p/16892979.html |