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 ...
随机推荐
- Solr查询空值字段
摘要: Solr的查询一般都是查找满足某个关键词的文档,偶然一个需求是查询Solr中某个字段不为空的数据.查询空值数据字符串类型 可以通过下面这种查询方式找到所有描述description为空的数据. ...
- Jquery获取web窗体关闭事件,排除刷新页面
在js脚本里全局定义一个 var r=true;若是刷新的话则把r=false; $(window).unload(function () { if (r) { //这里面证明用户不是点的F5刷新 执 ...
- SSH和SSM的比较
当下流行的两种企业开发MVC开源框架,是我们Java程序猿必备知识能力.MVC,即模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...
- Linux命令行设置环境变量
参考 Linux命令行--使用linux环境变量 Linux命令行—使用Linux环境变量
- python之继承、抽象类、派生、多态、组合、封装
1.继承概念的实现方式主要有2类:实现继承.接口继承. Ø 实现继承是指使用基类的属性和方法而无需额外编码的能力: Ø 接口继承是指仅使用属性和方法的名称.子类必须提供 ...
- UVa 658 It's not a Bug, it's a Feature! (状态压缩+Dijstra)
题意:首先给出n和m,表示有n个bug和m个补丁.一开始存在n个bug,用1表示一个bug存在0表示不存在,所以一开始就是n个1,我们的目的是要消除所有的bug, 所以目标状态就是n个0.对于每个补丁 ...
- git 的安装使用以及协作流程
git安装: sudo apt-get install git-core git使用: 转:https://www.liaoxuefeng.com/wiki/0013739516305929606dd ...
- react native的Navigator组件示例
import React, {Component} from 'react';import {ScrollView, StyleSheet, Text, View, PixelRatio} from ...
- noip2017普及组
过了这么久才来写博客,也是我这么一段时间都很低迷吧.... 老实来说,今年应该是要打提高组的...可还是打了普及组... 其实最猥琐的还是我连普及都写挂了,作为一个学了两年的人,图论,进阶dp都写过的 ...
- 根据日期计算发布时间段(NSCalendar)
// 返回发布时间dateWithString - (NSString *)backReleaseTimeWithDateStr:(NSString *)dateWithString{ // 获取当前 ...