首页 > 其他分享 >一文搞懂docker安装Jenkins,从gitee上面拉取代码.部署到另一台服务器支持版本回退

一文搞懂docker安装Jenkins,从gitee上面拉取代码.部署到另一台服务器支持版本回退

时间:2022-11-15 16:56:08浏览次数:49  
标签:git 另一台 APP gitee jenkins home docker echo 搞懂

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

 

 

 

 

 

4.全局工具配置

1.jdk

 

2.git

 

3.maven

 

5.系统配置

 

java环境变量

 

ssh服务器配置.就是项目最终要部署的服务器 这里可以通过 账号密码配置, 也可以通过 sha免密登录.之后的 链接gitee也会说明

 

6.新建任务

 

1.General

增加两个参数, 一个选项 一个字符就可以. 用于 版本构建和回退

 

 

2.源码管理. 又一个难点

配置之前需要先进入容器生成 秘钥
docker exec -it jenkins /bin/bash
ssh-keygen -t rsa #之后一路回车

 

cd /root/.ssh/

  

id_rsa: 私钥. 用于在Jenkins中填写 id_rsa.pub:公钥. 需要在 gitee中配置

 

 

 

 

 

 

 

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>2'|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=10.19.32.75:18848 --spring.cloud.nacos.config.server-addr=10.19.32.75: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.一键构建

 

     

标签:git,另一台,APP,gitee,jenkins,home,docker,echo,搞懂
From: https://www.cnblogs.com/changhai/p/16892979.html

相关文章

  • 一文彻底搞懂volatile用法
    一、常见说法volatile关键字和const对应,一样是一种类型修饰符,用它修饰的变量表示可以被某些编译器未知的因素更改,比如操作系统、硬件或者其它线程等。遇到这个关键字声......
  • 彻底搞懂nodejs事件循环
    nodejs是单线程执行的,同时它又是基于事件驱动的非阻塞IO编程模型。这就使得我们不用等待异步操作结果返回,就可以继续往下执行代码。当异步事件触发之后,就会通知主线程,主线......
  • 一张图彻底搞懂Spring循环依赖
    1什么是循环依赖?如下图所示:BeanA类依赖了BeanB类,同时BeanB类又依赖了BeanA类。这种依赖关系形成了一个闭环,我们把这种依赖关系就称之为循环依赖。同理,再如下图的情况:......
  • 一文彻底搞懂加密、数字签名和数字证书!
    微信搜索......
  • 彻底搞懂React-hook链表构建原理
    写在前面的小结每一个hook函数都有对应的hook对象保存状态信息useContext是唯一一个不需要添加到hook链表的hook函数只有useEffect、useLayoutEffect以及us......
  • 一文搞懂 == 、equals和hashCode
    面试的时候,经常会被问到==和equals()的区别是什么?以及我们也知道重写equals()时候必须重新hashCode()。这是为什么?既然有了hashCode()方法了,JDK又为什么要提供equals()方法......
  • 一文搞懂 == 、equals和hashCode
    面试的时候,经常会被问到==和equals()的区别是什么?以及我们也知道重写equals()时候必须重新hashCode()。这是为什么?既然有了hashCode()方法了,JDK又为什么要提供equals()方法......
  • 一文搞懂Path环境变量
    什么是Path环境变量?在探讨这个问题之前,我们需要了解什么是环境变量。“环境变量”和“path环境变量”其实是两个东西,这一点大家一定要区分开,不要混为一谈。“环境变量”......
  • 使用phpstudy搭建gitee开源项目[勾股dev]
    前段时间公司一直要求进行只是梳理,整合,想着做一套知识管理系统,在gitee上找到了一个开源的项目管理系统,带的有知识库管理子系统,索性就拿来使用了;gitee地址  https://git......
  • 今日内容 gitee合并代码,项目前台首页组件编写
    协同开发在公司中,都是多人共同开发同一个项目-1组长本地创建出空项目,底层代码写完---》提交到远程仓库-2张三,李四,王五都要共同开发这个项目-3我们......