https://www.yuque.com/xyy-onlyone/aevhhf?# 《玩转Typora》
gitlab/gitlab-ce:15.0.3-ce.0
jenkins/jenkins:2.346.3-2-lts-jdk11
apache-maven-3.9.2
openjdk 11.0.18
链接:https://pan.baidu.com/s/1adCJwX8-XtMBbmneNUf2og?pwd=0820
提取码:0820
–来自百度网盘超级会员V7的分享
2023.6.21-实战:Maven构建工具实践-(测试成功)
官网:https://maven.apache.org/index.html
Maven是一个项目的构建依赖管理工具。通常项目的根目录会存在一个pom.xml文件(该文件用于定义项目的依赖包信息和构建配置)
初始化一个springboot项目 https://start.spring.io/ (也可以下载一个ide)
如果打不开也可以使用:https://start.aliyun.com/bootstrap.html
一个spring boot项目其实有很多依赖。
生成一个标准的maven项目:
jar包:可执行的程序。(目前基本是这种)
war包:需要放到容器里,例如tomcat里,需要支持jsp环境的那种,才可以解析。
以上配置完成后,点击Generate
,生成测试代码。
代码下载完成 后,可以用vscode打开,看下项目代码结构:
devops6-maven-service
项目注意:这里取消勾选初始化仓库配置项。
Push an existing folder
cd existing_folder
git init --initial-branch=main
git remote add origin http://172.29.9.101:8076/devops6/devops6-maven-service.git
git add .
git commit -m "Initial commit"
git push -u origin main
自己推送过程:
git init --initial-branch=main
git remote add origin http://172.29.9.101:8076/devops6/devops6-maven-service.git
git add .
git commit -m "Initial commit"
git push -u origin main
提前安装好JDK, 然后安装apache-maven-3.9.1。
本次在gitlanci-runner上下载maven:(后面的环境为gitlab runner和jenkins agent都在一台机器上)
1、JDK环境自己之前已经安装好。
如何安装JDK环境,请查看我的另一篇文章!
本地文档路径:实战:Linux下jdk8环境安装(测试成功)-2022.4.16(二进制方式)
(jdk11安装方式一样)
网络文档路径:https://blog.csdn.net/weixin_39246554/article/details/124221560
2、安装apache-maven-3.9.1
###1、下载代码
[root@Devops6 ~]#wget https://dlcdn.apache.org/maven/maven-3/3.9.2/binaries/apache-maven-3.9.2-bin.tar.gz --no-check-certificate
[root@Devops6 ~]#ll -h apache-maven-3.9.2-bin.tar.gz
-rw-r--r-- 1 root root 8.9M May 8 17:12 apache-maven-3.9.2-bin.tar.gz
[root@Devops6 ~]#tar zxf apache-maven-3.9.2-bin.tar.gz -C /usr/local/
[root@Devops6 ~]#cd /usr/local/apache-maven-3.9.2/
[root@Devops6 apache-maven-3.9.2]#pwd /usr/local/apache-maven-3.9.2
/usr/local/apache-maven-3.9.2
###2、配置环境
[root@Devops6 ~]#vim /etc/profile
……
export M2_HOME=/usr/local/apache-maven-3.9.2
export PATH=$M2_HOME/bin:$PATH
[root@Devops6 ~]#source /etc/profile
###3、验证
[root@Devops6 ~]#mvn -v
Apache Maven 3.9.2 (c9616018c7a021c1c39be70fb2843d6f5f9b8a1c)
Maven home: /usr/local/apache-maven-3.9.2
Java version: 11.0.18, vendor: Red Hat, Inc., runtime: /usr/lib/jvm/java-11-openjdk-11.0.18.0.10-1.el7_9.x86_64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"
Maven本地仓库 & 远程仓库
[root@Devops6 conf]#vim /usr/local/apache-maven-3.9.2/conf/settings.xml
${user.home}/.m2/repository
内网搭建一个这样的源,使用nexus去搭建的。
https://developer.aliyun.com/mvn/guide?spm=a2c6h.13651104.mirror-free-trial.5.10596e1ab2zbI4
https://developer.aliyun.com/mirror/maven?spm=a2c6h.13651102.0.0.3e221b11J7CO0d
<mirror>
<id>aliyunmavenid>
<mirrorOf>*mirrorOf>
<name>阿里云公共仓库name>
<url>https://maven.aliyun.com/repository/publicurl>
mirror>
[root@Devops6 ~]#cd /data/devops6/
[root@Devops6 devops6]#ls
gitlab jenkins_agent jenkins_home
[root@Devops6 devops6]#git clone http://172.29.9.101:8076/devops6/devops6-maven-service.git
Cloning into 'devops6-maven-service'...
Username for 'http://172.29.9.101:8076': root
Password for 'http://[email protected]:8076':
remote: Enumerating objects: 25, done.
remote: Counting objects: 100% (25/25), done.
remote: Compressing objects: 100% (15/15), done.
remote: Total 25 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (25/25), done.
[root@Devops6 devops6]#ls
devops6-maven-service gitlab jenkins_agent jenkins_home
[root@Devops6 devops6]#cd devops6-maven-service/
[root@Devops6 devops6-maven-service]#ls
mvnw mvnw.cmd pom.xml src
[root@Devops6 devops6-maven-service]#
[root@Devops6 devops6-maven-service]#pwd
/data/devops6/devops6-maven-service
[root@Devops6 devops6-maven-service]#ls
mvnw mvnw.cmd pom.xml src
[root@Devops6 devops6-maven-service]#mvn clean package
[root@Devops6 devops6-maven-service]#ls
mvnw mvnw.cmd pom.xml src target
[root@Devops6 devops6-maven-service]#cd target/
[root@Devops6 target]#ls
classes demo-0.0.1-SNAPSHOT.jar demo-0.0.1-SNAPSHOT.jar.original generated-sources generated-test-sources maven-archiver maven-status surefire-reports test-classes
[root@Devops6 target]#java -jar demo-0.0.1-SNAPSHOT.jar
可以看到报错了,提示8080端口被占用了,我们来检查下:
可以看到8080端口被jenkins使用了。
[root@Devops6 target]#java -jar -Dserver.port=8090 demo-0.0.1-SNAPSHOT.jar
通过http://172.29.9.101:8090/访问:
出现这个界面就说明ok了。(这里出现这个界面是因为代码里没有配置相关异常的代码,不影响测试。)
我们删除下这个缓存目录:
[root@Devops6 ~]#rm -rf .m2/repository/
在到项目里清下构建目录:
mvn clean
可以看到,target目录也被清理掉了。
然后打包,就可以看到要继续下载依赖包了:
mnv clean package
见上部分2.创建gitlab仓库并上传代码
内容。
devops6-maven-service
pipeline类型作业,点击保存。添加2个选项参数:
保存后刷新:
我们先简单写一段代码,测试流水线可用性。
pipeline {
agent {label "build"}
stages{
stage("CheckOut"){
steps{
script{
println("CheckOut")
}
}
}
stage("Build"){
steps{
script{
println("Build")
}
}
}
}
}
以上测试ok。
如何获取下载代码此部分代码呢?我们使用片段生成器
来生成下载部分代码。
checkout([$class: 'GitSCM', branches: [[name: 'main']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitlab-root', url: 'srcUrl']]])
pipeline {
agent {label "build"}
stages{
stage("CheckOut"){
steps{
script{
println("CheckOut")
checkout([$class: 'GitSCM',
branches: [[name: "${env.branchName}"]],
extensions: [],
userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]])
sh "ls -l" //验证
}
}
}
stage("Build"){
steps{
script{
println("Build")
}
}
}
}
}
以上下载部分代码测试ok。
build
部分代码pipeline {
agent {label "build"}
stages{
stage("CheckOut"){
steps{
script{
println("CheckOut")
checkout([$class: 'GitSCM',
branches: [[name: "${env.branchName}"]],
extensions: [],
userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]])
sh "ls -l" //验证
}
}
}
stage("Build"){
steps{
script{
println("Build")
sh "mvn clean package"
}
}
}
}
}
这里会发现,build阶段报错了,提示mvn命令找不到。
那我们给使用mvn命令的绝对路径来再次测试下:
[root@Devops6 ~]#which mvn
/usr/local/apache-maven-3.9.2/bin/mvn
pipeline {
agent {label "build"}
stages{
stage("CheckOut"){
steps{
script{
println("CheckOut")
checkout([$class: 'GitSCM',
branches: [[name: "${env.branchName}"]],
extensions: [],
userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]])
sh "ls -l" //验证
}
}
}
stage("Build"){
steps{
script{
println("Build")
sh "/usr/local/apache-maven-3.9.2/bin/mvn clean package"
}
}
}
}
}
再次运行:
这次就测试ok了。我们有缓存了,所以它构建非常快。
企业里,能直接这么用吗?–构建命令写死。—显示是不合理的。
因此,我们这里使用变量来优化下代码。
在此流水线新增一个字符类型变量:
再改下pipeline代码:
pipeline {
agent {label "build"}
stages{
stage("CheckOut"){
steps{
script{
println("CheckOut")
checkout([$class: 'GitSCM',
branches: [[name: "${env.branchName}"]],
extensions: [],
userRemoteConfigs: [[credentialsId: 'gitlab-root', url: "${env.srcUrl}"]]])
sh "ls -l" //验证
}
}
}
stage("Build"){
steps{
script{
println("Build")
sh "${env.buildShell}"
}
}
}
}
}
再次运行测试:
测试ok。
后端:
目前Java用的最多的就是Maven了;
Gradle的性能比Maven是要强一些;(有时候,安卓打包也会用到这个Gradle)
现在基本很少用Ant了,新项目用的是Gradle;
前端:
nodeJs工具:react,vue
在调流水线的时候,遇到很多Maven构建失败的问题。大家都去找Jenkins的问题,但最后发现是Maven这个工具出现了一些问题(使用时可能参数调错了)。Maven在构建代码的时候,经常会出现构建失败,编译不通过现象。Maven跑测试的时候也可能会报错。这个和你的项目也可能有关系,比如你项目的类找不到了,那可能也会报错了。也就是说,后续在排错时,不仅要考虑工具问题,也要考虑代码本身层面的因素。
注意:这里容易混淆的一点是:
1.项目的根目录会存在一个pom.xml文件:(该文件用于定义项目的依赖包信息和构建配置);
2.maven软件包里的settings.xml:是管理maven的;(后期会该改个配置文件)
我的博客主旨:
微信二维码
x2675263825 (舍得), qq:2675263825。
微信公众号
《云原生架构师实战》
语雀
https://www.yuque.com/xyy-onlyone
csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421
知乎
https://www.zhihu.com/people/foryouone
好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!