Jenkins 流水线实例(CICD 05)

1、Java项目CI

1.1 Java项目准备

首先在网上下载一个java项目,并上传至代码仓库中,这里我上传至gitee仓库中。

这里简单对Java文件目录介绍一下:https://www.cnblogs.com/siwuxie095/p/7572137.html

1.2 Jenkins pipeline基础编写

新建一个Jenkins项目,随便命名为:java-maven-demo

1.2.1 拉代码(checkout)

添加参数(利用参数,是为了Jenkins pipeline脚本可以复用):

SrcUrl:java项目src文件所在下载地址

BranchName:运行项目的分支

利用流水线脚本自动生成,编写拉代码的流水线脚本

选择该流水线项目,选择【流水线语法】-【checkout:check out from version control】--填写相关URL与分支信息---点击【生成流水线脚本】,最终生成:

checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee-yifanfan1', url: 'https://gitee.com/yifanfan1/Jenkins01.git']]])
checkout脚本

这里需要将分支名称与url替换成配置的参数:

checkout([$class: 'GitSCM', branches: [[name: "${BranchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee-yifanfan1', url: "SrcUrl"]]])

1.2.2 编译构建(Build)

mvn clean  //清除目标目录中的生成结果

mvn package  //生成target目录,编译、测试代码,生成测试报告,生成jar/war文件

mvn package -Dmaven.test.skip=true  //maven打包跳过测试。应该也可以写成mvn package -DskipTests

可以在Jenkins界面添加两个参数。

buildType:构建类型选择

buildShell:构建命令

至此,Jenkins pipeline脚本如下:

#!groovy

@Library("JenkinsLib")_

def build = new org.devops.build()

//获取Jenkins页面配置的参数
String SrcUrl = "${env.SrcUrl}"
String BranchName = "${env.BranchName}"
String buildType = "${env.buildType}"
String buildShell = "${env.buildShell}"

String workspace = "/opt/jenkins/worksapce"   //这里是自己定义的,如果使用默认的,可以通过env.WORKSPACE获取
String Sub_dir = "${env.Sub_dir}"  

pipeline{
    agent{node{
        label "master"
        customWorkspace "${workspace}"   //指定运行工作目录(可选)
        }
    }

    stages{
        stage("checkout"){
            steps{
                script{
                    checkout([$class: 'GitSCM', branches: [[name: "${BranchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: '60878c8f-98ec-4c23-b5e8-634ac021206f', url: "${SrcUrl}"]]])
                }
            }
        }

        stage("Build"){
            steps{
                script{
                    sh """
                    cd ${workspace}/${Sub_dir}/
                    ${buildType} ${buildshell}
                    """
                }
            }
        }
    }

}
拉代码+构建(基础版)

mvn编译完后,会在项目文件下,自动生成一个target文件夹,里面会有jar文件

几点调试过程说明:

1)本次调试时,用HTTPS方式拉代码不知道为什么会报以下错误。改为ssh方式,则没问题。ssh只需要在jenkins机器上生成密钥对,将私钥配置在Jenkins页面中,公钥配置在代码仓库平台即可。

2)构建时调用之前写得ShareLibray构建脚本就报错,报错不是说调用有问题,而是显示找不到pom.xml文件,即使在调用进去该文件目录还是报错。但是上面脚本,直接命令就没问题。

3)可以用println或者echo打印输出调试。同时,为了方便查看日志,可以引用前面博客写的ShareLibrary tools函数,将日志标色,方便查看

#!groovy

@Library("JenkinsLib")_

def tools = new org.devops.tools()

//获取Jenkins页面配置的参数
String SrcUrl = "${env.SrcUrl}"
String BranchName = "${env.BranchName}"
String buildType = "${env.buildType}"
String buildShell = "${env.buildShell}"

String workspace = "/opt/jenkins/worksapce"   //这里是自己定义的,如果使用默认的,可以通过env.WORKSPACE获取
String Sub_dir = "${env.Sub_dir}"  

pipeline{
    agent{node{
        label "master"
        customWorkspace "${workspace}"   //指定运行工作目录(可选)
        }
    }

    stages{
        stage("checkout"){
            steps{
                script{
                    tools.PrintMes(">>>>>>>>>>拉取代码>>>>>>>>>>>>>>>>","blue")
                    checkout([$class: 'GitSCM', branches: [[name: "${BranchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: '60878c8f-98ec-4c23-b5e8-634ac021206f', url: "${SrcUrl}"]]])
                }
            }
        }

        stage("Build"){
            steps{
                script{
                    tools.PrintMes(">>>>>>>>>>编译构建>>>>>>>>>>>>>>>>","blue")
                    sh """
                    cd ${workspace}/${Sub_dir}/
                    ${buildType} ${buildshell}
                    """
                }
            }
        }
    }

}
拉代码+构建(基础版+颜色输出日志)

 1.2.3 优化拉代码+编译打包

对于以上,可以进行优化,视频中主要优化点在于以下。前提安装gitlab专用的webhook插件,也可以安装Generic Webhook Trigger(视频中用的这个)。

1)代码触发流水线,并实现以下细节:

  • 分支自动匹配;任何分支提交代码都可以触发流水线
  • 变更commit状态;即通过调用gitlab API改变代码仓库的状态
  • 过滤特殊push请求;因为gitlab新建分支这种,其实也是push,也会触发流水线,这种触发其实是对资源的浪费,需要屏蔽

2)构建失败进行邮件通知;需要插件email extension

因为本人学习过程中用的是gitee,故这里根据gitee帮助中心实现Jenkins+gitee的代码自动触发。大致步骤如下(邮件触发略):

Step1:安装插件gitee

Step2:配置插件(以上两步前面都有)

Step3:Jenkins中的流水线项目,勾选gitee webhook。注意这里的URL(后面配置gitee webhook会生成)

Step4:打开要设置的gitee仓库中项目,点击【管理】进行设置。此处URL与密码是上面一步生成。

注意:

1)代码触发,就不可以选参数了, 所以默认参数应该就是对的参数;否则构建会失败。

2)触发的事件可以根据情况选择。

 

 

 

posted @ 2022-01-21 12:02  maxiaonong  阅读(690)  评论(0编辑  收藏  举报