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 TypeBranch
    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

Dubbo配置设计

(4.19)SQL server 2008一些常见配置之一(基本配置,权限配置远程访问配置和内存配置。)

Tomcat卷五---Web 应用配置,管理配置和JVM配置

SpringBoot:配置文件的作用配置文件的格式properties配置文件yml配置文件

IDEA的常用配置,maven配置,git配置操作