封尘网

让学习成为一种习惯!

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分支拉取代码:

pipeline { 
    agent any 
    parameters { 
        string(name:'repoBranch', defaultValue: 'master', description: 'This is an test.') 
        string(name:'repoUrl', defaultValue: 'http://192.168.18.33/jenkins/pipeline-test01.git', description: '项目地址') 
    } 
    stages { 
        stage('Example') { 
            steps { 
                // echo "Hello ${params.repoBranch}" 
                git url:params.repoUrl ,branch:params.repoBranch 
            } 
        } 
        stage('Code Analysis') { 
            steps { 
                sh "mvn clean" 
            } 
        } 
        stage('Package') { 
            steps { 
                sh "'mvn' -Dmaven.test.skip=true package" 
            } 
        } 
        stage('Deploy') { 
            steps { 
                echo "pipeline success!" 
                archive 'target/*.jar' 
            } 
        }                    
    } 
}

说明:

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相关指令。

示例:

pipeline { 
    agent any  
    stages {                          //如果在stages下的一个stage中包含了steps,那么该stages下的其它的stage也要有steps 
        stage('Example') {            //注意stage里面的值不能相同,就是要唯一 
            steps { 
                echo 'Hello World' 
            } 
        } 
        stage('Deploy') { 
            steps { 
                echo 'deploy success!' 
            } 
        }        
    } 
}

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即可。

最后的效果:

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

提醒:本文最后更新于 2036 天前,文中所描述的信息可能已发生改变,请谨慎使用。