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 ...
随机推荐
- kafka之五:如何手动更新Kafka中某个Topic的偏移量
本文介绍如何手动跟新zookeeper中的偏移量.我们在使用kafka的过程中,有时候需要通过修改偏移量来进行重新消费.我们都知道offsets是记录在zookeeper中的,所以我们想修改offse ...
- Array 对象
Array的对象用于在单个的变量中存储多个值. constructor 返回对创建此对象的数组函数的引用. demo: let arr=[]; arr.constructor==Array let ...
- centos7使用ceph-deploy部署ceph
准备阶段 准备yum源 删除默认的源,国外的比较慢 yum clean all rm -rf /etc/yum.repos.d/*.repo 下载阿里云的base源 wget -O /etc/yum. ...
- 编写 DockerFile
编写 DockerFile 本节内容简介 在前面的实验中我们多次用到的 Dockerfile,在本实验里我们将通过完成一个实例来学习Dockerfile的编写. 本节中,我们需要依次完成下面几项任务: ...
- bzoj1598
K短路 和超级钢琴之类的差不多 先反图跑最短路,从原点向外拓展,每个点最多拓展k次,否则不可能是k短路 #include<bits/stdc++.h> using namespace st ...
- PHP开发api接口 -- 安全验证 生成签名
转载博客 ————. http://blog.csdn.net/li741350149/article/details/62887524 REST模式中HTTP请求方法(GET,POST,PUT,DE ...
- rpm 命令|rpm 安装|rpm 卸载|rpm 使用|rpm 删除
在Linux操作系统中,有一个系统软件包,它的功能类似于Windows里面的“添加/删除程序”,但是功能又比“添加/删除程序”强很多,它就是Red Hat Package Manager(简称RPM) ...
- cogs 1176. [郑州101中学] 月考
1176. [郑州101中学] 月考 ★ 输入文件:mtest.in 输出文件:mtest.out 简单对比时间限制:1 s 内存限制:128 MB [题目描述] 在上次的月考中Bug ...
- Shiro 权限管理框架
一.什么是Shiro Apache Shiro是一个强大易用的java安全框架,提供认证.授权.加密和会话管理等功能 · 认证:用户身份识别,俗称“登录”: · 授权:访问控制 · 密码加密:保护或隐 ...
- bzoj1339/1163:[Baltic2008]Mafia
传送门 最小割,割点,模板... 代码: #include<cstdio> #include<iostream> #include<algorithm> #incl ...