Jenkins持续交付实战(一)

目录

  1. 持续交付系列课程总览
  2. 实战项目简介
  3. 环境准备
  4. 项目配置、调试、运行

一、持续交付系列课程总览

  • 已学习的Jenkins功能
    • 基础功能
    • 自动化测试持续集成
    • App源码打包、发布、自动测试全流程
  • 持续交付系列课程目标:应用自动化部署
    • 测试工程师的常见需求
    • 自动化部署技术最好自己掌握,即便研发、运维已经会了
    • 语言多、架构多、部署打包工具都不一样,我们怎么应对
  • 持续交付系列学习过程
    • 应用部署的过程
    • 运行环境的搭建
    • 代码细节可以循序渐进的学
  • 持续交付系列实战安排
    • 基础内容学习,部署环境准备,运行演练
    • Spring boot架构项目Server容器中运行持续交付演练
    • Spring boot架构项目Docker运行持续交付演练

二、实战项目简介

  • 实战项目 - JeeSite
    • 基于Spring Boot 2.0
    • 数据存储mysql
    • 技术选型:主流
    • 语言:Java
    • 规模适中,不大不小
    • 适合初学者的教学项目
image.png
  • 实战项目- JeeSite

  • Demo

    • 源码库演示
    • 运行应用演示
  • 实战项目小结

    • 多模块组合项目
    • 基础公共引擎模块:common
    • 核心系统模块:core
    • 模块示例模板:template
    • 模块父节点:parent
    • 入口模块:root
    • web模块:web
    • Deploy:部署代码

聊聊Spring Boot

  • 目的
    • 不是为了学习开发Spring Boot,先了解一下SpringBoot的样子,增强一些亲密感
    • 感性认识,为学习Spring Boot项目持续交付做准备
  • 框架
    • 从写程序到做软件的必经之路
    • Copy->建筑工程学的理论,Paste->软件工程学
  • Spring框架
    • J2EE轻量级开源框架
    • EJB开发太麻烦,代码量很重;Spring简化了企业应用的开发难度,少写代码专注业务
    • Spring容器管理对象生命周期,简化应用开发难度
  • Spring Boot框架
    • 比一般Spring还要方便的快速框架
    • 方便集成大量第三方库,降低集成难度
    • 学习方法建议:别从“0”开始学,可以基于一个现有的项目,然后做扩展
    • 找一个适合学习的项目很重要

三、环境准备

  • 准备了环境,才能运行程序
    • 初学者常见的痛点
    • 环境配置关键点:配置过程,验证方法,错误日志
  • SpringBoot项日运行配置mysql+java+maven

MySQL的部署

  • 首推Docker部署,实在太方便了无法拒绝
  • 下载docker镜像:docker pull mysql
  • 启动mysql docker container实例
  • docker run -d --name <your container name> -e MYSQL_ROOT_PASSWORD=<your root password> -p 3306:3306 mysql:<tag>
  • MySQL客户端工具
    • MySQL Workbench
    • 新建Server Connection,输入Host、Port、Username、Password
    • 尝试连接,能成功就说明输入的参数无误


      image.png
  • 创建jeesite 数据库:create database jeesite
    image.png

Java开发环境安装方法

  • 安装包下载路径:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
  • 命令安装
    • CentOS:yum install java-1.8.0-openjdk* -y
    • Ubuntu:apt-get install oracle-java8-installer
    • Mac:brew cask install java
  • 解压安装
    • 将JDK运行程序直接解压缩到本地路径,然后配置环境变量
    • JAVA_HOME=<jdk root path>
    • export PATH=$PATH:$JAVA_HOME/bin
  • Java环境安装正确的验证:java -version
    image.png

Maven环境安装方法-Demo

  • 下载位置:http://maven.apache.org/download.cgi

  • 下载文件:zip 或者tar格式压缩包,带bin字样的表明是可以直接运行的二进制文件


    image.png
  • Maven环境安装方法

    • 将安装包解压到本地路径,然后配置环境变量
    • export M2_HOME=<maven root path>
    • export PATH=$PATH:$M2_HOME/bin
  • 验证Maven安装成功的方法:mvn -version

    image.png

  • 加速依赖包下载方法,在settings.xml中添加阿里云镜像

<mirror>
    <id>alimaven</id>
    <name>aliyun maven</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    <mirrorOf>central</mirrorOf>
</mirror>
image.png

四、配置 调试 运行

数据库准备

  • 创建jeesite数据库
  • SQL语句:create database jeesite
  • 检查数据创建结果

初始化数据导入

  • 打开 jeesite4/web/src/main/resources/config/application.yml,填写数据库配置(IP 端口、用户名、密码)

    image.png

  • 进入项目路径jeesite4/web/bin

  • 运行数据初始化脚本程序init-data.sh ( windows batch command: init-data.bat )

    image.png

image.png

IDE里配置项目

  • 添加 jeesite4/root/pom.xml Maven根节点到IDE的maven view中
  • 其余依赖module会根据配置一起导入
  • 添加 jeesite4/root/pom.xml Maven根节点到IDE的maven view中


    image.png

IDE里Maven编译、打包项目

  • 在Maven View中选中JeeSite Root 下Lifecycle中的Clean + Install,然后单击运行按钮


    image.png

    image.png

IDE里直接运行项目

  • 在Run/DebugConfigurations中添加SpringBoot


    image.png
  • 配置Main class:com.jeesite.modules.Application

    image.png

    image.png

  • 运行Demo ~~~~


    image.png
  • 访问8980端口


    image.png

命令行里编译、打包项目

  • 进入项目的root模块所在的目录,然后运行mvn clean install 命令执行项目编译
image.png
image.png

命令行里运行项目

  • 进入jeesite4/web目录下,运行:mvn clean spring-boot:run -Dmaven.test.skip=true

    image.png

    image.png

  • 访问8980端口


    image.png

编写部署脚本

  • 将部署动作“翻译”成shell脚本,然后部署到Jenkins中进行持续交付部署
  • Demo:代码讲解deploy/start_spring-boot.sh
#!/usr/bin/env bash

## 检查系统类型
export os_type=`uname`

## 停止spring-boot函数
killSpringBoot()
{
    pid=`ps -ef|grep spring-boot|grep java|awk '{print $2}'`
    echo "spring-boot list :$pid"
    if [ "$pid" = "" ]
    then
        echo "no spring-boot pid alive"
    else
        kill -9 $pid
    fi
}

## Kill 当前正在运行的spring-boot
killSpringBoot

## Maven 编译
cd ${WORKSPACE}/root
mvn clean install

## Maven 运行
cd ${WORKSPACE}/web
nohub mvn clean spring-boot:run -Dmaven.test.skip=true &

Jenkins部署

  • 创建Jenkins任务,设定部署任务
  • Demo Jenkins任务执行
  1. 创建任务


    image.png
  2. 添加项目地址


    image.png
  3. 添加运行代码:

  • . ~/.bash_profile:获取环境变量
  • sh deploy/start_spring-boot.sh
    image.png
  1. 构建任务


    image.png

    image.png
  2. 构建完成后发现spring-boot并没有运行起来


    image.png
image.png

原因是:Jenkins运行时有子进程和父进程的关系,Jenkins运行完spring-boot中的代码后会将子进程给kill掉,所以当Jenkins中的job构建完成后spring-boot中的项目也会结束运行。解决方法是在运行代码中添加:BUILD_ID=DONTKILLME

image.png

  1. 再次查看进程并进入8980端口


    image.png

    image.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容