Gitee+Jenkins+SonarQube代码上线的实战操作

news2025/1/15 13:23:01

代码上线-流程图

添加Nexus流程图

机器的环境

172.168.0.1  jenkins         # 建议-机器环境:1C以上,2G以上,40G磁盘以上
172.168.0.2  SonarQube       # 建议-机器环境:2C以上,4G以上,40G磁盘以上
172.168.0.3  nexus(可选)     # 建议-机器环境:1C以上,2G以上,80G磁盘以上
172.168.0.4  web01           # 建议-机器环境:1C以上,2G以上,40G磁盘以上

提示:

  • 该公司的Java业务项目比较多的话,可以单独安装nexus。
  • 如果不多可以使用阿里云的私服器。

安装包

# Jenkins机器的安装包:
jdk-8u201-linux-x64.tar.gz
jenkins-2.277.4-1.1.noarch.rpm

# SonarQube机器的安装包:
sonarqube-7.0.tar.gz
mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz

# nexus机器的安装包:
nexus-3.13.0-01-unix.tar.gz

# Web01的机器(执行Java项目的安装包)
jdk-8u201-linux-x64.tar.gz
apache-maven-3.3.9-bin.tar.gz
apache-tomcat-8.0.27.tar.gz

开始部署

1、安装JDK运行环境 和 Jenkins服务

# JAVA
tar -zxf /opt/jdk-8u60-linux-x64.tar.gz
ln -s /opt/jdk1.8.0_60 /opt/jdk
# 添加java变量
vim /etc/profile
JAVA_HOME=/opt/jdk
export $PATH:$JAVA_HOME/bin:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$JAVA_HOME/lib/tools.jar
source /etc/profile
java -version

# Jenkins
rpm -ivh jenkins-2.277.4-1.1.noarch.rpm
# 配置Jekins
vim /etc/sysconfig/jenkins
# 编辑状态中
JENKINS_USER="root"
# 目录文件设置为root
chown -R root:root /var/lib/jenkins /var/cache/jenkins /var/log/jenkins
# 启动jenkins 
systemctl start jenkins && systemctl enable jenkins && systemctl status jenkins

# 安装插件(如果你没有Jenkins插件的包话,可以在页面自选安装插件)
1、自动安装可选插件
2、手动下载插件上传安装
3、插件放入的目录地址
ll /var/lib/jenkins     
drwxr‐xr‐x 2 root root 6 8月26 00:31 plugins  # jobs为每次构建后构建的结果目录,plugins为插件目录
上传插件包解压到plugins下执行重启  systemctl restart jenkins

# jenkins主要的目录 
/usr/lib/jenkins/       jenkins安装目录,WAR包会放在这里 
/etc/sysconfig/jenkins  jenkins配置文件,“端口”,“JENKINS_HOME”等都可以在这里配置 
/var/lib/jenkins/       默认的JENKINS_HOME 
/var/log/jenkins/jenkins.log  Jenkins日志文件 

测试-访问Jekins页面地址:http://localhost:8080

2、Maven服务

# Maven临时存放目录
/root/.m2/repository
tar -zxf apache-maven-3.3.9
ln -s /opt/apache-maven-3.3.9 /opt/maven
# 添加Maven变量
vim /etc/profile
MAVEN=/opt/maven
export PATH=$PATH:$MAVEN/bin/
source /etc/profile
mvn -v

# 参数作用信息
mvn package -Dmaven.test.skip=true  跳过测试用例
integration-test(集成测试):   如果有需要,把包处理并部署到可以运行集成测试的环境中去。
validate(验证):   验证项目正确,并且所有必要信息可用。 
compile(编译):    编译项目源码 
test(测试):       使用合适的单元测试框架测试编译后的源码。 
package(打包):    源码编译之后,使用合适的格式(例如JAR格式)对编译后的源码进行打包。
verify(验证):     进行各种测试来验证包是否有效并且符合质量标准。 
install(安装):    把包安装到本地仓库,使该包可以作为其他本地项目的依赖。 
deploy(部署):     在集成或发布环境中完成,将最终软件包复制到远程存储库,以与其他开发人员和项目共享。 
mvn clean (清除) :  清除上次编译的结果 


提示:如果有您自己搭建了nexus私服器,可以跳过。
# 在Maven的settings.xml 文件里配置:阿里云的子节点。添加阿里云地址
如下操作:
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>*</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror> 

3、部署私服 Nexus (可选)

下载地址:https://www.sonatype.com/download‐oss‐sonatype
配置仓库两个选项
1、项目下的pom.xml配置、只生效当前的项目
2、在maven配置全局所有项目生效

# JAVA
tar -zxf /opt/jdk-8u60-linux-x64.tar.gz
ln -s /opt/jdk1.8.0_60 /opt/jdk
# 添加java变量
vim /etc/profile
JAVA_HOME=/opt/jdk
export $PATH:$JAVA_HOME/bin:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$JAVA_HOME/lib/tools.jar
source /etc/profile
java -version

# Nexus
tar -zxvf nexus-3.13.0-01-unix.tar.gz -C /opt/
ln -s /opt/nexus-3.13.0-01 /opt/nexus
# 启动
/opt/nexus/bin/nexus start
# 访问Nexus地址 http://localhost:8081
默认账号:admin
默认密码:admin123

配置Maven全局配置文件

cat /opt/maven/conf/settings.xml
...........
133     <server>
134       <id>my-nexue-releases</id>
135       <username>admin</username>
136       <password>admin123</password>
137     </server>
138     <server>
139       <id>my-nexue-snapshot</id>
140       <username>admin</username>
141       <password>admin123</password>
142     </server>
...........
156   <mirrors>
157   <mirror>
158     <id>nexus</id>
159     <mirrorOf>*</mirrorOf>
160     <url>http://nexus机器IP:8081/repository/maven-public/</url>
161   </mirror>
...........
174   </mirrors>
...........
197   <profiles>
...........
262     <profile>
263       <id>nexus</id>
264       <repositories>
265         <repository>
266           <id>central</id>
267           <url>http://nexus机器IP:8081/repository/maven-public/</url>
268           <releases><enabled>true</enabled></releases>
269           <snapshots><enabled>true</enabled></snapshots>
270         </repository>
271       </repositories>
272     <pluginRepositories>
273       <pluginRepository>
274         <id>central</id>
275         <url>http://nexus机器IP:8081/repository/maven-public/</url>
276           <releases><enabled>true</enabled></releases>
277           <snapshots><enabled>true</enabled></snapshots>
278         </pluginRepository>
279       </pluginRepositories>
280     </profile>
281   </profiles>
..............
291   <activeProfiles>
292     <activeProfile>nexus</activeProfile>
293   </activeProfiles>

4、部署SonarQube

代码质量检测SonarQube 
1. SonarQube基础java开发,需安装open JDK8版本 
2. SonarQube需要依赖MySQL数据库,至少5.6版本以上 
3. SonarQube的小型实例至少4G内存,如果大型实例需要16G内存

安装SonarQube

unzip sonarqube-7.0.zip -d /opt/
ln -s /opt/sonarqube-7.0 /opt/sonarqube
# 创建soanr用户 并且授权目录为sonar
groupadd sonar
useradd sonar -g sonar
passwd sonar
chown -R sonar.sonar /opt/jdk-11.0.7/
chown -R sonar.sonar /opt/sonarqube-8.9.8.54436

配置Sonar连接本地数据库

cat /opt/sonarqube/conf/sonar.properties
.......
sonar.jdbc.username=root
sonar.jdbc.password=123456
sonar.jdbc.url=jdbc:mysql://Mysql机器IP:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
.......

启动方案有以下二种:
1)使用普通用户启动sonarqube

su - sonar -c "/opt/sonarqube/bin/linux-x86-64/sonar.sh start"

2)创建SonarQube服务

vim /etc/systemd/system/sonarqube.service    
[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=simple
User=sonar
Group=sonar
PermissionsStartOnly=true

# 备注:ExecStart中的路径请根据版本不同重新设置
ExecStart=/usr/bin/java -Xms32m -Xmx32m -Djava.net.preferIPv4Stack=true -jar /opt/sonarqube-7.0/lib/sonar-application-7.0.jar 
StandardOutput=syslog
LimitNOFILE=65536
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
SuccessExitStatus=143

[Install]
WantedBy=multi-user.target

# 启动sonarqube.service
systemctl daemon-reload
systemctl enable sonarqube.service
systemctl start sonarqube.service

启动后端口为9000

直接访问  http://localhost:9000/about 
用户名admin 
密码admin 

提示:它会生成一个tokin,只显示一次记录好 
jenkins: 0807eba6dcceabe5bce653a9c4efe95ce6a8ac99

配置管理 sonar 安装插件
1.安装中文汉化插件在页面上找到administrator > Marketplace > 搜索框 chinese,出现一个 chinese pack 然后点击install,安装完点击restart 重启生效

2.默认已安装C JAVA Python PHP JS 等代码质量分析工具,如果一个项目使用了JAVA CSS JS HTML,默认情况下sonar只会检测JAVA,JS等代码的漏洞和bug,如果安装了HTML、CSS等插件,则会检测该项目代码中JAVA JS HTML CSS代码的漏洞和bug

手动安装插件(这是UP之前的java项目,打包好的包)

# 先清理之前的jar包,然后推送
rm -rf /opt/sonarqube/extensions/plugins/*
tar -zxvf /opt/sonar_plugins.tar.gz -C /opt/sonarqube/extensions/plugins/
chown sonar.sonar -R /opt/sonarqube/extensions/plugins/
su - sonar -c "/opt/sonarqube/bin/linux-x86-64/sonar.sh restart"

案列:创建Java的流水线项目

1、Gitee里创建代码库(也可以使用其它的代码库,比如:Gitlab、Github等)

1)新建仓库

2)设置全局,再创建 git 仓库
提示:有条件的话可以单独一台代码的机器,如果没有就在Jenkins机器等。其它台机器上上传代码

2、在Jenkins页面上,创建一个Maven的项目名:Java-Project01

前提条件:需要您先使用Git打标签,上传到Gitee代码库才会显示出标签信息。

cd /data/test/Java-Poject01/
git init 
git add .
git commit -am "new XXX"    # 提交到本地仓库中
git tag -a v1.XX -m "v1.XX稳定版"
git push -u origin v1.XX

在Jenkins页面里添加 获取Gitee代码库的标签信息

然后再创建 选项参数:实现发布和回滚的功能

记得这里要添加 ${git_version} 名

实现的结果

提示:如果打包过在java项目是没有pom.xml,需要您自己手动先打包才会生成

测试java项目,进行简单打包命令
cd /data/hello-world 
mvn package

然后Git打标签,并推送Gitee代码库上

添加 chean package (提醒:Java的项目必须要用到编译的功能 )

添加执行shell

cat /data/script/java_maven.sh
#!/bin/sh
MAVEN=/opt/tomcat/bin
DATE=$(date +%Y-%m-%d-%H-%M-%S)
CODE_DIR="/var/lib/jenkins/workspace/Java-Project01"
WEB_DIR="/opt/tomcat/webapps"
WEB_IP=“IP地址”

get_code_scp(){
        ssh $WEB_IP "cd $WEB_DIR && mkdir java-${git_version}"
        cd $CODE_DIR && scp $CODE_DIR/target/*.war $WEB_IP:$WEB_DIR/java-${git_version}
}

code_tarxf(){
        ssh $WEB_IP "cd $WEB_DIR/java-${git_version} && unzip *.war && rm -rf *.war"
}

ln_html(){
        ssh $WEB_IP "cd $WEB_DIR/ && rm -rf ROOT && ln -s java-${git_version} ROOT && $MAVEN/shutdown.sh && $MAVEN/startup.sh"
}
main(){
        get_code_scp;
        code_tarxf;
        ln_html;
}
if [ "$deploy_env" == "deploy" ];then
        if [ "$GIT_COMMIT" == "$GIT_PREVIOUS_SUCCESSFUL_COMMIT" ];then
            echo "构建失败该 $git_version 版本号已部署"
    else
    main
    fi
elif [ "$deploy_env" == "rollback" ];then
        ln_html
fi

手动测试下Java项目发布

3、实现Java代码,推送到SonarQube检测

客户端其他版本下载地址搜索对应版本,例如: SonarScanner 4.07
地址:https://docs.sonarqube.org/7.9/analysis/scan/sonarscanner/
下载客户端的包名: sonar-scanner-cli-4.7.0.2747-linux.zip

(可选) 到项目目录下进行代码推送分析 打开认证

需要在客服端机器执行(比如:web机器)

# 解压
tar -zxvf sonar-scanner-cli-4.7.0.2747-linux.zip -C /opt/

# 添加变量
vim /etc/profile
SONAR_SCANNER=/opt/sonar-scanner
export PATH=$PATH:$SONAR_SCANNER/bin/

# 创建项目后,会有显示以下秘钥,记得一定要复制保存下来
项目名称: ad4bf979f9146c971726d45323dc2a64dfea3020eda4
# 在web机器上执行命令
sonar-scanner \
  -Dsonar.projectKey=项目名称 \   # 你的代码库项目名
  -Dsonar.sources=. \
  -Dsonar.host.url=http://SonarQube的机器IP:9000 \
  -Dsonar.login=ad4bf979f9146c971726d45323dc2a64dfea3020

在Jenkins上配置 Execute SonarQube Scanner(记住一定要 放在在shell上面,因为要先执行SonarQube工具)

sonar.projectName=${JOB_NAME}
sonar.projectKey=java
sonar.sources=.

然后执行就OK了,等编译完后会自动推送到SonarQube上

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/557750.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面对数字化新技术的变革风口,企业应如何借由技术创新开拓新局,完成数字化转型和升级?

为使企业有效借力科技创新&#xff0c;实现数字化转型升级&#xff0c;企业可以采取以下几个关键步骤&#xff1a; 评估业务目标&#xff1a;首先明确企业的业务目标并确定技术创新可以帮助企业实现这些目标的领域。了解企业当前的挑战、竞争格局和客户需求&#xff0c;以确定数…

Unity:圆底烧瓶中液体液面升降变化的效果

一、效果展示 二、实现的原理 1、从image的filled模式说起 image的filled模式&#xff0c;适合用来做进度条&#xff1a; 2、能否为一个3D object实现一个image filled 的shader &#xff1f; Shader "Custom/FilledImageEffect" {Properties{_MainTex ("…

Qt编程基础 | 第三章-控件 | 3.1、组合框

一、组合框 1.1、定义 QComboBox提供了一种向用户呈现选项列表的方式&#xff0c;以占用最少的屏幕空间。 组合框是一个显示当前项目的选择小部件&#xff0c;可以弹出可选择项目的列表。 组合框可以是可编辑的&#xff0c;允许用户修改列表中的每个项目。 QComboBox 除了显示…

2023款ECMAScript

2023款ECMAScript 新的数组api findLast 反向迭代数组&#xff0c;并返回满足提供的测试函数的第一个元素的值, 如果没有找到返回undefined const isEven (number) > number % 2 0; const numbers [1, 2, 3, 4]; console.log(numbers.findLast(isEven)); // 4 findLastI…

华为战略方法论:BLM模型之市场洞察-五看工具篇(加餐)

欢迎大家继续来到华为战略方法论系列内容。 今天主要介绍一下市场洞察篇的延伸内容 —— 五看工具篇。 在BLM模型中&#xff0c;战略意图篇提到的愿景和目标能否实现&#xff0c;以及怎么实现呢&#xff1f; 要回答这个问题&#xff0c;你就需要从市场上去寻找依据。 企业需…

央国企数字化转型难在哪?为什么要数字化转型?

随着新一轮科技革命和产业变革深入发展&#xff0c;数字化成为央国有企业的必答题。 但就目前情况来看&#xff0c;央国有企业数字化转型还面临着许多挑战&#xff0c;必然是一个长期的过程。 01 央国企数字化转型难在哪&#xff1f; 根据调研数据&#xff0c;中央企业数字化…

linux修改ip地址详解

修改IP地址分为临时修改&#xff08;仍然属于动态分配&#xff09;&#xff0c;和永久修改&#xff08;设置静态ip&#xff09;。临时修改就是使用ifconfig命令直接修改&#xff0c;但是一段时间过后&#xff0c;或者重启又会动态重新分配。而永久修改则是直接将ip写在配置文件…

jenkins自动化部署

jenkins自动化部署 jenkins官网安装步骤 1. 安装环境 安装Java运行环境。Jenkins需要Java运行环境才能正常工作。您可以从Oracle官网下载Java运行环境并安装&#xff0c;或者使用您操作系统自带的Java运行环境。 sudo wget -O /etc/yum.repos.d/jenkins.repo \https://pkg.…

品牌在线上的困境

大家好&#xff01; 我是小鱼 目前&#xff0c;在我们国内 有很多品牌从传统的 门店转为线上经营 那是不是意味着 品牌公司要把自己 的实体门店都关了呢? 并不是那样的。 很多品牌实现了 线上门店和实体门店 相结合的方式来 改造升级的 那么他们是如何做到的呢&#xff1f; 对…

存储框架封装:LruCacheUtils+DiskLruCacheUtils+责任链设计模式+DeepLink

存储框架封装:LruCacheUtilsDiskLruCacheUtils责任链设计模式DeepLink 一.存储框架实现思路&#xff1f;1.缓存策略2.LRU算法3.LruCache内存缓存原理4.DiskLruCache磁盘缓存原理5.使用单例模式实现LRUCacheUtils5.使用单例模式实现DiskLRUCacheUtils 二.什么是责任链设计模式&a…

ASP.NET Core 使用Filter和Redis实现接口防重

背景 日常开发中&#xff0c;经常需要对一些响应不是很快的关键业务接口增加防重功能&#xff0c;即短时间内收到的多个相同的请求&#xff0c;只处理一个&#xff0c;其余不处理&#xff0c;避免产生脏数据。 这和幂等性&#xff08;idempotency&#xff09;稍微有点区别&am…

凌恩生物文献分享 | 16S全长扩增子+代谢组/转录组多组学!高分paper的绝佳拍档!

16S全长扩增子联合代谢组/转录组多组学研究&#xff0c;是目前微生态研究趋势。单一研究方法较难发表高水平文章&#xff0c;多组学关联研究逐渐成为“快速”发表高分paper的绝佳拍档&#xff01; 小编精心挑选了3篇医学微生态研究的高分文章&#xff0c;希望能帮助大家激发科…

二线程序员的出路

最近长沙不太平。去年被动离职一拨人之后&#xff0c;HR一直强调降本增效&#xff0c;人人自危&#xff0c;挤走一拨人&#xff0c;反正会有大量内卷失败的一线程序员进来填坑。当然留就有人走&#xff0c;前同事除了几个出去搞培训创业&#xff08;后面解散了&#xff09;的之…

chatgpt赋能Python-python_for_倒序

Python的倒序功能 - 从SEO角度分析 在Web开发中&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;是一个关键的指标。如果你的网站能够被搜索引擎高效地索引&#xff0c;它就会排在搜索结果的前面&#xff0c;带来更多的流量和曝光率。Python&#xff0c;作为一种广泛应用…

【LED子系统】七、触发器实现

个人主页&#xff1a;董哥聊技术 我是董哥&#xff0c;高级嵌入式软件开发工程师&#xff0c;从事嵌入式Linux驱动开发和系统开发&#xff0c;曾就职于世界500强公司&#xff01; 创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01; 文章目录…

探索未来:人工智能如何改变室内外设计

目录 注册&#xff1a; 使用RoomGPT进行室内和室外设计的步骤&#xff1a; 结果如下&#xff1a; RoomGPT是一款基于人工智能的设计工具&#xff0c;可以帮助专业人士和个人在几秒钟内生成照片般逼真的图像。以下是使用RoomGPT进行室内和室外设计的步骤&#xff1a; 注册&am…

聚观早报 | ChatGPT炒股回报率超500%;网易发布11新游戏

今日要闻&#xff1a;微信支付正式发布“微信刷掌”产品&#xff1b;ChatGPT炒股回报率超500%&#xff1b;网易发布11新游戏&#xff1b;国家超算中心发布中文大语言模型&#xff1b;B站试水付费专属视频 微信支付正式发布“微信刷掌”产品 5 月 21 日&#xff0c;北京轨道交通…

时序电路详解

1、什么是时序电路&#xff1f; 组合电路是根据当前输入信号的组合来决定输出电平的电路&#xff0c;换言之&#xff0c;就是现在的输出不会被过去的输入所左右&#xff0c;也可以说成是&#xff0c;过去的输入状态对现在的输出状态没有影响的电路。 时序电路和组合电路不同&…

「角」毫米波雷达前装增速放缓?哪些供应商位居TOP10

作为传统BSD&#xff08;盲区监测、并线辅助&#xff09;、DOW&#xff08;开门预警&#xff09;功能以及高阶智能驾驶的主要传感器之一&#xff0c;角&#xff08;盲区&#xff09;毫米波雷达在2022年实现了前装搭载的大幅增长。 高工智能汽车研究院监测数据显示&#xff0c;2…

Qt编写视频监控系统74-悬浮工具栏(半透明/上下左右位置/自定义按钮)

一、前言 在监控系统中一般在视频实时预览的时候&#xff0c;希望提供一个悬浮工具条&#xff0c;可以显示一些提示信息比如分辨率、码率、帧率&#xff0c;提供一堆快捷操作按钮&#xff0c;可以录像、抓拍、云台控制、关闭等操作&#xff0c;参考了国内很多监控厂商客户端软…