Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)

说明:本次流程功能是,我们只要上传代码到git平台后面就不用我们管了,jenkins就能自动将我们git原代码编译测试部署发布到生产环境,不用我们每次都自己打包jar包再拉到linux环境java -jar发布,因为经常改代码每次都这样非常麻烦的。整个部署过程分为三大步骤:安装中间件,配置环境,部署发布。以pipeline方式部署。

(有些东西知道的请随意,我是按照我的公司规范来的,请见谅 哈哈)

Linux系统先安装需要用到的中间件。我的是:Redis+MySQL+RabbitMQ+Nacos+fastDFS。

一  安装配置环境

1 Linux新建jenkins用户,设置密码,切换用户

useradd jenkins    

passwd jenkins    

su jenkins           

2 浏览器下载 tomcat.zip 和 jenkins.war  

https://tomcat.apache.org/      https://jenkins.io/download/  (拉到Linux的  /home/jenkins/ )

3  解压tomcat.zip,将tomcat里面webapps下文件全删除

unzip tomcat.zip                    

rm -rf ./tomcat/webapps/*

4 将jenkins.war复制到webapps下改名为ROOT

cp jenkins.war  ./tomcat/webapps/ROOT         

5 到root用户给jenkins用户添加执行权限

su root                 

cd /home/jenkins/tomcat/bin/                         

chmod o+x  ./*.sh  #给sh后缀文件其他组用户设置执行权限,要不然jenkins用户没权限开启tomcat

6 安装Maven:

将下载好的apache-maven-3.6.0拉到  /usr/local/

mv apache-maven-3.6.0 maven

cd /usr/local/maven/bin/   #到maven下载目录

chmod o+x   ./*    #设置执行权限,后面用到

编辑  /usr/local/maven/conf/settings.xml 

如果有配置路径就删掉,用默认路径就好,仓库可以用阿里云的或者你自己公司的:


        nexus-aliyun
        Nexus aliyun
        central
        https://maven.aliyun.com/repository/public
    

保存即可。

设置环境变量:

vim /etc/profile

export MAVEN_HOME=/usr/local/maven

export PATH=$MAVEN_HOME/bin:$PATH 

source /etc/profile

7 安装Git

whereis git  #查找Git路径,没安装过再安装
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum install git 

8 以jenkins用户打开jenkins

su jenkins

sh /home/jenkins/tomcat/bin/starup.sh

浏览器打开192.168.12.131:8080(端口你自己linux的 )如果jenkins页面出来就代表成功了。

Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第1张图片

复制浏览器显示的那串路径在linux查看 比如:less  /home/appuser/.jenkins/secrets/

出来一串hash值密码复制到浏览器登录即可。设置管理者用户和插件即可,我是下载推荐安装的插件。

进去后点击管理(设置)-全局工具管理-配置jdk,git,maven。到此安装配置步骤完成

   Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第2张图片Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第3张图片Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第4张图片

FAQ:

1、问题:第一次进入jenkins时显示离线;进去后插件下报红;下载插件全都安装失败。

解决方法:经我百度解决以上问题,有三个思路

1 如果进去jenkins插件下报红报错,将站点地址https改为http 即设置-插件管理-高级(第四个按钮)-最下面url改为http-下面提交-右下角立刻获取 即可

这样就不报红了正常了,但是我下载插件依然全部失败,开始下面的办法

2 如果刚进去显示离线,自己网络没问题前提下,那就是环境问题,经发现我的问题是版本问题,我用了tomcat10,jdk1.8.0_51,jenkins.war2.289.1,后来改tomcat8和jdk1.8.0_211重新部署正常了可以下载插件(我觉得大部门是版本不兼容问题)。

二 开始部署发布流程

其实到这里已经完成大半,剩下以自己方式简单部署就行,我是生产环境pipeline部署。

1 Jenkins新建流水线工程设置名字(你自己的项目服务名字) 如 base-service

Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第5张图片

2 顶部四大项设置:第一项General (打勾)

Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第6张图片

不允许并发构建
丢弃旧的构建 (分别输入:9  9)
当 master 重启后,不允许恢复流水线

3 第二项构建触发器:

Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第7张图片

轮询SCM (输入:* * * * *)

4 第三项高级项目选项:

Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第8张图片

(这个git地址是pipeline配置文件路径,下面有说这个文件,这里先说怎样搭。说明:这个gitlab用户要有上传的pipeline配置仓库权限以及java源代码仓库的权限,要不然部署测试会报没权限错误,当然给权限也行。我的意思是这个pipeline配置仓库账户要能有权限访问到java源代码仓库。一般情况下源代码是我们写的pipeline配置文件也是我们写的所以没问题,除非写代码和部署不同一个人不同一个gitlab)

先看看我的gitlab仓库pipeline配置文件路径():

Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第9张图片

再看怎样设置:Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第10张图片

说明 指定分支 我的是dev 所以写: */dev

源码库浏览器 自动(不用改)

脚本路径 自己dev下的路径 我的是:  poc/base-service/Jenkinsfile-poc  (dev节点到文件的路径)

5 点击保存,后点击立即构建,第一次会下载源代码和依赖比较久。测试发布部署完成。

Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第11张图片

我是向nacos注册的,所以服务列表有就代表也成功启动了

Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第12张图片

其实jenkins搭建还是比较简单的,重点是pipeline配置文件完成的编译打包部署工作的。

关于上传配置;关于配置文件内容

我简单说一下流程就是在电脑windous创建 poc/base-service/Jenkinsfile-poc 这样一个路径的这样一个文件上传到git 平台dev分支(文件可以在idea编辑)

git成品:Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第13张图片

配置文件内容-改几个地方:

node("master"){
	step([$class: 'WsCleanup'])

	// 1工程名(服务名)
	def project_name='base-service'
	// 2工程部署目标服务器ip(自己linux机器地址)
	def deploy_ip='192.168.12.131'
	// 3工程启动端口(这个无所谓)
	def port='8905'
	// 4环境(匹配nacos配置的那个dev)
	def env='dev'
	
	def config_uri='192.168.12.131:8848'
//5这里要改标识码和java源代码路径(f0c86d7-7d54-4f77-aedf-3fe43b51fbe和https://gitlab.citicgz.com/rmp-backend-poc/base-service.git)
	stage('Checkout') {
	    checkout([$class: 'GitSCM', branches: [[name: '*/poc']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'f0c86da7-7d54-4f77-aedf-31fe43b51fbe',url: 'https://gitlab.citicgz.com/rmp-backend-poc/base-service.git']]])
	}

//	stage('Code Check') {
    //        sh "sh scripts/checkstyle/checkstyle.sh"
//	}

	//stage('Unit Test') {
	//	    sh "sh scripts/build.sh"
	//}

    //stage('Unittest Coverage with SonarQube') {
        // Sonar单元测试覆盖率
       //def sonarqubeScannerHome = tool name: 'SonarQube Scanner'

        //withSonarQubeEnv('Sonarqube53') {
         //sh "${sonarqubeScannerHome}/bin/sonar-scanner"
        //}
    //}

	stage('Archive Artefact') {
 		    sh "mvn package -Dmaven.test.skip=true"

//6 这里要改自己的标识码(7d49d98-8e4a-4e5b-acb4-6e0b50910e7)
	withCredentials([usernamePassword(credentialsId:'7d49d98-8e4a-4e5b-acb4-6e0bb5010e7', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]){
	    stage("Deploy to $env") {
               sh "sshpass -p $PASSWORD ssh  $USERNAME@$deploy_ip \" rm -rf /home/$USERNAME/$project_name \" "
                sh "mkdir $project_name" 
                sh "cp ./target/*.jar $project_name"
                sh "cp ./scripts/startup.sh $project_name"
                sh "tar -cvf $project_name'.tar' $project_name "
                sh "sshpass -p $PASSWORD scp $project_name*.tar  $USERNAME@$deploy_ip:/home/$USERNAME/ "
                sh "sshpass -p $PASSWORD ssh  $USERNAME@$deploy_ip \"cd /home/$USERNAME;tar -xvf $project_name*.tar  \" "
                sh "sshpass -p $PASSWORD ssh  $USERNAME@$deploy_ip \"cd /home/$USERNAME;rm -f $project_name*.tar  \" "
                withEnv(['JENKINS_NODE_COOKIE=dontKillMe']) {
                    sh "sshpass -p $PASSWORD ssh  $USERNAME@$deploy_ip \"cd /home/$USERNAME/$project_name; chmod +x startup.sh;/bin/bash -l startup.sh $env $port $config_uri \" "
                }
	    }
	}
}

修改:改自己注册中心 IP端口,nacos新建dev后缀的配置文件base-service-dev.propertiesJenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第14张图片

问题5 的标识码是gitlab这个用户的,在jenkins-设置-密码凭证-这一长串乱码就是标识码 复制粘贴进配置文件问题5那个标识码,改一下后面路径 是我们上传的java源代码的gitlab地址(这个git用户能访问到这个源代码以及配置文件)

Jenkins+Maven+Git自动部署流程(从环境搭建到部署超级全面)_第15张图片


问题6 的标识码密码是 要发布的目标服务器用户的标识码,例如发布到linux 的appuser用户,jenkins页面添加一个用户,名字为appuser,密码是这个用户的密码,密码和linux一致。他会作为变量传过去远程连接远程拷贝。然后看它的标识码复制过去。


 

FAQ:遇到的几个坑

1 问题:部署控制台报错 ERROR: Error cloning remote repo 'origin'

解决:

Jenkins全局工具指定Git安装路径不正确,改为自己下载的路径地址。也可能是我git账号只有配置文件权限没有源代码git仓库的权限(因为源代码不是我写的所以不同一个gitlab),解决是jenkins添加一个用户,该用户有我gitlab配置中心的权限和也有上传的java源代码git的权限。

2 部署控制台报错,报 Permission denied 没有权限 说明执行脚本的时候jenkins使用的用户没有对应文件的权限.

解决: 

 1)不建议的方式 chmod 777
 2)让jenkins以root或对应用户执行 例如修改Jenkins配置文件 JENKINS_USER="root"
 3)以root用户进入tomcat的bin目录 给jenkins用户添加相应文件的权限 

cd /home/jenkins/tomcat/bin/

chown a+x *.sh 

cd /usr/local/maven/bin/

chown a+x ./*

3 Jenkins启动项目报错

用ss -lntp|grep 8905查看服务是否起来,起来了但是nacos没发现,查看cd /home/appuser/base-service/logs/ logs日志没有java启动日志说明启动报错了,杀死进程再手动启动查看是什么错;发现rabbitmq没有权限,是配置rabbitmq admin用户时没有给足够权限,解决是改rabbitmq

# 创建超级管理员用户
rabbitmqctl add_user admin yourPassword
# 赋予administrator角色给超级管理员用户
rabbitmqctl set_user_tags admin administrator
# 赋予超级管理员用户权限
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'

4 关于其他问题

关于配置环境时的错误百分之70都是版本问题,我试过jdk问题,改了1.8其他版本,tomcat问题,降低使用版本,maven问题 降低使用版本。第一次写的不好有问题各位大佬多多保函,哈哈

你可能感兴趣的:(linux,tomcat,maven,jenkins,git)