需求

  使用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传递参数的更多相关文章

  1. python调用jenkinsAPI构建jenkins,并传递参数

    安装jenkins 安装jenkins很简单,可以用多种方式安装,这里知道的有: 在官网下载rpm包,手动安装,最费事 centos系统通过yum安装,ubuntu通过apt-get安装(不推荐,因为 ...

  2. Jenkins Job间传递参数的一种方法

    场景: Jenkins 中可以建多个Job,一般是主编译Job,多个子Job. 子Job要用主Job中的版本号,编译号. 1)  在主Job里面添加脚本命令: echo set MainVersion ...

  3. Vue 给子组件传递参数

    Vue 给子组件传递参数 首先看个例子吧 原文 html <div class="container" id="app"> <div clas ...

  4. [转] C++的引用传递、指针传递参数在java中的相应处理方法

    原文出处:[http://blog.csdn.net/conowen/article/details/7420533] 首先要明白一点,java是没有指针这个概念的. 但是要实现C++的引用传递.指针 ...

  5. 记一次WinForm程序中主进程打开子进程并传递参数的操作过程(进程间传递参数)

    目标:想在WinForm程序之间传递参数.以便子进程作出相应的处理. 一种错误的方法 父进程的主程序: ProcessStartInfo psi = new ProcessStartInfo(); p ...

  6. 在 Angularjs 中 ui-sref 和 $state.go 如何传递参数

    1 ui-sref.$state.go 的区别 ui-sref 一般使用在 <a>...</a>: <a ui-sref="message-list" ...

  7. Linux线程体传递参数的方法详解

    传递参数的两种方法 线程函数只有一个参数的情况:直接定义一个变量通过应用传给线程函数. 例子 #include #include using namespace std; pthread_t thre ...

  8. 【hadoop】如何向map和reduce脚本传递参数,加载文件和目录

    本文主要讲解三个问题:       1 使用Java编写MapReduce程序时,如何向map.reduce函数传递参数.       2 使用Streaming编写MapReduce程序(C/C++ ...

  9. jenkins,jmeter,ant持续集成

    1.安装 jenkins, jmeter, ant   2.将 jmeter下extras中的 ant-jmeter-1.1.1.jar拷贝到ant的lib下面 3.将 jmeter下collapse ...

随机推荐

  1. HDU1496(巧妙hash)

    Equations Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. 【HBase】HBase笔记:HBase的Region机制

    HBase 的机制里包含了许多优秀的算法,如 Region 定位.Region 分配.Region Server的上线和下线.Master 的上线和下线.在谈到这些之前,先把 HBase 的基本架构里 ...

  3. JAVA基础--JAVA API集合框架16

    一.Map集合 1. map集合介绍 Collection集合的特点: 集合中存储的所有元素都是单一元素,元素和元素之间没有必然的关系.因此我们把Collection集合也称为单列集合. Map集合: ...

  4. NITACMOJ144稳定串

    点我>>题目链接 稳定串 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java ...

  5. lightoj 1089 【离散化+线段树】

    题意: 给你n个区间,然后给你m个i点问你这个点在几个所给定的区间里: 思路: 离散化+区间覆盖 #include <bits/stdc++.h> using namespace std; ...

  6. 51nod 1456【强连通,缩点,并查集】

    话说这道题的机遇是看到了http://blog.csdn.net/u010885899/article/details/50611895很有意思:然后就去补了这题 题意: 建最少的边使得给出的点相连. ...

  7. ugui mask失效

    android平台 PlayerSettings-Resolution and Presentation-DisableDepth and Stencil这项勾选,mask失效

  8. Unity3D中常用的数据结构总结与分

    阅读目录 1.几种常见的数据结构 2.几种常见数据结构的使用情景 来到周末,小匹夫终于有精力和时间来更新下博客了.前段时间小匹夫读过一份代码,对其中各种数据结构灵活的使用赞不绝口,同时也大大激发了小匹 ...

  9. Python 3.x 的一些注意事项

    1. reload 被更改 需要 在console执行 from imp import reload 才能调用CT 同时,如果py文件是位于主文件夹深部的位置,可以这么做: import ComicT ...

  10. [Xcode 实际操作]八、网络与多线程-(23)多线程的同步与异步的区别

    目录:[Swift]Xcode实际操作 本文将演示线程的同步与异步的区别. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] 异步线程的运行,是没有按照顺序执行的. ...