一文搞懂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 中找密码

 

点击 安装推荐的插件. 这一步比较耗时.
完成后还需安装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 #之后一路回车

 

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;

  

 
 
posted @ 2022-11-15 16:49  若星汉浮云  Views(1674)  Comments(1Edit  收藏  举报