Jenkins 学习笔记(三):我们的JAVA 项目是这么发布的

发布拓扑

1. 拓扑图

2. 流程说明:

  • Git 插件从 Git Server 上面拉取源代码.
  • Maven 插件将源代码安装我们设定的指令进行编译打包,存放于项目的 WorkSpace.
  • Publish Over SSH 插件将 WorkSpace 中准备好的数据发送到跳板机
  • 跳板机上面的发布脚本将数据同步到 Target Server

3. 细节说明

Maven 如何对代码进行编译打包,这个是开发来提的。

Jenkins 可以直接将项目发布到 Target Server,但是我们的生产服务器是好几个内网网段。所以思路是:先将代码发布到跳板机,跳板机上面有一个 shell 脚本,脚本内容无非是 scp,rsync 工具,将数据同步到目标服务器指定的路径。

我们的配置

1. 参数配置

为了在底层保留每次构建的代码,我们创建了两个参数:版本号。 这样可以让底层 jobs 目录中的项目的目录结构很清晰,版本号用的是日期,更加好区分。

2. 源码管理

配置 Git Repository URL,构建的时候 Jenkins Server 会从仓库拉取代码到 $JENKINS_HOME/workspace/$JOB_NAME 目录下面。 (ps:JOB_NAME 是 Jenkins 内置环境变量

3. 构建环境

我选择每次构建之前都将项目的 workspace 中的内容删除,彻底重来。

4. Pre Steps

构建之前准备环境。

如果选择 "Execute Shell", 那么就把自己想在构建之前准备的文件、目录等等 shell 命令写出来。

5. Build

开始构建。

第一行指定 pom文件,默认为 pom.xml. 第二行指定 maven 的执行序列。具体可以了解 maven 的相关知识,这个命令开发来定。

6. Post Steps

开始发布。

这一步的目的是在Build 之后,数据的二次整理,为『构建后的操作』做准备。所以,如果不需要再次操作,构建好的数据可以直接发布,那无需这一步的设置。

7. 构建后的操作

增加构建后的操作步骤 --> Send build artifacts over SSH. 用 Publish Over SSH 这个插件的功能完成最后的发布工作。

这一步是将在 Jenkins Server 上构建好的数据推送到 Jump Server ,然后又在 Jump server 上面执行一个shell 脚本,将数据推送到 Target Server,脚本内容就是rsync 或者 scp。

(1)推送构件好的数据

(2)执行推送脚本

说明:

  • 将 update.sh 推送到跳板机的 脚本存放目录下
  • 执行 update.sh 这个内容rsync 为主的脚本,将数据同步到 target,后面是脚本的参数:项目名称,灰度发布,项目版本

参数构建

1. 点击对应的项目

2. 选择 ”用参数构建“

3. 输入参数值

这样就可以实现参数化构建项目,如果选择 ”立即构建“,则这里的参数是 设定时候给定的 ”默认值“。

以上.

时间: 2024-11-07 12:25:34

Jenkins 学习笔记(三):我们的JAVA 项目是这么发布的的相关文章

【WPF学习笔记三】空WPF项目元素详解

我们在VisualStudio2010创建了一个空WPF程序,现在我们来对这个空WPF程序的所有元素进行讲解! 1.<Window x:Class="WpfApplication1.MainWindow" 2.        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3.        xmlns:x="http://schemas.microsoft.com/

Jenkins 学习笔记(二):很简单的发布一次

发布思路:从 github 拉取一些文件,然后推送到 Target server 的某个目录. 准备 1. Jenkins 需要安装的插件:『 Publish over SSH 』 2. 全局配置:系统管理 --> 系统设置 --> Publish over SSH 创建项目 1.  新建 --> Enter Item Name --> 构建一个自由风格的自由风格的项目 --> OK 2. Git 信息配置 3. 构建配置 以上,一个简单的发布就配置好了,接下来进行构建,看看

Jenkins 学习笔记

Jenkins 的内容网站蛮多的,但是一开始我看起来确实很费劲.似乎好多东西都是悬空的,没有把底层的信息交代清楚. 我把自己对于 Jenkins 的探索过程记录下来,如下. 目录 Jenkins 学习笔记(一):我对 Jenkins 的宏观认识 Jenkins 学习笔记(二):很简单的发布一次 Jenkins 学习笔记(三):我们的 Java 项目是这么发布的

lucene学习笔记(三)

好几天没更新了.更新一下,方便自己和大家学习. 这是最基本的代码 package index; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document;

【Unity 3D】学习笔记三十七:物理引擎——碰撞与休眠

碰撞与休眠 上一篇笔记说过,当给予游戏对象刚体这个组件以后,那么这个组件将存在碰撞的可能性.一旦刚体开始运动,那么系统方法便会监视刚体的碰撞状态.一般刚体的碰撞分为三种:进入碰撞,碰撞中,和碰撞结束.关于休眠可以理解成为让游戏对象变成静止状态.如果给某个游戏对象休眠的状态,那么这个物体将立马静止,不再运动. 碰撞 首先学习下碰撞几个重要的方法: OnCollisionEnter(  ):刚体开始接触的时候,立即调用. OnCollisionStay(  ):碰撞过程中,每帧都会调用此方法,直到撞

Ajax学习笔记(三)

三.jQuery库详解 1.使用jQuery之后,javascript操作的不再是HTML元素对应的DOM对象,而是包装DOM对象的jQuery对象.js通过调用jQuery对象的方法来改变它所包装的DOM对象的属性,从而实现动态更新HTML页面. 由此可见,使用jQuery动态更新HTML页面只需以下两个步骤: (1)获取jQuery对象.jQuery对象通常是DOM对象的包装 (2)调用jQuery对象的方法来改变自身.当jQuery对象被改变时,jQuery包装的DOM对象随之改变,HTM

VSTO学习笔记(三) 开发Office 2010 64位COM加载项

原文:VSTO学习笔记(三) 开发Office 2010 64位COM加载项 一.加载项简介 Office提供了多种用于扩展Office应用程序功能的模式,常见的有: 1.Office 自动化程序(Automation Executables) 2.Office加载项(COM or Excel Add-In) 3.Office文档代码或模板(Code Behind an Office Document or Template) 4.Office 智能标签(Smart Tags) 本次我们将学习使

马哥学习笔记三十——tomcat

Java体系结构包含四个独立却又彼此相关的技术: Java程序设计语言 Java API Java Class文件格式 JVM: Java Virtual Machine JVM的实现方式: 1.一次性解释器,解释字节码并执行: 2.即时编译器(just-in-time complier) 依赖于更多内存缓存解释后的结果 3.自适应编译器 缓存20%左右代码,提高80%左右的速度: 运行时数据区: 线程私有内存区: 程序计数器 java虚拟机栈 线程共享内存区: 方法区 堆:java自动内存回收

Ninject学习笔记&lt;三&gt;

ASP.NET MVC学前篇之Ninject的初步了解 1.介绍 废话几句,Ninject是一种轻量级的.基础.NET的一个开源IoC框架,在对于MVC框架的学习中会用到IoC框架的,因为这种IoC开源框架有很多,本篇的主题只有一个,就是让阅读过本篇幅的朋友逗知道IoC框架在项目中的作用,以及它的重要性. 这样做的目的是以便在以后的学习工作中选择自己中意的一个IoC框架来学习.使用,或者是自己去实现一个.好了,不废话了. 2.环境准备 1.新建个4.0Framework的一个控制台应用程序项目,

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle&lt;T&gt;

Caliburn.Micro学习笔记(三)----事件聚合IEventAggregator和 Ihandle<T> 今天 说一下Caliburn.Micro的IEventAggregator和IHandle<T>分成两篇去讲这一篇写一个简单的例子 看一它的的实现和源码 下一篇用它们做一个多语言的demo 这两个是事件的订阅和广播,很强大,但用的时候要小心发生不必要的冲突. 先看一下它的实现思想 在Caliburn.Micro里EventAggregator要以单例的形式出现这样可以