jenkins-构建工具集成

阅读量: zyh 2020-04-24 11:12:11
Categories: > Tags:

简要

所有的构建工具,都应该安装在 jenkins 工作节点上。

maven(java打包工具)

jenkins 工作节点安装

https://maven.apache.org/download.cgi

wget --no-check-certificate https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz -O mvn.tar.gz
tar xf mvn.tar.gz -C /usr/local/
cd /usr/local/apache-maven-3.8.5

# /etc/profile 加入
export M2_HOME=/usr/local/apache-maven-3.8.5
export PATH=$M2_HOME/bin:$PATH

jenkins web 界面配置,引用安装好的 mvn

image-20220507205451384

pipeline中引用

pipeline {
	agent { node { label "master"}}
	
	stages {
		stage("build"){
			steps{
				script{
					mvnHome tools "M2"
					sh "${mvnHome}/bin/mvn -v"
				}
			}
		}
	}
}

👙也可以不用 tools 引用配置好的。而是直接使用 mvnHome = “/usr/local/apache-maven-3.8.5” 写死。

常用的 mvn 命令:

mvn clean package # 移除项目路径下的 target 目录文件后,再根据 pom.xml 的 packaging 标签来打包成 jar 或者 war
mvn clean install # 移除项目路径下的 target 目录文件后,再根据 pom.xml 的 packaging 标签来打包成 jar 或者 war,同时回解决依赖,包含 package 命令。
mvn clean test # 移除项目路径下的 target 目录文件后,再进行单元测试。

Ant(java打包工具)

https://zeyangli.github.io/chapter4/chapter4-1/2/

https://ant.apache.org/bindownload.cgi

tar zxf apache-ant-1.10.5-bin.tar.gz -C /usr/local/
#添加全局变量(/etc/profile)
export ANT_HOME=/usr/local/apache-ant-1.10.5
export PATH=$PATH:$MAVEN_HOME/bin:$ANT_HOME/bin
source /etc/profile

pipeline

node {
stage ("build"){
    antHome = tool 'ANT'
    sh "${antHome}/bin/ant -version"
}
}

常用命令

ant -buildfile -f build.xml

Gradle(java打包工具)

https://zeyangli.github.io/chapter4/chapter4-1/3/

https://downloads.gradle.org/distributions/gradle-5.3-bin.zip

unzip gradle-5.3-bin.zip -d /usr/local/
#添加全局变量(/etc/profile)
export GRADLE_HOME=/usr/local/gradle-5.3
export PATH=$PATH: $GRADLE_HOME/bin
source /etc/profile

pipeline

node {
stage ("gradlebuild"){
    gradleHome = tool 'GRADLE'
    sh "${gradleHome}/bin/gradle -v"
}
}

常用命令

- ./gradlew -v 版本号,首次运行,没有gradle的要下载的哦。
- ./gradlew clean 删除HelloWord/app目录下的build文件夹
- ./gradlew build 检查依赖并编译打包
- ./gradlew assembleDebug 编译并打Debug包
- ./gradlew assembleRelease 编译并打Release的包
- ./gradlew installRelease Release模式打包并安装
- ./gradlew uninstallRelease 卸载Release模式包

NPM(前端打包工具)

https://zeyangli.github.io/chapter4/chapter4-1/4/

https://nodejs.org/en/download/

tar xf node-v10.15.3-linux-x64.tar.xz -C /usr/local/
#添加全局变量(/etc/profile)
export NODE_HOME=/usr/local/node-v10.15.3-linux-x64
export PATH=$PATH: $NODE_HOME/bin
source /etc/profile

pipeline

👙在Jenkins全局工具配置中默认并没有node,需要安装NodeJS插件。

可以直接通过Jenkinsfile定义使用。

node {
stage ("npmbuild"){
    sh """
       export npmHome=/usr/local/node-v10.15.3-linux-x64
       export PATH=\$PATH:\$npmHome/bin
       npm -v
       """
}    
}

常用命令

npm install && npm run build

Jenkinslib 整合工具

方式1

工具不通过 jenkins tool 调用,纯粹用 pipeline

src/org/devops/builds.groovy

package org.devops


// 构建函数
def Build(buildTools, buildType){
    switch(buildType){
        case "maven":
            sh "${buildTools["maven"]}/bin/mvn clean package"
            break
        case "gradle":
            sh "${buildTools["gradle"]}/bin/gradle build -x test"
            break
        
        case "golang":
            sh "${buildTools["golang"]}/bin/go build demo.go"
            break
        
        case "npm":
            sh """ ${buildTools["npm"]}/bin/npm install  && ${buildTools["npm"]}/bin/npm run build """
            break
        
        default :
            println("buildType ==> [maven|gralde|golang|npm]")
            break
    }
}

pipeline 引用

@Library("devopslib@master") _  
// 这里的意思是调用 devopslib引用下的 git 库的 master 分支版本

def builds  = new org.devops.builds()

// 定义打包工具集
def buildTools = [  "maven" : "/usr/local/apache-maven-3.8.1",
                    "gradle": "/usr/local/gradle-6.8.3/",
                    "golang": "/usr/local/go",
                    "npm"   : "/usr/local/node-v14.16.1-linux-x64/",
                    "sonar" : "/usr/local/sonar-scanner-4.6.0.2311-linux/"]

//WEBUI上面的参数获取
String branchName = "${env.branchName}"
String gitHttpURL = "${env.gitHttpURL}"
String buildType  = "${env.buildType}"         // 传递打包命令
String skipSonar  = "${env.skipSonar}"
String repoName   = "${JOB_NAME.split('/')[0]}"

pipeline {
    agent { label  "build" }    
    options {
        skipDefaultCheckout true
    }

    stages {
        stage("GetCode"){
            steps{
                script{
                    mytools.GetCode("git",branchName,gitHttpURL)
                }
            }
            
        }

        stage("Build"){
            steps {
                script {
                    builds.Build(buildTools, buildType)
                }
            }
        }
...

方式2

工具通过 jenkins tool 调用,需要提前配置好 jenkins 全局工具

src/org/devops/builds.groovy

package org.devops

def Build(buildType, buildShell){
	def buildTools = ["mvn":"M2", "npm":"NPM"]
	
	println("当前选择构建类型:${buildType}")
	buildHome = tool buildTools[buildType]
	
	if ("${buildType}" == "npm"){
		sh """
			export NODE_HOME=${buildHome}
			export PATH=\$NODE_HOME/bin:\$PATH
			${buildHome}/bin/${buildType} ${buildShell}"""
	}else{
		sh "${buildHome}/bin/${buildType} ${buildShell}""
	}
}