DevOps-5:Jenkins配置Java-Maven项目模板Job
Posted 北亮bl
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DevOps-5:Jenkins配置Java-Maven项目模板Job相关的知识,希望对你有一定的参考价值。
前言
前文 DevOps-4:Jenkins配置.Net项目模板Job 介绍了.Net项目的模板配置和正式项目配置,本文会介绍一下Java项目的模板配置过程。
注:下面的步骤里,如果在你的配置过程没有找到对应的配置,请参考:DevOps-1:持续集成工具Jenkins的安装,安装上那些插件。
创建模板Job
1、新建Job
点击左侧菜单的“New Item”,进入创建页,输入名称:baseJavaJob
,选择Freestyle project
:
注:如果前面已经创建了Job,也可以在下面的Copy from
输入之前的Job名,比如baseNetJob
,点OK,这样就把以前的配置自动复制过来了,然后进行编辑即可。
本文还是按全新的Freestyle project
来讲解。
点上一步的OK,会进入新Job的配置界面。
2、General
配置
这是Job的通用配置。
2.1、编辑 Description
这里输入该Job的说明信息,比如写:这是Java项目的模板Job
2.2、这里不能勾选This project is parameterized
,因为参数不支持继承,正式项目Job那边一定要配置
3、Source Code Management
配置
这里是配置Job的源码管理,点击Git
,开启源码管理,会自动去Git更新代码。
注:因为baseNetJob
也有相同的配置,所以可以考虑再增加一个baseCommonJob
,里面配置通用的Git配置,然后这里勾选Use SCM from another project
进行引用
3.1、在Repository URL
里输入 $git_src
注:git_src
是预定义的变量名,从正式项目那边配置并传递进来
3.2、点击Credentials
下面的Add
,添加Git的登录凭证;
- 在弹出页面的
Kind
里选择SSH Username with private key
, 下面Private Key
那里点击Enter directly
, 把你在Git上的id_rsa私匙内容复制进来:
注:如何获取gitlab的ssh key,并添加到gitlab里,参考官网:https://docs.gitlab.com/ee/user/ssh.html 或直接百度一下即可 - 添加完,在下拉列表里选择你刚刚添加的认证
3.3、下面Branches to build
里,输入$publish_branch
注:这是外部正式项目传入的git参数
4、Build Triggers
配置
这一步是配置一些触发器,比如定时触发、被其它Job触发、被Gitlab的webhook触发等等。
一般模板里可以不配置,在正式项目的Job里配置
5、Build Environment
配置
这是Job的一些环境变量配置,可以注入一些变量参数,方便后面的构建操作。
5.1、勾选Add timestamps to the Console Output
这是在构建的每一行,都添加时间输出,方便观看
5.2、勾选Set jenkins user build variables
这是把当前登录用户信息注入环境变量,在构建步骤里,可以通过环境变量获取当前登录人信息:
- BUILD_USER – full name of user started build,
- BUILD_USER_FIRST_NAME – first name of user started build,
- BUILD_USER_LAST_NAME – last name of user started build,
- BUILD_USER_ID – id of user started build.
- BUILD_USER_EMAIL – email of user started build.
5.3、勾选将环境变量注入构建过程
,这里可以配置一些自定义的环境变量
属性内容
就是直接配置kv对,如:
# git的url地址,外面可以直接拼接
git_url_prefix=https://git.beinet.cn/
Groovy Script
里,可以直接写代码来注入,参考代码:
def props = new Properties();
Date now = new Date();
props.deploy_time = new Date().format("yyyy-MM-dd HH:mm:ss.SSS");
props.deploy_timestamp = now.getTime(); // 1970年1月1日,00:00:00 GMT以来的毫秒数, 用于在Post-build里计算耗时
props.xxx = this.binding.getVariable('BUILD_NUMBER'); // 读取其它环境变量
println "ready for inject env:";
props.each k, v -> println "$k:$v" ; // 打印一下注入的环境变量
return props; // 必须return返回
6、Build Steps
配置
这里是构建步骤,比如一些编译、部署之类,一般放这里。
6.1、这是构建的第一步,通常用于校验一些输入参数是否合法之类,不合法就直接抛异常中断Job构建。
点击Add build step
,选择Execute system Groovy script
,添加脚本,Demo参考:
def desc = build.getEnvironment(listener).get('publish_branch')
if(desc == null || desc == "") // 如果缺少必要的参数,阻断构建
throw new Exception("publish_branch 不能为空")
6.2、为当前构建,设置一个名称,并会在列表里显示这个名称,方便后续进行分辨;
点击Add build step
,选择Update build name
,勾选Use macro
,下面填写:
$JOB_NAME_$BUILD_NUMBER@$publish_branch
这是Job名+构建序列号+选择的Git分支作为构建名
6.3、添加Maven构建配置
点击Add build step
,选择Invoke top-level Maven targets
,在Goals
里输入: clean -DskipTests=true package -f pom.xml
注:skipTests=true 表示编译单元测试代码,但是不执行单元测试。如果希望不编译也不运行,用 -Dmaven.test.skip=true
6.4、配置sonar代码扫描(非必须步骤)
点击Add build step
,选择Execute SonarQube Scanner
,只要填写:Analysis properties
:
# project key全SonarQube Server唯一,切不可重复,注意projectKey和projectName不允许包含中文,也不允许包含[/\\\\#]
# 参考Groovy脚本: props.sonar_key = (props.application_name + '-' + getOrDefault("GIT_BRANCH","")).replaceAll(/[\\/\\#\\\\\\u4e00-\\u9fa5]/, '_');
sonar.projectKey=$JOB_NAME
# Project name用于再SonarQube Server显示报告
sonar.projectName=$JOB_NAME
# project Version版本号
sonar.projectVersion=1.0
# project所使用的编程语言,scanner将强制指定工程中的对应的源码文件扫描,不指定的将会被忽略
sonar.language=java
# 编译型语言都有类似配置,具体可参照官方wiki,这里是指定java编译输出的class文件所在路径
sonar.java.binaries=target/classes
# 指定源码所在目录
sonar.sources=src
6.5、复制构建结束的结果文件
步骤6.5构建的结果是放在工作空间目录下,那个目录随时可能清理,因此要把构建结果先复制出来。
点击Add build step
,选择Windows batch command
,在命令窗口输入:
if not exist D:\\JenkinsWorkspace\\AllArchives\\%JOB_NAME%\\%BUILD_NUMBER% (
mkdir D:\\JenkinsWorkspace\\AllArchives\\%JOB_NAME%\\%BUILD_NUMBER%
)
echo f |XCOPY /Y /E %WORKSPACE%\\target\\*.jar D:\\JenkinsWorkspace\\AllArchives\\%JOB_NAME%\\%BUILD_NUMBER%\\
这一步,先创建一个存放构建结果的目录,再把上一步的构建结果jar文件复制到结果目录里去
6.6、zip压缩上传(非必须步骤)
如果构建结果需要压缩后上传,需要添加这个步骤:
点击Add build step
,选择Execute system groovy script
,在Groovy Script
窗口输入:
// 本段脚本作用:把构建成功的目录,打包为zip文件,以便下载
import org.apache.tools.ant.taskdefs.Zip;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.types.FileSet;
// http://api.dpml.net/ant/1.7.0/org/apache/tools/ant/taskdefs/Zip.html
def zipDir(String dirForZip)
def dir = new File(dirForZip);
if (!dir.exists())
throw new RuntimeException(dirForZip + "不存在!");
def zipFilePath = dir.getParent() + "\\\\" + dir.getName() + ".zip";
def zipFile = new File(zipFilePath);
def zip = new Zip();
zip.setProject(new Project());
zip.setDestFile(zipFile);
def fileSet = new FileSet();
fileSet.setProject(zip.getProject());
fileSet.setDir(dir);
zip.addFileset(fileSet);
zip.execute();
return zipFile;
def env = build.getEnvironment(listener);
def targetPath = "d:\\\\JenkinsWorkspace\\\\AllArchives\\\\" + env.get('JOB_NAME') + "\\\\" + env.get('BUILD_NUMBER');
def zipFilePath = zipDir(targetPath );
println "压缩成功: " + zipFilePath;
7、Post-build Actions
配置
这是构建结束后的操作,一些收尾,比如通知之类的事情。
点击Add post-build action
,选择Groovy Postbuild
,输入脚本参考:
def beginTime = manager.envVars["deploy_timestamp"];
if(beginTime == null)
return;
// 注意不能直接用 println,参考 https://plugins.jenkins.io/groovy-postbuild/
manager.listener.logger.println '--==--耗时:' + (new Date().getTime() - Long.valueOf(beginTime)) + '毫秒';
8、禁用模板项目的构建
OK,到这里,模板Job项目创建完成了,先保存配置。
然后,这是个模板Job,当然要关掉它的构建能力啊,在项目首页,点击右边的Disable Project
,左边的Build Now
按钮就消失了:
创建基于模板的正式Maven项目Job
1、General
配置
1,1、构建参数设置
- Git分支参数
勾选This project is parameterized
,再点击Add Parameter
,选择Git Parameter
:
在Name
里输入publish_branch
(注:这是变量名,后面会用到),
Description
里写请选择要构建哪个Git分支
Parameter Type
为Branch
Default Value
填写默认分支origin/master
1.2、环境变量设置
勾选准备运行环境
,在属性内容
里输入:
# maven项目的git地址
git_src=ssh://git@git.beinet.cn:1122/AaaSolution/AaaProject/AaaProject.git
# 是否允许sonar,可以用于条件编译
sonar_enabled=true
注:这些环境变量,就是给模板Job使用的
2、Source Code Management
配置
选择Use SCM from another project
,下面的Template Project
输入上面的模板Job名:baseJavaJob
3、Build Triggers
配置
如果需要从Gitlab那边的Push事件,触发Job构建,可以勾选Build when a change is pushed to GitLab. GitLab webhook URL
然后去Gitlab那边配置Webhook事件到这里提示的URL
注:这个URL如果是127.0.0.1,可以去Jenkins系统配置那边修改成正确的
4、Build Environment
配置
勾选Use build environment from another project
,下面的Template Project
输入上面的模板Job名:baseJavaJob
5、Build Steps
配置
点击Add build step
,选择Use builders from another project
,下面的Template Project
输入上面的模板Job名:baseJavaJob
6、Post-build Actions
配置
点击Add post-build action
,选择Use publishers from another project
,下面的Template Project
输入上面的模板Job名:baseJavaJob
OK, 正式的项目Job就创建完成了,可以构建试试。
如果还有其它的Maven项目,都只需要配置一下构建参数、和环境变量就好了,其它的使用继承baseJavaJob就好了。
以上是关于DevOps-5:Jenkins配置Java-Maven项目模板Job的主要内容,如果未能解决你的问题,请参考以下文章
DevOps-5:Jenkins配置Java-Maven项目模板Job
(4.19)SQL server 2008一些常见配置之一(基本配置,权限配置远程访问配置和内存配置。)
Tomcat卷五---Web 应用配置,管理配置和JVM配置