Jenkins结合ant传递参数
需求:
使用Jenkins的「参数化构建过程」,由用户手动输入参数。通过ant脚本接收这个参数,并输出(当然,中间也可以进行复杂的处理,这里为了说明问题,仅做简单的输出)。
1.基础环境
Jenkins1.509.4(现在Jenkins已经升级到2.x,版本差异不是很大)
apache-ant-1.9.6
apache-tomcat-7.0.6(注:Jenkins放在tomcat中,可参考我写的 《Jenkins默认工作空间及更改默认工作空间》 一文)
前提是已经有jdk的支持并配置好了相关的环境变量~
2.思路分析
工作一:在Jenkins中配置job的时候选中「参数化构建过程」,选择String Parameter。
工作二:写一个含main方法的类,打印这个参数。
工作三(重要的工作):连接输入和输出。具体可以通过ant脚本来实现。ant脚本又可以在用命令行执行的时候传递参数。
现在整理一下思路:Jenkins「参数化构建过程」输入参数 → Jenkins执行ant脚本并将参数传递给ant脚本 → ant脚本对含有main方法的类进行编译、打包、执行等操作。
3.开始练兵
说明:
实际过程可能是:工作二 → 工作一 → 工作三。
3.1 工作一

3.2 工作三

注:cd javaant是因为build.xml文件会放在这个目录之下,见下图:

这里还涉及一个很重要的知识点:如何在Jenkins中本地构建job?
答案是直接将整个项目拷贝至Jenkins的工作空间之下。如上图,我的Jenkins默认工作空间已经更改为E:\jenkins\,在此目录下建立一个目录src-usercreate,专门用于构建本地job。
3.3 工作二
直接上代码了。
package com.primeton.ant;
public class HelloWorld {
/**
* @param args
*/
public static void main(String[] args) {
String version = args[0];
System.out.println("Hello,"+version+"!");
}
}
Java代码
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<project name="javaant" basedir="." default="main"> <property name="src.dir" value="src"/>
<property name="build.dir" value="build"/>
<property name="classes.dir" value="${build.dir}/classes"/>
<property name="jar.dir" value="${build.dir}/jar"/>
<property name="main-class" value="com.primeton.ant.HelloWorld"/>
<property name="CODE_VERSION" value="v1.2.2"/>
<target name="clean">
<delete dir="${build.dir}"/>
</target> <target name="compile">
<mkdir dir="${classes.dir}"/>
<javac srcdir="${src.dir}" destdir="${classes.dir}"/>
</target> <target name="jar" depends="compile">
<mkdir dir="${jar.dir}"/>
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}">
<manifest>
<attribute name="Main-Class" value="${main-class}"/>
</manifest>
</jar>
</target> <target name="run" depends="jar">
<java jar="${jar.dir}/${ant.project.name}.jar" fork="true">
<arg value="${CODE_VERSION}"/>
</java>
</target> <target name="clean-build" depends="clean,jar"/> <target name="main" depends="clean,run"/> </project>
ant脚本
整个Java工程目录层次如下:

注:上面已经提及,需要将整个项目(包含build.xml)拷贝到Jenkins的工作空间目录下(我的是E:\jenkins\src-usercreate\)。
3.4 构建结果
在Jenkins中对该作业点击『立即构建』,要求输入CODE_VERSION的值,这里了输入v2.0。执行结果如下:

4.小结
①Jenkins 「参数化构建过程」 供用户输入参数。
②ant脚本可以作为中间媒介将上述参数传递给Java代码 [ 注意理解这个参数的传递过程 ]。
Jenkins结合ant传递参数的更多相关文章
- python调用jenkinsAPI构建jenkins,并传递参数
安装jenkins 安装jenkins很简单,可以用多种方式安装,这里知道的有: 在官网下载rpm包,手动安装,最费事 centos系统通过yum安装,ubuntu通过apt-get安装(不推荐,因为 ...
- Jenkins Job间传递参数的一种方法
场景: Jenkins 中可以建多个Job,一般是主编译Job,多个子Job. 子Job要用主Job中的版本号,编译号. 1) 在主Job里面添加脚本命令: echo set MainVersion ...
- Vue 给子组件传递参数
Vue 给子组件传递参数 首先看个例子吧 原文 html <div class="container" id="app"> <div clas ...
- [转] C++的引用传递、指针传递参数在java中的相应处理方法
原文出处:[http://blog.csdn.net/conowen/article/details/7420533] 首先要明白一点,java是没有指针这个概念的. 但是要实现C++的引用传递.指针 ...
- 记一次WinForm程序中主进程打开子进程并传递参数的操作过程(进程间传递参数)
目标:想在WinForm程序之间传递参数.以便子进程作出相应的处理. 一种错误的方法 父进程的主程序: ProcessStartInfo psi = new ProcessStartInfo(); p ...
- 在 Angularjs 中 ui-sref 和 $state.go 如何传递参数
1 ui-sref.$state.go 的区别 ui-sref 一般使用在 <a>...</a>: <a ui-sref="message-list" ...
- Linux线程体传递参数的方法详解
传递参数的两种方法 线程函数只有一个参数的情况:直接定义一个变量通过应用传给线程函数. 例子 #include #include using namespace std; pthread_t thre ...
- 【hadoop】如何向map和reduce脚本传递参数,加载文件和目录
本文主要讲解三个问题: 1 使用Java编写MapReduce程序时,如何向map.reduce函数传递参数. 2 使用Streaming编写MapReduce程序(C/C++ ...
- jenkins,jmeter,ant持续集成
1.安装 jenkins, jmeter, ant 2.将 jmeter下extras中的 ant-jmeter-1.1.1.jar拷贝到ant的lib下面 3.将 jmeter下collapse ...
随机推荐
- JavaScript-Tool:validate.js-un
ylbtech-JavaScript-Tool:validate.js 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 0. http://validatejs. ...
- JVM 内存区域
JVM 将内存区域划分为: Method Area(Non-Heap)(方法区) ,Heap(堆) , Program Counter Register(程序计数器) , VM Stack(虚拟机栈, ...
- 【eclipse插件开发实战】Eclipse插件开发1——eclipse内核结构、扩展点机制
Eclipse插件开发实战1--eclipse内核结构.扩展点机制 一.前言 本系列总体介绍eclipse插件开发基本理论.插件项目结构及开发步骤,最后再给出两个插件开发实例. 总体安排结构如下: 1 ...
- flex(1)
flex使用的actionscript语言遵守ECMA-262标准,这与javascript语言是一致的,由此可见二者语法的相似.
- HDU - 1232 畅通工程-并查集模板
某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府“畅通工程”的目标是使全省任何两个城镇间都可以实现交通(但不一定有直接的道路相连,只要互相间接通过道路可达即可). ...
- webpack内置模块ProvidePlugin
webpack配置ProvidePlugin后,在使用时将不再需要import和require进行引入,直接使用即可. 使用方法: 在webpack.dev.conf.js和webpack.prod. ...
- bat 批处理之提取带有关键字的整行数据
用于在log中检索出insert sql语句,主要用于数据恢复 前言: a.txt 里面存放的是 需要查找的关键字 b.bat limian 存放的是执行程序 生成的文件存放在 c.txt(自动创建) ...
- C++继承详解:共有(public)继承,私有(private)继承,保护(protected)继承
公有继承(public).私有继承(private).保护继承(protected)是常用的三种继承方式. 1. 公有继承(public) 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时, ...
- hdu5883【欧拉通路】
题意:n个点m条无向边的图,找一个欧拉通路/回路,下标是p1,p2,p3-pt,然后使得ap1XORap2XOR-XORapt这个值最大. 思路: 首先要判断一下这个图是不是联通的,用并查集就好了,然 ...
- 关于 T[] 的反射问题
1. T[] 类型不适应以下代码 Dictionary<string, Test> d = new Dictionary<string, Test>(); // Get a T ...