jenkins-[mvn|gradle|go|npm|yarn]构建工具实践
Java项目构建Maven工具
初始化一个springboot项目 https://start.spring.io/
demo ├── HELP.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── main │ ├── java │ │ └── com │ │ └── example │ │ └── demo │ │ └── DemoApplication.java │ └── resources │ ├── application.properties │ ├── static │ └── templates └── test └── java └── com └── example └── demo └── DemoApplicationTests.java
1.1 Maven
官网:http://maven.apache.org/download.cgi Maven是一个项目的构建依赖管理工具。通常项目的根目录会存在一个pom.xml文件(该文件用于定义项目的依赖包信息和构建配置)
项目生成
生成一个标准的maven项目:
- 项目类型: Maven Project
- 语言: Java
- SpringBoot: 2.4.4 (版本)
- Metadata
- Group : 组信息
- Artifact:包名称
- Packging: 包格式(Jar、War)
- Dependencies: 定义项目依赖(最后都会写入Pom.xml)
mave配置环境
提前安装好JDK, 然后安装apache-maven-3.8.1:
### 下载 wget https://mirrors.bfsu.edu.cn/apache/maven/maven-3/3.8.1/binaries/apache-maven-3.8.1-bin.tar.gz or https://mirrors.bfsu.edu.cn/apache/maven/maven-3/ tar zxf apache-maven-3.8.1-bin.tar.gz -C /usr/local/ cd /usr/local/apache-maven-3.8.1/ pwd /usr/local/apache-maven-3.8.1 ### 配置环境变量 vi /etc/profile export M2_HOME=/usr/local/apache-maven-3.8.1 export PATH=$M2_HOME/bin:$PATH source /etc/profile ### 验证 mvn -v Apache Maven 3.8.1 (05c21c65bdfed0f71a2f2ada8b84da59348c4c5d) Maven home: /usr/local/apache-maven-3.8.1 Java version: 1.8.0_282, vendor: AdoptOpenJDK, runtime: /usr/local/jdk8u282-b08/jre Default locale: en_US, platform encoding: ANSI_X3.4-1968 OS name: "linux", version: "4.18.0-80.el8.x86_64", arch: "amd64", family: "unix"
maven常用命令
- mvn clean 清理构建目录
- mvn clean package 打包
- mvn clean install 打包部署
- mvn clean test 单元测试
- mvn clean package -f ../pom.xml -f指定pom位置\
- mvn clean package -DskipTests / -Dmaven.test.skip=true 跳过单测
- mvn deploy 发布包到制品库
配置阿里maven源 、 本地仓库;
##maven [root@jeekins demo-grable]# ll /data/apache-maven-3.8.3/conf/settings.xml //本地仓库 <localRepository>/data/maven-cache</localRepository> //私服仓库 <server> <id>deploymentRepo</id> <username>repouser</username> <password>repopwd</password> </server> //阿里云仓库源 <mirror> <id>aliyunmaven</id> <mirrorOf>*</mirrorOf> <name>阿里云公共仓库</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>
Jenkins集成
stage("build"){ steps { script{ sh "mvn clean package" } } }
更加严谨的方式:使用绝对路径
//gitlab传递的数据{} println("${webhookdata}") def buildTools = ["maven": "/data/apache-maven-3.8.3/"] //数据格式化 webhookdata = readJSON text: "${webhookdata}" //提取仓库信息 env.srcUrl= webhookdata["project"]["git_http_url"] //项目地址 env.branchName= webhookdata["ref"]-"refs/heads/" // 分支 env.commitId= webhookdata["checkout_sha"] //提交id env.commitUser= webhookdata["user_username"] // 提交人 env.userEmail = webhookdata["user_email"] //邮箱 currentBuild.description = "Trigger by Gitlab \n branch: ${env.branchName} \n user: ${env.commitUser} " currentBuild.displayName = "${env.commitId}" pipeline{ //指定运行此流水线的节点,指定标签的名字 agent { node { label "build"}} stages{ //阶段1 获取代码 stage("CheckOut"){ //定义阶段1的变量 environment { NAME = "hwf01" VERSION = "1.1.11" ENVTYPE = "DEV1" } steps{ script{ //branchName = "${params.branchName}" //srcUrl = "${params.srcUrl}" checkout([$class: 'GitSCM', branches: [[name: "${env.branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]]) } } } stage("Build") { steps { script { println("运行构建") //要是想获取input的值,打印他的环境变量 sh "${buildTools["maven"]}/bin/mvn clean package -DskipTests -f demo/pom.xml \ -s settings.xml" } } } stage("Test"){ steps{ script { println("运行测试") sh "${buildTools["maven"]}/bin/mvn clean test -f demo/pom.xml \ -s settings.xml" junit 'demo/target/surefire-reports/*.xml' } } } } post { always{ script{ println("流水线结束后,经常做的事情") //EmailUser("${env.userEmail}", currentBuild.currentResult) } } success{ script{ println("流水线成功后,要做的事情") } } failure{ script{ println("流水线失败后,要做的事情") } } aborted{ script{ println("流水线取消后,要做的事情") } } } }
junit展示图形
stage("UnitTest"){ steps{ script{ sh "${buildTools["maven"]}/bin/mvn test" } } post { success { script{ junit 'target/surefire-reports/*.xml' } } } }
1.2 Gradle
项目生成
官网:https://gradle.org/releases/ Gradle基于Groovy,具有更灵活更强大的构建系统,能帮助我们构建更复杂的项目。
上传代码到gitlab仓库
[root@jeekins demo-grable]# git add . [root@jeekins demo-grable]# git commit -m "add ." [root@jeekins demo-grable]# git push -u origin master
配置环境
https://gradle.org/next-steps/
unzip gradle-6.8.3-bin.zip -d /usr/local/ export GRADLE_HOME=/usr/local/gradle-6.8.3/ export PATH=$GRADLE_HOME/bin:$PATH source /etc/profile gradle -v
常用命令
- gradle build 构建项目
- gradle build -x test 构建项目跳过测试
- gradle clean 清空构建目录
配置阿里gradle源 、 本地仓库;
在项目文件里的 build.gradle 文件中加入以下代码:
allprojects { repositories { maven { url 'https://maven.aliyun.com/repository/public/' } mavenLocal() mavenCentral() } }
添加在这里
repositories { mavenCentral() maven { url 'https://maven.aliyun.com/repository/public/' } }
Jenkins集成
//gitlab传递的数据{} println("${webhookdata}") def buildTools = ["gradle": "/data/gradle-7.2"] //数据格式化 webhookdata = readJSON text: "${webhookdata}" //提取仓库信息 env.srcUrl= webhookdata["project"]["git_http_url"] //项目地址 env.branchName= webhookdata["ref"]-"refs/heads/" // 分支 env.commitId= webhookdata["checkout_sha"] //提交id env.commitUser= webhookdata["user_username"] // 提交人 env.userEmail = webhookdata["user_email"] //邮箱 currentBuild.description = "Trigger by Gitlab \n branch: ${env.branchName} \n user: ${env.commitUser} " currentBuild.displayName = "${env.commitId}" pipeline{ //指定运行此流水线的节点,指定标签的名字 agent { node { label "build"}} stages{ //阶段1 获取代码 stage("CheckOut"){ //定义阶段1的变量 environment { NAME = "hwf01" VERSION = "1.1.11" ENVTYPE = "DEV1" } steps{ script{ //branchName = "${params.branchName}" //srcUrl = "${params.srcUrl}" checkout([$class: 'GitSCM', branches: [[name: "${env.branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]]) } } } stage("Build") { steps { script { println("运行构建") //要是想获取input的值,打印他的环境变量 sh "${buildTools["gradle"]}/bin/gradle clean && ${buildTools["gradle"]}/bin/gradle build -x test" } } } stage("Test"){ steps{ script { println("运行测试") sh "${buildTools["gradle"]}/bin/gradle test" junit 'build/test-results/test/*.xml' } } } } post { always{ script{ println("流水线结束后,经常做的事情") //EmailUser("${env.userEmail}", currentBuild.currentResult) } } success{ script{ println("流水线成功后,要做的事情") } } failure{ script{ println("流水线失败后,要做的事情") } } aborted{ script{ println("流水线取消后,要做的事情") } } } }
2. Go项目构建工具
go:下载地址https://studygolang.com/dl
配置环境
# tar zxf go1.16.3.linux-amd64.tar.gz -C /usr/local/ # cd /usr/local/go/ # ls AUTHORS CONTRIBUTORS PATENTS SECURITY.md api doc lib pkg src CONTRIBUTING.md LICENSE README.md VERSION bin favicon.ico misc robots.txt test # pwd /usr/local/go [root@zeyang-nuc-service go]# vi /etc/profile export GOROOT=/usr/local/go export GOPATH=/opt/godir export PATH=$GOROOT/bin:$PATH yum -y install --downloadonly --downloaddir=./ glibc.i686 # source /etc/profile # go version go version go1.16.3 linux/amd64
GOROOT
设置golang的安装位置GOBIN
目录是执行go install
后生成可执行文件的目录
GOPATH
工作目录
常用命令
- go clean 清空构建
- go build 构建源文件
- go doc 生成godoc文档
- go install 编译并安装指定的代码包
- go fmt 代码格式化
- go get 获取一个包
- go run 运行一个go文件
- go test 运行测试
go要自己写
3.1 npm
配置环境
wget https://nodejs.org/dist/v14.16.1/node-v14.16.1-linux-x64.tar.xz tar xf node-v14.16.1-linux-x64.tar.xz -C /usr/local/ # vi /etc/profile export NODE_HOME=/usr/local/node-v14.16.1-linux-x64 export PATH=$NODE_HOME/bin:$PATH source /etc/profile # node -v v14.16.1 # npm -v 6.14.12
项目生成
通过下面的命令,初始化一个vue项目
# npm install -g vue-cli + vue@2.6.12 added 1 package from 1 contributor in 3.342s # vue-init webpack vuedemo ? Project name vuedemo ? Project description A Vue.js project ? Author adminuser <2560350642@qq.com> ? Vue build standalone ? Install vue-router? No ? Use ESLint to lint your code? No ? Set up unit tests No ? Setup e2e tests with Nightwatch? No ? Should we run `npm install` for you after the project has been created? (recommended) npm vue-cli · Generated "vuedemo".
常用命令
- npm install <moduleName> -g 包安装到全局
- npm list:查看当前已安装的包。
- npm config set registry https://registry.npm.taobao.org 设置淘宝源
- npm config set cache "/opt/npmcache/" 设置缓存路径
//gitlab传递的数据{} println("${webhookdata}") def buildTools = ["npm": "/data/node-v14.18.0-linux-x64" ] //数据格式化 webhookdata = readJSON text: "${webhookdata}" //提取仓库信息 env.srcUrl= webhookdata["project"]["git_http_url"] //项目地址 env.branchName= webhookdata["ref"]-"refs/heads/" // 分支 env.commitId= webhookdata["checkout_sha"] //提交id env.commitUser= webhookdata["user_username"] // 提交人 env.userEmail = webhookdata["user_email"] //邮箱 currentBuild.description = "Trigger by Gitlab \n branch: ${env.branchName} \n user: ${env.commitUser} " currentBuild.displayName = "${env.commitId}" pipeline{ //指定运行此流水线的节点,指定标签的名字 agent { node { label "build"}} stages{ //阶段1 获取代码 stage("CheckOut"){ //定义阶段1的变量 environment { NAME = "hwf01" VERSION = "1.1.11" ENVTYPE = "DEV1" } steps{ script{ //branchName = "${params.branchName}" //srcUrl = "${params.srcUrl}" checkout([$class: 'GitSCM', branches: [[name: "${env.branchName}"]], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]]) } } } stage("Build") { steps { script { println("运行构建") //要是想获取input的值,打印他的环境变量 sh """ export PATH=\$PATH:${buildTools["npm"]}/bin ${buildTools["npm"]}/bin/npm install ${buildTools["npm"]}/bin/npm run build """ } } } stage("Test"){ steps{ script { println("运行测试") //sh "${buildTools["go"]}/bin/go test" //junit 'build/test-results/test/*.xml' } } } } post { always{ script{ println("流水线结束后,经常做的事情") //EmailUser("${env.userEmail}", currentBuild.currentResult) } } success{ script{ println("流水线成功后,要做的事情") } } failure{ script{ println("流水线失败后,要做的事情") } } aborted{ script{ println("流水线取消后,要做的事情") } } } }
3.2 yarn
yarn,facebook取代npm的包管理工具,速度快。Yarn 缓存包,无需重复下载。 并行下载,安装速度快。
配置环境
npm install -g yarn yarn info
常用命令
- yarn / yarn install
- yarn clean
- yarn config set cache-folder "/opt/yarncache"
yarn config set registry https://registry.npm.taobao.org yarn config set sass_binary_site "https://npm.taobao.org/mirrors/node-sass/"
继续阅读

我的微信
这是我的微信扫一扫
评论