用jenkins 实现项目自动部署笔记

1、目的

1、一键实现项目自动构建打包发布(用于生产环境)

2、实现代码提交到代码仓库立刻自动打包部署(用于测试环境)

3、本测试脚本代码在最后

2、操作环境

  • centos

  • jdk

  • maven

  • jenkins

  • gitee

  • git

  • docker

2、实现思路

1、生产环境

  1. 合并代码开发分支到master分支,准备发布最新代码

  2. jenkins一键点击发布

  3. jenkins从代码仓库拉取最新代码

  4. 通过maven进行打包

  5. 把jar包打包成镜像,上传到自己的镜像仓库私服

  6. jenkins通知应用服务器拉取最新镜像

  7. 应用服务器拉取最新镜像,运行新容器

  8. 删除旧的容器和镜像

  9. 若发布失败回滚到上一个版本

2、测试环境、开发环境

  1. 提交代码到代码仓库dev或其他分支

  2. 自动触发jenkins构建项目

  3. jenkins从代码仓库拉取最新代码

  4. 最新代码拷贝到测试服务器

  5. 自动连接测试服务器进行maven打包

  6. 把jar包打包成镜像

  7. 删除旧的容器和镜像

  8. 通过新打包的镜像,运行新容器

3、前期准备

  1. 两台centos服务器可以互相ping通(或者两台虚拟机)

  2. 准备一个springcloud或者springboot项目,用于自动发布测试(我这里准备的是一个多模块项目,目录结构如下)

  3. jdk 1.8安装包,maven 3.6 啊包装包

  • jdk下载地址:https://wp.boytian.com/#/s/p8Fv 密码 tiantian123

  • maven下载地址:https://wp.boytian.com/#/s/2lc1 密码 tiantian321

4、安装jdk环境和maven环境

两台最好都安装,这里演示一台服务器

1、jdk环境安裝

  1. 创建jdk存放目录 mkdir -p /home/jdk

  2. 上传jdk到该目录下,进入该目录并解压,解压命令: tar -zxvf jdk-8u144-linux-x64.tar.g

2、maven安装

  1. 创建maven目录和maven仓库目录
  • mkdir -p /home/maven

  • mkdir -p /home/maven/repo

  1. 上传maven到/home/maven/目录下,进入该目录并解压,解压命令:tar -zxvf apache-maven-3.6.3

3、配置jdk和maven的环境变量

  1. 修改/etc/profile文件,命令 vim /etc/profile

  2. 若目录创建和我保持一致则在底部添加如下配置,否则自行修改即可

    #输入i 进入编辑模式# java配置
    export JAVA_HOME=/home/jdk/jdk1.8.0_144
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/bin#maven 配置
    export MAVEN_HOME=/home/maven/apache-maven-3.6.3
    export PATH=$MAVEN_HOME/bin:$PATH
  3. 刷新配置使之生效

  • source /etc/profile
  1. 测试环境是否生效 , 命令 java mvn -v

  2. 另一台服务器主机同样配置

5、配置免密登录(两台服务器互相免密登录)

  1. 输入ssh-keygen -t rsa连敲三个回车

  2. 输入ssh-copy-id -i ~/.ssh/id_rsa.pub ip地址 回车

  3. 输入第二台服务器密码验证即可实现免密登录

  4. 同样的方式配置第二台服务器免密登录第一台服务器

参考:https://blog.csdn.net/u013415591/article/details/81943189

6、在第一台服务器上安装jenkin服务

1、在第一台服务器安装依次执行以下命令
  • sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo

  • sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

  • yum install jenkins

  • ln -s /home/jdk/jdk1.8.0_144/bin/java /usr/bin/java

  • sudo ln -s /home/maven/apache-maven-3.6.3 /usr/local/maven

  • systemctl start jenkins

(1、2、3)是安装jenkins,(4、5)是软连接环境命令到usr目录下(6)启动Jenkins

2、修改jenkins的权限为root权限,方便以后执行命令权限不足问题
# 打开配置文件
vim /etc/sysconfig/jenkins
# 修改$JENKINS_USER
$JENKINS_USER="root"#修改Jenkins相关文件夹用户权限
chown -R root:root /var/lib/jenkins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins#重启
systemctl restart jenkins

1619053352839

7、访问jenkins服务进行一些基础配置

  1. 浏览器访问:ip:8080

1618994599246

  1. 到服务器获取密码 命令:cat /var/lib/jenkins/secrets/initialAdminPassword

1618995408605

  1. 安装自定义插件

1618995513826

  1. 创建管理员账号

  2. 点击完成之后重启一下jenkins服务,命令:systemctl restart jenkins

  3. jenkins配置全局jdk和maven环境

1618996436490

1618996573737

1618996616938

  1. 安装gitee插件,推送代码到gitee主要由此插件进行触发

  2. 配置gitee交互凭证

  3. 全局配置gitee

8、准备部署项目

  1. 创建gitee代码仓库

1619050043509

9、配置jenkins开始配置自动部署

  1. 创建一个自动构建流程 选择自由风格

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tAOlG9N1-1637893426234)(https://mmbiz.qpic.cn/mmbiz_png/0bmE6dS9CgJQUEbkCyje2ajToYicZGj4rVheOTDiahK1yzXSvdpwsAOsNeiaibia91ZwxkAG0QLEpv6hJmdNEGIeksA/640?wx_fmt=png)]

1618997421632

  1. 选择参数化构建

    定义一些变量,这些变量在脚本中使用

1619050337908

1619054535420

3、配置git仓库

1619050733823

1619050777451

1619050871896

  1. 构建自动触发器,配置jenkins

  2. 构建触发器,配置gitee

1619051250412

  1. 测试构建是否生效

    配置jenkins添加构建步骤

1619051394272

点击 应用 保存

  1. 测试手动构建

1619051457074

1619051489297

1619051513195

  1. 测试自动构建

    手动push代码看看是否会出发自动构建

10、自动化部署脚本

自动构建配置完成,接下来编写一个脚本进行真正的部署项目

脚本内容如下,目前实现了功能但还是不完善,后期完善

  1. 项目部署脚

    
    # 项目模块统一变量设置# 公共服务
    CLOUD_CONTAINER="cloud"
    CLOUD_IMAGE="cloud_server"
    CLOUD_PORT=8002
    # 微信小程序模块
    FAMILY_CONTAINER="family"
    FAMILY_IMAGE="family_server"
    FAMILY_PORT=8003
    # 鉴权模块
    AUTH_CONTAINER="auth"
    AUTH_IMAGE="auth_server"
    AUTH_PORT=8004
    # 网关
    GATEWAY_CONTAINER="gateway"
    GATEWAY_IMAGE="gateway_server"
    GATEWAY_PORT=9999# 删除应用服务器旧的代码(在第二个服务器创建好/home/project/fym-platform/目录,否则报错)
    ssh -Tq ${host} <<EOF
    rm -rf /home/project/fym-platform/*
    EOF# 拷贝新代码到应用服务器
    echo "拷贝代码开始..."
    scp -r ./* ${host}:/home/project/fym-platform
    echo "拷贝代码结束..."# 登录到项目服务器执行命令
    ssh -Tq ${host} <<EOFcd /home/project/fym-platformecho "项目开始构建打包"mvn clean package -Dmaven.test.skip=true -P${environment}echo "jar文件拷贝"mkdir -p /web/project/fym-platformcp -r gateway-server/target/gateway-server*.jar  Dockerfile /web/project/fym-platform/cp -r fym-service/*/*/target/*server*.jar /web/project/fym-platform/echo "=============== 开始部署容器 ==============="# 停止并删除旧的容器docker ps -a|grep $CLOUD_CONTAINER &&  docker stop $CLOUD_CONTAINER && docker rm $CLOUD_CONTAINER || echo "not exist"docker ps -a|grep $GATEWAY_CONTAINER &&  docker stop $GATEWAY_CONTAINER && docker rm $GATEWAY_CONTAINER || echo "not exist"docker ps -a|grep $FAMILY_CONTAINER &&  docker stop $FAMILY_CONTAINER && docker rm $FAMILY_CONTAINER || echo "not exist"docker ps -a|grep $AUTH_CONTAINER &&  docker stop $AUTH_CONTAINER && docker rm $AUTH_CONTAINER || echo "not exist"# 删除旧的镜像docker images |grep  $CLOUD_IMAGE  && docker rmi -f $CLOUD_IMAGE  || echo  "not exist"docker images |grep  $GATEWAY_IMAGE && docker rmi -f $GATEWAY_IMAGE || echo  "not exist"docker images |grep  $FAMILY_IMAGE && docker rmi -f $FAMILY_IMAGE || echo  "not exist"docker images |grep  $AUTH_IMAGE && docker rmi -f $AUTH_IMAGE || echo  "not exist"# 构建新的镜像docker build --build-arg JAR_FILE=cloud-server-1.0.jar -t $CLOUD_IMAGE  /web/project/fym-platform/docker build --build-arg JAR_FILE=gateway-server-1.0.jar  -t $GATEWAY_IMAGE /web/project/fym-platform/docker build --build-arg JAR_FILE=family-server-1.0.jar  -t $FAMILY_IMAGE /web/project/fym-platform/docker build --build-arg JAR_FILE=auth-server-1.0.jar  -t $AUTH_IMAGE /web/project/fym-platform/# 运行镜像容器docker run -it -d --name $CLOUD_CONTAINER -p $CLOUD_PORT:$CLOUD_PORT $CLOUD_IMAGEdocker run -it -d --name $GATEWAY_CONTAINER -p $GATEWAY_PORT:$GATEWAY_PORT $GATEWAY_IMAGEdocker run -it -d --name $FAMILY_CONTAINER -p $FAMILY_PORT:$FAMILY_PORT $FAMILY_IMAGEdocker run -it -d --name $AUTH_CONTAINER -p $AUTH_PORT:$AUTH_PORT $AUTH_IMAGE
    EOFecho "部署成功"
  2. jar镜像打包脚本

    FROM primetoninc/jdk:1.8
    ARG JAR_FILE
    MAINTAINER   d1376537549@qq.com
    COPY ${JAR_FILE} app.jar
    ENV JAVA_OPTS="-Xmx512m -Xms512m -Xmn512m -Xss256K -XX:SurvivorRatio=8 -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -XX:+UseConcMarkSweepGC -XX:ConcGCThreads=4 -XX:+CMSClassUnloadingEnabled -Dfile.encoding=UTF-8 -XX:+DisableExplicitGC -XX:+PrintGC -XX:+PrintGCTimeStamps -Xloggc:./gc.log"
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
  3. 修改jenkins刚才shell配置如下

    #!/bin/bash
    chmod u+x run.sh # 一行是赋予脚本执行权限
    ./run.sh #一行是执行脚本

1619052201097

11、测试自动构建和手动构建

  1. 手动触发构建(提交代码自动触发也一样),查看输出控制台,已经开始下载maven依赖开始打包

1619053964419

1619054134274

1619054194717

  1. 查看第二台服务器docker镜像

1619054218370

1619054239768

  1. 查看nacos服务启动状态

  2. 测试项目是否部署成功即可

搭建Jenkins+springcloud一键自动部署相关推荐

  1. 搭建Jenkins+Github的自动部署环境并使用守护进程(Supervisor)部署Golang(gin)项目

    零.前言 Jenkins是一个自动部署的平台,可以极大的帮助我们自动部署项目,把注意力放在书写代码上. 教程环境说明: 系统:ubuntu20 配置:2核4G 软件:JAVA11 安装方式:APT(不 ...

  2. 5分钟快速掌握Jenkins,项目一键自动部署

    5分钟快速掌握Jenkins,项目一键自动部署 目录 前言 Jenkins是什么? Jenkins环境安装搭建 Jenkins基本使用介绍 Jenkins快速构建项目,项目自动化部署 学习总结 前言 ...

  3. 这可能是东半球最详细的Linux下搭建Jenkins服务器实现自动打包的教程(上)

    前言:作为开发者,我们都遇到过这样一个问题,项目在测试期的时候,测试总会找我们打各个环境的包,什么生产包.prd包.pre包,每次都是我们打完包再发给测试.可是打包是要时间的啊,项目小还好,项目大的话 ...

  4. 前端一键自动部署工具

    前端一键自动部署工具

  5. 这可能是东半球最详细的Linux下搭建Jenkins服务器实现自动打包的教程(下)

    上一篇我们从零开始,在Linux环境下配置了Jenkins的Android构建环境,但也仅仅是搭建环境,至于参数化构建.输出apk .定时构建.邮件发送等功能因为篇幅的原因没有介绍,本篇博客就来介绍介 ...

  6. 一键部署oracle,一种Oracle单机一键自动部署方法与流程

    本发明涉及数据库安装技术领域,尤其涉及一种Oracle单机一键自动部署方法. 背景技术: Oracle Database,又名Oracle RDBMS,或简称Oracle,它是在数据库领域一直处于领先 ...

  7. 虚拟矿机服务器架设,Swarm Bzz个人矿机需要什么配置?Bzz节点一键自动部署工具...

    BZZ即将完成空投进入主网阶段,可以说现在就是bzz的头矿阶段!本文由实际经验总结,分享bzz币个人怎么配置才能尽快获得头矿!同时,附上bzz节点一键自动部署工具. Swarm白皮书中并没有提供的硬件 ...

  8. jenkins整合gitee自动部署SpringBoot项目

    文章目录 前提条件 一.服务器安装jenkins 方法一:简单快捷 第一步:将jenkens.war导入到系统 第二步:放在tomcat的webapp下面 第三步:访问http://ip:8080/j ...

  9. Window环境下的Git+GitHub+jenkins+Tomcat实现自动部署项目并发送构建邮件

    Git+GitHub+jenkins+Tomcat实现自动部署项目 我们这里要实现的效果是:团队通过Git把项目push到GitHub上去,然后Jenkins通过GitHub的webhook(钩子)来 ...

最新文章

  1. java简述对象的组合_Java程序运行和对象创建过程简述
  2. [optee_os]-optee中的内核栈、中断栈、abort栈的定义
  3. win8.1和wp8.1共用代码,需要注意的一些问题
  4. 用React开发SAP Fiori应用
  5. 在SQL Server中加入包含假设和CE模型变化
  6. python教程初级有什么用_学Python编程有什么用?Python基础教程!
  7. 三张图较为好理解JavaScript的原型对象与原型链
  8. Node.js 创建第一个应用
  9. php 7 环境安装
  10. linux关闭端口进程命令,linux关闭端口命令
  11. Windows文件所有者恢复TrustedInstaller权限
  12. Kali字典正确使用姿势
  13. mybatis报错:Could not find resource mapper/UserMapper.xml
  14. [转贴]给想立志入行网络或已经初入行的朋友的建议(一)
  15. 广义表((a,b),c,d)表头和表尾分别是什么?
  16. 零基础学大数据现实吗?
  17. 算法优化:旋转对称图最优解法及思路分享(几乎最优)
  18. 教你急速快速批量插入1000万条数据到mysql数据库表面试题
  19. 【扩展欧几里得】Codeforces Round #406 (Div. 2) A. The Monster
  20. 不是python内置函数的是_Python内置函数

热门文章

  1. SpringCloud 组件Gateway服务网关【断言工厂过滤器工厂】
  2. 奇思乐高机器人怎么样_奇思机器人:学习乐高的最佳时机到底是几岁?
  3. 2021-01-07 PMP 群内练习题 - 光环
  4. k8s使用外部供应商代理使用ceph
  5. php——tp5中前后端的数据交互
  6. Centos6.8无法设置输入法
  7. MPC-305X 随机相位光电双向晶闸管光电耦合器 兼容代替MOC3053
  8. Java开发常用包、接口和类
  9. java计算机毕业设计网络游戏论坛平台源码+系统+数据库+lw文档+mybatis+运行部署
  10. 快速排序算法的递归,迭代法实现(C++)