Jenkins安装部署以及打包部署Maven项目,使用pipline部署多台服务等

持续集成环境Jenkins安装

  1. 安装JDK 请自行安装

  2. 获取jenkins安装包, jenkins下载地址 由于我的服务器是centos7.6, 这里我们选择LTS长期支持版在这里插入图片描述

  3. 将安装包jenkins-2.235.1-1.1.noarch.rpm上传到服务器,进行安装rpm -ivh jenkins-2.235.1-1.1.noarch.rpm

  4. 修改jenkins配置 vi /etc/syscofig/jenkins 修改 JENKINS_PORT="8888"

  5. 启动jenkins

    systemctl start jenkins

  6. 打开浏览器进行访问 192.168.1.1:8888

  7. 根据提示获取密码并输入在这里插入图片描述

  8. 插件安装 建议新手直接安装推荐的插件

  9. 添加管理员账户,并进入Jenkins后台在这里插入图片描述
    邮箱随便填,记住用户名和密码就行
    10.保存并完成

Jenkins插件安装

点击->系统管理->插件管理 可以安装相关插件
若后面发现有些模块我有而你没有很可能是你没安装某个插件,请根据你的需求自行查询相关插件安装
在这里插入图片描述
控制台输出颜色显示
AnsiColor: 可以让你控制台输出颜色显示
在这里插入图片描述
Environment Injector Plugin : 环境变量输入

Extended Choice Parameter Plug-In : 变量可选择输入
在这里插入图片描述
Git Parameter Plug-In : git参数选择
在这里插入图片描述

Localization: Chinese (Simplified) : 中文语言包
在这里插入图片描述
Maven Integration plugin : 建立maven任务必备
在这里插入图片描述
Pipeline:构建pipline任务必备
在这里插入图片描述
Publish Over SSH: 远程传输文件以及执行shell命令,建议安装
在这里插入图片描述

SSH plugin: 远程执行shell
在这里插入图片描述

ThinBackup : 自动备份jenkins

Jenkins环境设置及部分插件的使用

凭据

点击左侧凭据->下拉菜单中点击系统->右侧出现全局凭据->点击全局凭据
->点击左侧添加凭据
在这里插入图片描述
在这里插入图片描述
凭证类型有多种,根据自己需要选择.我这里选择的是Username with password
以gitlab账号为例,输入gitlab的账号和密码, ID需要唯一,可以输入或者等待jenkins自动生成
在这里插入图片描述

Publish over SSH

配置远程发布的服务器
点击系统管理->点击系统配置->找到Publish over SSH
在这里插入图片描述
Name:随意填写,作为远程SSH Server的标识
Hostname:请填写你远程服务器的IP
Username:远程服务器的账号
Remote Directory: 传输文件的目录
Passphrase / Password: 服务器账户的密码
填写完后可以点击 Test Configuration查看是否联通

SSH remote hosts

远程执行Shell的SSH site 配置
在这里插入图片描述
Hostname: 远端服务器IP
Port: 端口号 默认22
Credentials: 凭证 在之前的凭证处配置 远端服务器的登录账号和密码.配置后选择
点击Check connection 成功显示Successfull connection

JDK配置

java安装略.
Jenkins->Global Tool Configuration(全局工具配置)->JDK->新增JDK,配置如下:
在这里插入图片描述

Maven配置

maven安装略.
Jenkins->Global Tool Configuration(全局工具配置)->Maven->新增Maven,配置如下:
在这里插入图片描述
配置大概就告一段落,如果有问题请留言.

构建Maven项目

		该示例仅作为入门示范,更详细的可用于生产环境的, 请参考pipeline章节
1. 点击新建任务, 选择构建一个maven项目, 点击左下角 OK

在这里插入图片描述

2. 点击左侧配置

在这里插入图片描述
丢弃旧的构建:不解释了
参数化构建过程:根据自己的需求是否启用, 比如这里我添加了字符参数profile_name, 默认值prod.那么我构建的时候,点击build with Parameters出现参数选项在这里插入图片描述
那profile_name参数可以以{profile_name}的形式在jinkens执行命令的过程中使用

添加源码地址 URL: 你的源码库地址 ,Credentials凭证.可以在凭据里面添加. 或者使用SSH秘钥的方法,在jenkins服务器上面安装git 并生成ssh公钥, 然后进入gitlab或者github的设置添加公钥.
在这里插入图片描述
构建触发器: 根据自己需求选择启用. 比如定时构建(可以点击右侧问号, 有规则说明) ,Build when a change is pushed to GitLab(需要在gitlab上启用webhook, 并填写地址等)
在这里插入图片描述
构建环境:比如我这里勾选了Color ,用于后面控制台输出的时候显示颜色, 其余选项jenkins也都说的很详细.
在这里插入图片描述
在这里插入图片描述
Build: 构建的命令 相当于mvn clean -P ${profile_name} -q deploy -Dmaven.test.skip=true,( p r o f i l e n a m e 前 面 环 境 参 数 设 置 ) P o s t S t e p s : 这 里 我 选 择 的 是 只 有 构 建 成 功 才 会 执 行 的 步 骤 . 点 击 a d d p o s t − b u i l d s t e p 增 加 步 骤 选 择 S e n d f i l e s o r e x e c u t e c o m m a n d s o v e r S S H . 构 建 成 功 后 传 输 文 件 及 远 程 执 行 命 令 . 下 面 逐 项 说 明 : N a m e : 在 P u b l i s h o v e r S S H 插 件 中 配 置 s s h s e r v e r 中 的 n a m e , 插 件 根 据 这 个 名 字 找 到 你 配 置 的 服 务 器 信 息 S o u r c e f i l e s : 资 源 文 件 s p r i n g b o o t 项 目 打 包 后 的 j a r 包 路 径 , 通 常 位 于 t a r g e t / 目 录 下 . 如 果 是 模 块 化 项 目 比 如 ! [ 在 这 里 插 入 图 片 描 述 ] ( h t t p s : / / i m g − b l o g . c s d n i m g . c n / 20200710165020245. P N G ) 那 么 为 m o d e l n a m e / t a r g e t / ∗ . j a r 这 里 可 以 填 ∗ . j a r 或 者 你 具 体 的 x x x . j a r R e m o v e p r e f i x : 移 除 前 缀 R e m o t e d i r e c t o r y : 该 插 件 远 程 传 输 资 源 文 件 的 目 的 路 径 . 前 面 P u b l i s h o v e r S S H 插 件 中 填 写 了 R e m o t e d i r e c t o r y : / h o m e 那 么 这 里 传 输 到 你 目 标 服 务 器 的 地 址 为 / h o m e / x x x / t e m p E x e c c o m m a n d : 在 远 程 服 务 器 上 执 行 命 令 ( p s : 这 里 用 到 的 脚 本 会 在 后 面 p i p e l i n e 章 节 给 出 ) c d / h o m e / x x x / {profile_name}前面环境参数设置) Post Steps: 这里我选择的是只有构建成功才会执行的步骤. 点击add post-build step 增加步骤 选择Send files or execute commands over SSH. 构建成功后传输文件及远程执行命令. 下面逐项说明: Name: 在Publish over SSH插件中配置ssh server中的name, 插件根据这个名字找到你配置的服务器信息 Source files : 资源文件 springboot项目打包后的jar包路径,通常位于target/目录下. 如果是模块化项目比如![在这里插入图片描述](https://img-blog.csdnimg.cn/20200710165020245.PNG)那么为model_name/target/*.jar 这里可以填*.jar或者你具体的xxx.jar Remove prefix: 移除前缀 Remote directory : 该插件远程传输资源文件的目的路径. 前面Publish over SSH插件中填写了 Remote directory: /home 那么这里传输到你目标服务器的地址为 /home/xxx/temp Exec command: 在远程服务器上执行命令 (ps:这里用到的脚本会在后面pipeline章节给出) cd /home/xxx/ profilename)PostSteps:.addpostbuildstepSendfilesorexecutecommandsoverSSH..:Name:PublishoverSSHsshservername,Sourcefiles:springbootjar,target/.![](https://imgblog.csdnimg.cn/20200710165020245.PNG)modelname/target/.jar.jarxxx.jarRemoveprefix:Remotedirectory:.PublishoverSSHRemotedirectory:/home/home/xxx/tempExeccommand:(ps:pipeline)cd/home/xxx/{project_name} // 首先切换到工作的目录
./backup.sh || true //执行备份脚本, 在命令后面添加’|| true’, 意思是无论是否该命令执行成功都继续往下 面执行
mv /home/xxx/temp/*.jar ./ //从临时文件夹移到到当前目录
./stop.sh ${project_name} //根据项目名停止java进程
./start.sh ${project_name} //启动jar包 , ${project_name} 作为参数参入脚本执行
在这里插入图片描述

参数配置完成,点击保存

点击 Build with Parameters 开始构建
右下角 Build History 可以看到构建进度 , 点击进去再点击Console Output 查看构建控制台输出
在这里插入图片描述

构建pipeline项目部署项目到多台服务器

 	构建Job部署项目到多台服务器,并且可以选择相关参数例如git地址,分支,服务器地址等

新建任务选择流水线在这里插入图片描述
点击配置
点击参数化构建->点击添加参数->git参数
在这里插入图片描述
名称BRANCH作为后面使用的环境变量
默认值master分支
参数类型 分支 (还可以向tag等)
已选值: 选择default 这样构建的时候默认选中 默认值master

继续添加参数 ->点击Extended Choice Parameter 增加可选的参数列表
在这里插入图片描述
定义ips 需要发布的服务器地址使用 ","分割

下面继续定义了一些字符参数
在这里插入图片描述
对, 上面定义的service_name, 在下面project_name中就可以使用
在这里插入图片描述
流水线配置
在这里插入图片描述
对你没看错,就已经配置完成了.你可以build了.
好了,不开玩笑了. 你可能好奇一些关键的构建步骤去哪里了. Jenkinsfile就是其中的奥秘所在.但是在我告诉你Jenkinsfile之前,还是细说下上图的插件的用处.
SCM 选择Git表名我们是通过git拉取Jenkinsfile文件
Repository URL : 拉取jenkinsfile 的git地址 (比如我们可以单独创建一个git库用于存放我们的jenkinsfile文件)
指定分支: 你准备从哪个分支上面拉取jenkinsfile
脚本路径: 关键点 请看图 这是我截取的gitlab上的图. 我目前是放在工程的根目录下面后期可能会单独建立git库存放
在这里插入图片描述

Jenkinsfile

来一起看看Jenkinsfile文件. 目前我使用的vscode编写,主要可以有代码美观. 如果有其他更好的编辑工具希望大家可以告诉我.

pipeline {
   agent any
    environment {
        // Server IP list
        ipList = "$ips"
    }
    parameters {
    	//git拉取参数设置 从origin/(.*)过滤 , 默认值为master, 参数名称BRANCH
      gitParameter branchFilter: 'origin/(.*)', defaultValue: 'master', name: 'BRANCH',selectedValue: 'DEFAULT', sortMode: 'DESCENDING_SMART', type: 'PT_BRANCH'
   }
   //开始打包
   stages {
      stage('Build') {
         steps {
            // 从git拉取代码, 填写凭证, url地址,选择分支
            git branch: "${params.BRANCH}", changelog: false, credentialsId:"${credentials_id}" , poll: false, url: "${git_url}"

            // 拉取代码后 执行mvn命令
            sh "mvn clean -P ${mvn_param} -q deploy -Dmaven.test.skip=true"
         }

         post {
         	//成功后打包, 使用pipeline若要打包存放jar, 这不可以缺少
            success {
               archiveArtifacts '**/target/*.jar'
            }
        }
      }
		//开发发布到远程服务器
      stage('Deploy') {
            steps {
            //使用ansiColor 目的是控制台能有颜色的输出,便于观察
                ansiColor("xterm") {
                    script{
                        script{
                        //通过',' 分割ipList 得到多台服务器地址
                        for (item in ipList.tokenize(',')){
                        //传输文件到远程目录, 执行脚本 , 注意这里面的变量需要使用"""params"""括起来
                        sshPublisher(publishers: [sshPublisherDesc(configName: item , transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: """cd /home/your/your/${service_name} //切换到工作目录
                          ./backups/clean.sh || true  //清除多余的备份
                          ./backup.sh || true  //开始备份
                          mv /home/your/temp/${service_name}/*.jar  /home/your/your/${service_name} //移到jar到工作目录
                          ./stop.sh ${project_name} //停止原来的项目
                          BUILD_ID=DONTKILLME  //在pipeline中应该是无效的,但是我没有测试 本意是防止jenkins执行完后kill掉启动的jar进程
                          ./start.sh  ${service_name} ${project_name}""", //执行启动脚本
                         execTimeout: 120000, flatten: false, makeEmptyDirs: true, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: """/your/temp/${service_name}""", remoteDirectorySDF: false, removePrefix: """${project_name}/target/""", sourceFiles: """${project_name}/target/*.jar""")], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])     
                          }   
                        }                    
                    }
           
                }
            }  
      }
   }   
}

注意为了方便大家理解 我在脚本中使用 "//"进行解释 ,若需要测试这个脚本 ,请自行删掉我的解释
好了大功告成了.点击Build with Parameters
在这里插入图片描述
脚本地址: 添加链接描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值