简要
所有的构建工具,都应该安装在 jenkins 工作节点上。
maven(java打包工具)
jenkins 工作节点安装
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
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/
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/
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}""
}
}