jenkins 添加BlueOcean插件打包项目


      Jenkins是一款Java开发的跨平台持续集成和持续发布的开源项目,Jenkins已经作为各大公司进行CI/CD的首选工具。而BlueOcean是Jenkins推出的一个插件,其目的就是让程序员执行任务时,降低工作流程的复杂度和提升工作流程的清晰度,它具有如下特征:

清晰的可视化,对CI/CD pipelines, 可以快速直观的观察项目pipeline状态。

pipeline精确度,通过UI直接介入pipeline的中间问题。

集成代码分支和pull请求。

 

BlueOcean使用:

BlueOcean是以插件的形式存在,需要Jenkins版本2.7.*以上,本次环境使用最新版的Jenkins2.89.4

JDK:1.8以上

maven:3.3.9

需要在系统管理----全局工具配置中配置好,这里的jdk、maven等工具名字可以在groovy脚本中使用,下面有示例.

 

 

安装步骤:

系统管理->管理插件->可选插件,选择Blue Ocean->restart。

安装完毕后,Blue Ocean入口在左边菜单栏居中: "Open Blue Ocean",进去后可以看到全新的UI,由于依赖Pipeline,所以还要安装Pipeline插件。

 

 

 

示例:

我们新建一个Pipeline项目,默认情况下自带有两个示例,可以通过它实现。

 

随便选择上面两个示例都可以直接运行,前提是上面的配置工具配置好,这里需要注意如果是直接测试上面示例中的Github+maven的话,里面有一个mvnHome = tool 'M3' 这里的M3就是全局配置中maven的名字,因为我不是写M3的所以改成mvn即可。

 

通过传入参数获取git分支拉取代码:

 

  1. pipeline { 
  2.     agent any 
  3.     parameters { 
  4.         string(name:'repoBranch', defaultValue: 'master', description: 'This is an test.') 
  5.         string(name:'repoUrl', defaultValue: 'http://192.168.18.33/jenkins/pipeline-test01.git', description: '项目地址') 
  6.     } 
  7.     stages { 
  8.         stage('Example') { 
  9.             steps { 
  10.                 // echo "Hello ${params.repoBranch}" 
  11.                 git url:params.repoUrl ,branch:params.repoBranch 
  12.             } 
  13.         } 
  14.         stage('Code Analysis') { 
  15.             steps { 
  16.                 sh "mvn clean" 
  17.             } 
  18.         } 
  19.         stage('Package') { 
  20.             steps { 
  21.                 sh "'mvn' -Dmaven.test.skip=true package" 
  22.             } 
  23.         } 
  24.         stage('Deploy') { 
  25.             steps { 
  26.                 echo "pipeline success!" 
  27.                 archive 'target/*.jar' 
  28.             } 
  29.         }                    
  30.     } 

 

说明:

1、agent指令指定整个管道或某个特定的stage的执行环境。可选参数有以下几个:

any - 任意一个可用的agent

none - 如果放在pipeline顶层,那么每一个stage都需要定义自己的agent指令

label - 在jenkins环境中指定标签的agent上面执行,比如agent { label 'my-defined-label' }

node - agent { node { label 'labelName' } } 和 label一样,但是可用定义更多可选项

docker - 指定在docker容器中运行

dockerfile - 使用源码根目录下面的Dockerfile构建容器来运行

2、stage 表示这个Pipeline的一个执行阶段

stage指令定义在stages块中,里面必须至少包含一个steps指令,一个可选的agent指令,以及其他stage相关指令。

示例:

  1. pipeline { 
  2.     agent any  
  3.     stages {                          //如果在stages下的一个stage中包含了steps,那么该stages下的其它的stage也要有steps 
  4.         stage('Example') {            //注意stage里面的值不能相同,就是要唯一 
  5.             steps { 
  6.                 echo 'Hello World' 
  7.             } 
  8.         } 
  9.         stage('Deploy') { 
  10.             steps { 
  11.                 echo 'deploy success!' 
  12.             } 
  13.         }        
  14.     } 

3、steps 表示在这个stage中每一个步骤

4、sh 执行指定的命令

5、junit 是插件junit[JUnit plugin]提供的一个管道步骤,用来收集测试报告

6、archive 'target/*.jar'  这一行表示列出打包后的文件包,一般是war,或者jar.当加入这个以后打包成功就可以在blue界面中Artifacts中出现,可以点击下载。

 

问题1:直接使用上面的测试代码Github+maven的脚本示例时发现以下错误:

[ERROR] Plugin org.apache.maven.plugins:maven-compiler-plugin:3.1 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-compiler-plugin:jar:3.1: Could not transfer artifact org.apache.maven.plugins:maven-compiler-plugin:pom:3.1 from/to central (https://repo.maven.apache.org/maven2): /data/repository/org/apache/maven/plugins/maven-compiler-plugin/3.1/maven-compiler-plugin-3.1.pom.part.lock (No such file or directory) -> [Help 1]

这里是提示无法下载到maven的一些依赖包,解决方法是回到Jenkins的工作目录下找到该项目的目录在里面执行:mvn package 让它自动下载一次即可。

 

问题2:当在linux的shell里执行了mvn package命令时使用root导致在web界面的jenkins执行时提示以下错误:因为默认安装的jenkins是以jenkins用户运行。

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-clean-plugin:2.5:clean (default-clean) on project simple-maven-project-with-tests: Failed to clean project: Failed to delete /var/lib/jenkins/workspace/hello_world/target/simple-maven-project-with-tests-1.0-SNAPSHOT.jar -> [Help 1]

这时也只能手动在shell里执行一下:mvn clean即可。

 

最后的效果:

 

如果发布到远程的机器上,将会在下一篇文章中实现。