持续集成(svn+maven/nodejs+tomcat+jenkins)(一)

1、持续特点:

  • 频繁发布
  • 自动化流程
  • 可重复
  • 快速迭代

2、持续集成目的:

团队多人协作开发,每个人都可独立提交代码,持续集成可通过自动构建(包括编译,发布,自动化测试)来验证,从而迟早地发现集成错误。

3、持续集成工具:

代码管理工具->SVN、打包编译工具->maven[nodejs]、自动发布工具jenkins、代码静态扫描->sonar、自动检测工具(单元测试框架Java 开发的 JUnit)
基础技术:

4、持续集成部署图:

持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第1张图片

5、安装配置部署

5.1、sonarqube、tomcat及jenkins安装配置

jdk下载:https://www.oracle.com/java/technologies/downloads/archive/ (当前案例下载的是jdk-8u261-linux-x64.tar.gz版本)
sonarqube下载:https://www.sonarqube.org/downloads/ (当前案例下载的是sonarqube-6.7.7.zip版本)
sonar-scanner下载:https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/ (当前案例下载的是sonar-scanner-cli-3.3.0.1492-linux.zip)
tomcat 下载:https://tomcat.apache.org/ (当前实例下载的是apache-tomcat-8.5.72.tar.gz)
jenkins下载:http://updates.jenkins-ci.org/download/war/ (当前实例下载的是2.315)
nodejs下载:https://nodejs.org/en/download/ (本案例中使用的是12.1.版本)14.18.1版本)

5.1.1、jdk安装配置

5.1.1.1 #检查服务器是是否安装了OpenJDK

yum list installed |grep java

或是

rpm -qa |grep jdk

如果安装可以使用命令:

yum -y remove jdk-package-name

或是

rpm -e jdk-package-name

5.1.1.2 #把下载的jdk-8u261-linux-x64.tar.gz包上传到服务器并解压到指定目录/usr/local/java下

tar -zxvf jdk-8u261-linux-x64.tar.gz -C /usr/local/java

5.1.1.3 #配置JDK环境变量

echo '''

#JDK全局变量配置
export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin
''' >> /etc/profile

5.1.1.4 #环境变量立即生效

source /etc/profile

5.1.1.5 #检查JDK环境变量是否生效

#java -version

java version “1.8.0_261”

Java™ SE Runtime Environment (build 1.8.0_261-b12)

Java HotSpot™ 64-Bit Server VM (build 25.261-b12, mixed mode)

5.1.2、sonarqube安装配置

5.1.2.1 安装前准备操作

#-------创建目录、用户、用户组及分配权限-------------------

mkidr web #创建目录:web
cd web	#进入安装目录
unzip sonarqube-6.7.7.zip	#解压上传文件
groupadd sonarqube	#创建sonarqube组
useradd sonarqube -g sonarqube -p sonarqube	#创建一个用户名为sonarqube密码为sonarqube属于一sonarqube组的用户
chown -R sonarqube:sonarqube /web/sonarqube-6.7.7	#为该用户分配文件夹权限

#-----------------在mysql创建持久化数据库----------------------------------

mysql> create database sonar default character set utf8;	-- 创建数据库sonar
mysql>creat user sonar@"%" identified by "Sonar9.1";	-- 创建用户sonar,密码为Sonar9.1
mysql> grant all privileges on sonar.* to sonar;	-- 给用户sonar分配sonar数据库操作权限
mysql>flush privileges;	-- 刷新权限
mysql> update mysql.user set authentication_string=password('Sonar9.1') where user='sonar' and host='%'; 	-- 修改用户密码

5.1.2.2 编辑配置文件操作

vi /web/sonarqube-6.7.7.zip/conf/sonar.properties
#设置jvm使用的内存大小,Xms最小使用内存,Xmx最大使用内存,可以根据实际情况自行设置,我目前的系统运行内存为8G
sonar.web.javaOpts=-server -Xms1G -Xmx1G -XX:+HeapDumpOnOutOfMemoryError

#配置持久化数据库的账户密码
sonar.jdbc.username=sonar
sonar.jdbc.password=Sonar9.1

#配置url,我此处使用的mysql, 7.1版本后不再支持mysql
sonar.jdbc.url=jdbc:mysql://172.16.20.51:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false

5.1.2.3 配置启动参数

vim /web/sonarqube-6.7.7/bin/linux-86-64(此处根据系统内存自行选择)/sonar.sh

修改RUN_AS_USER=sonarqube
即我们之前创建的用户

#下面设定访问网址为 http://centos:9000/sonar

sonar.web.host=172.16.20.51
sonar.web.port=9000

sonar.web.context=/sonar

5.1.2.4 启动sonarqube

#先切换到sonarqube用户

su sonarqube

#执行启动命令

cd /web/sonarqube-6.7.7/bin/linux-86-64/
sh sonar.sh start

附sonar启动命令:

sh sonar.sh start #启动sonar
sh sonar.sh stop #安全停止sonar
sh sonar.sh console #控制台启动sona

r

#查看日志

cd ../../logs

日志分为sonar.log,es.log,web.log,若不明原因启动失败,可依次查看这几个日志。
启动后,若日志文件均无报错,即可访问http://localhost:9000/sonar,若顺利,则会出现如下界面

启动时报错(原因:版本不兼容,因当前系统已经安装有jdk1.8,所以sonar版本由9.1降低到6.7.7版本):
现象一:
Launching a JVM…
JVM exited while loading the application.
Unrecognized option: --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
JVM Restarts disabled. Shutting down.
<-- Wrapper Stopped
现象二:
–> Wrapper Started as Daemon
Launching a JVM…
Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
Copyright 1999-2006 Tanuki Software, Inc. All Rights Reserved.

WrapperSimpleApp: Unable to locate the class org.sonar.application.App: java.lang.ClassNotFoundException: org.sonar.application.App

WrapperSimpleApp Usage:
java org.tanukisoftware.wrapper.WrapperSimpleApp {app_class} [app_arguments]

Where:
app_class: The fully qualified class name of the application to run.
app_arguments: The arguments that would normally be passed to the
application.
<-- Wrapper Stopped

5.1.2.5 登录验证查看sonar服务平台

在浏览器输入“http://172.16.20.51:9000/sonar”默认用户名密码是“admin/admin”
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第2张图片
用户名密码(admin/admin)登录
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第3张图片
Administration->Marketplace->搜索“chinese”->Install ,安装汉化插件
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第4张图片
如果出现“Error while downloading plugin ‘l10nzhtw’ with version ‘1.0’. No compatible plugin found.”错误,那说明版本不兼容,可到网上查找对应版本的插件放到…/…/extensions/plugins目录下,重新启动sonar服务【使用命令…/…/sonar.sh start 也可以通过页面操作“配置->系统->重启服务器”】,即可生效。但如果安装的插件比当前版本低的话,会出现部分显示还是英文。
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第5张图片

上图为安装了插件“sonar-l10n-zh-plugin-1.10.jar”,但sonarqube6.7.7版本对应的汉化插件版本是sonar-l10n-zh-plugin-1.19.jar。下图为更新插件后的显示。
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第6张图片

5.1.3、sonar-scanner安装配置

上传sonar-scanner-cli-3.3.0.1492-linux.zip到服务器并解压到指定目录/web/下

unzip sonar-scanner-cli-3.3.0.1492-linux.zip -d /web/

5.1.3.1)修改配置文件

vi sonar-scanner-3.3.0.1492-linux/conf/sonar-scanner.properties

#----- sonar服务url及登录的用户名密码信息,为保证安全也可以用令牌登录

sonar.host.url=http://172.16.20.51:9000\/sonar
sonar.login=3e83c03c0946102e0106386e7716392293c33625
#sonar.login=admin
#sonar.password=admin

#----- Default source code encoding

#sonar.sourceEncoding=UTF-8

#项目配置sonar.projectKey在sonar中唯一值

sonar.projectKey=demo

#sonar.projectName在sonar中项目显示的名字

sonar.projectName=HelloWorld
sonar.projectVersion=1.0

#扫描代码的路径,如果配置文件在项目中可以是相对路径,如果在sonar-scanner的conf中刚是绝对路径

sonar.sources=/root\/demo\/src

#扫描代码编译存放的路径

sonar.java.binaries=target\/classes

5.1.3.2)配置环境变量

echo '''

#sonar-scanner全局变量配置
export SONAR_RUNNER_HOME=/web/sonar-scanner-3.3.0.1492-linux
export PATH=$PATH:$SONAR_RUNNER_HOME/bin
''' >>/etc/profile

5.1.3.3 环境变量立即生效

source /etc/profile

5.1.3.4 验证安装配置是否成功

sonar-scanner

5.1.3.5 配置项目,

配置文件sonar-scanner.properties要放在扫描代码的要目录下.

#配置sonar登录可以用用户名密码[也可用令牌sonar.login=token令牌]
sonar.login=admin
sonar.password=admin

#下面设定访问网址为 http://centos:9000/sonar
sonar.web.host=172.16.20.51:9000/sonar

#sonar的项目关键字
sonar.projectKey=demo

#在sonar上显示的项目名称
sonar.projectName=demo

#在sonar上显示的版本号
sonar.projectVersion=1.0

#包含pom.xml的maven项目相对目录
sonar.sources=src

#java编译后的文件目录
sonar.java.binaries=target/classes

5.1.3.6 可以当前代码目录下执行代码扫描

sonar-scanner

在sonar服务平台上查看扫描结果:
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第7张图片

5.1.3.7 在sonar服务平台上生成令牌

如果项目配置中使用的是令牌,则需要在sonar服务平台上生成令牌。
登录账号右键->我的账号->安全->输入生成新令牌令牌如“aa”点击生成->复制,新生成的令牌如aa的令牌是“fad3cd550c27c1fe225332ca5b96c9ae9eab878a”,则复制令牌到配置文件的“sonar.login=fad3cd550c27c1fe225332ca5b96c9ae9eab878a”即可,一旦离开此页面则自成的令牌就不可见

持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第8张图片
出现的问题:
ERROR: SonarQube server [http://172.16.20.51:9000] can not be reached
原因:地址配置不对,服务器的url地址为http://172.16.20.51:9000/sonar,而sonar-scanner.properites里配置的url缺省了"sonar".
解决方法:把url地址修改为“http://172.16.20.51:9000/sonar”即可。

注意事项,执行扫描代码的路径及项目代码的路径。执行时优先使用环境变量里的配置文件即%SONAR_RUNNER_HOME%conf/下的sonar-scanner.properties的配置文件,如果没有再使用当前执行目录下的配置文件。

5.1.4、tomcat安装配置

注意,tomcat不要使用最新版本,否则会出现与jenkins版本不兼容容器启动失败的问题。当前使用的是tomcat8版本。

5.1.4.1)上传并解压文件到指定的目录下,并重名命为jenkins文件夹。

tar -zxvf apache-tomcat-8.5.72.tar.gz -C /usr/local/
mv apache-tomcat-8.5.72 jenkins

5.1.4.2)启动项配置,因服务器已经运行的有tomcat项目,为不影响其他项目正常运行,所以重新启动了一个tomcat。这就需要对新的启动项进行配置。修改…/bin/catalina.sh

添加jdk路径及tomcat启动文件的路径:

export JAVA_HOME=/usr/local/java
export JAVA_BIN=$JAVA_HOME/bin
export PATH=$PATH:$JAVA_HOME/bin
export CATALINA_HOME=/usr/local/jenkins

5.1.4.3)为确保启动时端口不冲突还需要修改…/conf/server.xml 文件

"8890" shutdown="SHUTDOWN">  
"8888" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

#Server port 服务端口,Connector port客户端访问端口。

5.1.4.4)启动并验证是否正常

#先修改执行文件的权限,否则会启动失败

chmod +X  /usr/local/jenkins/bin/*.sh

#启动tomcat

cd /usr/local/jenkins/bin
./start.sh

5.1.4.5)验证是否正常,在浏览器输入“http://172.16.20.51:8888/jenkins”,出现下面界面表示启动正常。

持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第9张图片

5.1.4.6)、为了在jenkins中能自由发布到本地的tomcat,需要修改tomcat的配置文件…/conf/tomcat-users.xml,添加如下信息:

<tomcat-users>
<role rolename="tomcat"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user name="tomcat" password="tomcat" roles="tomcat,admin-gui,admin-script,manager,manager-gui,manager-script,manager-jmx,manager-status" />
tomcat-users>

注:如果tomcat是8+版本的,还需要在…/conf/Catalina/localhost,创建manager.xml文件,内容:


<Context privileged="true" antiResourceLocking="false"
         docBase="${catalina.home}/webapps/manager">
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="^.*$" />
Context>

5.1.5、jenkins安装配置

因前面已经安装了tomcat,所以jenkins安装配对比较简单了。

5.1.5.1)上传文件jenkins.war到tomcat的webapp目录下,重新启动tomcat即可

5.1.5.2)在浏览器输入“http://172.16.20.51:8888/jenkins”,出现如下界面表示正常

持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第10张图片
使用此命令“tail -n 200 …/logs/catalina.out”在tomcat的日志文件中查看输出日志即下图中信息“aa18093a36614952bf67c3d486c90c30”
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第11张图片
下一步,自动安装推荐的插件
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第12张图片
按照提示进行下一步操作直到完成。

5.1.5.3)jenkins插件安装

svn插件:搜索“Subversion”,选中后选安装最后一起启动jenkins所以点击“Install without restart”
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第13张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第14张图片
maven插件:搜索“maven”,选中后选安装最后一起启动jenkins所以点击“Install without restart”
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第15张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第16张图片
sonar插件:搜索“sonar”,选中"SonarQube Scanner"后选安装最后一起启动jenkins所以点击“Install without restart”
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第17张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第18张图片

yum install subversion -y

NodeJs插件:搜索“node”,选中"NodeJs"后选安装最后一起启动jenkins所以点击“Install without restart”
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第19张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第20张图片

6、jenkins创建mvn工程

新建任务->创建一个自由风格的软件项目
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第21张图片
源码管理选择subversion
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第22张图片
添加svn账号,Local module directory 选择当前目录".“此目录为jenkins空间任务的相对目录,如空间目录为”/root/.jenkins/jobs/mvn-bpc/workspace",Repository depth 选择“infinity”默认的就行全量更新。
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第23张图片

第一次构造要Check-out Strategy 要选择“Always check out a fresh copy”,否则会报错
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第24张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第25张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第26张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第27张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第28张图片

#!/bin/bash
echo "重命名war包名"
mv ${WORKSPACE}/bpc-core/target/bpc-core-0.0.1-SNAPSHOT.war ${WORKSPACE}/bpc-core/target/bpc.war
echo "复制war包"
cp -f ${WORKSPACE}/bpc-core/target/bpc.war /app/home/bpc/apache-tomcat-8.0.53/webapps/bpc.war
wait
#停止中台服务
bpc_pid=`ps -ef | grep "home/bpc/apache-tomcat-8.0.53" | grep -v grep | awk '{print $2}'`
for id in $bpc_pid
do
	kill -9 $id
    echo "killed pid=$id"
done
echo "执行tomcat启动shell"
export BUILD_ID=dontkillMe
sh /app/home/bpc/apache-tomcat-8.0.53/bin/startup.sh

7、jenkins创建nodejs工程

在jenkins里配置nodejs的全局变量
系统管理->系统配置->全局属性“环境变量”增加NODE_HOME的环境变量
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第29张图片
系统管理->全局工具配置->NodeJS
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第30张图片
创建工程任务
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第31张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第32张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第33张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第34张图片
持续集成(svn+maven/nodejs+tomcat+jenkins)(一)_第35张图片

# 查看版本信息
npm -v
# 解决存放在Github上的sass无法下载的问题
SASS_BINARY_SITE=https://npm.taobao.org/mirrors/node-sass/ npm install node-sass
# 将镜像源替换为淘宝的加速访问
npm config set registry https://registry.npm.taobao.org
# 安装项目依赖
npm install
# 项目打包
npm run build
# 备份原执行文件
mv /app/home/bpc/apache-tomcat-8.0.53/webapps/ROOT /app/home/bpc/apache-tomcat-8.0.53/webapps/ROOT`date +%Y%m%d%H%M`
#一定要加上export BUILD_ID,否则会中断shell执行,看似返回结果是成功的,实际上shell执行被中断并没有真正执行生效。
export BUILD_ID=node-bpc
# 复制打包文件到执行目录下
cp -rf ${
     workspace}ROOT /app/home/bpc/apache-tomcat-8.0.53/webapps/

# 恢复以前执行的配置
cp -f /app/home/bpc/apache-tomcat-8.0.53/webapps/serveUrl.yml /app/home/bpc/apache-tomcat-8.0.53/webapps/ROOT

注:如果工程中某些文件中的配置参数需要修改,可以用sed,添加到shell脚本中,如修改工程项目下的package.json文件中的vue-router版本号:由3.0.7改为3.5.2。这个根据具体项目来定。

sed -i "/vue-router/[email protected]@3.5.2@" package.json 

你可能感兴趣的:(管理工具,自动化,jenkins,ci,DevOps)