一文搞懂docker安装Jenkins,从gitee上面拉取代码.部署到另一台服务器支持版本回退
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 的目录挂载到容器
3.访问jenkins安装插件
去 /home/jenkins/secrets/initialAdminPassword 中找密码
点击 安装推荐的插件. 这一步比较耗时.
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 #之后一路回车
cd /root/.ssh/
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
cd /home/ticket ls
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;