使用jenkins进行项目的自动构建部署

 

jenkins 简介

  • Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括:持续的软件版本发布/测试项目和监控外部调用执行的工作。
  • 官网地址地址: https://jenkins.io

下载安装启动

CentOS 下用yum进行安装启动

# 先更新源再安装最新版 jenkins
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
sudo yum install jenkins
# 启动
sudo service jenkins start
# 停止
sudo service jenkins stop
# 重启
sudo service jenkins restart
# 检查
sudo chkconfig jenkins on

下载war包放到tomcat中启动

  • 服务器 yum 安装速度太慢了,最终我选择了这种方式,本地下载好war包传到服务器上的tomcat容器下,然后启动
  • 下载地址:http://mirrors.jenkins.io/war-stable/latest/jenkins.war

初始化

  • 在浏览器中输入url打开jenkins的后台控制页面

    初始化界面
  • 初始化成功后会自动生成一个管理员密码放到指定位置,根据页面提示复制密码粘贴到输入框就可以登录了

    初始登录界面
  • 登录成功后回让你选择插件的安装,可以选择建议的安装也可以自己进行选择,不清楚的话可以使用建议的安装

    初始登录界面
  • 由于建议安装的插件比较多,安装的过程有点慢,多等待一会

    初始登录界面
  • 安装的过程也可能因为网络等一些原因安装会失败,现在可以无视它,点击Continue,后面再进行手动的安装

    安装完成
  • 安装完成后最好新创建一个管理员账户代替之前的临时自动生成的密码账户

    创建新的管理员账户
  • 初始化完成,进入后台管理界面

    初始化完成


    后台管理界面

安装插件

  • 之前初始化的时候,有些插件安装失败,可以在用到的时候来手动修复它,没用到的话就可以暂且不理它,不影响jenkins的使用
  • 点击左侧边栏的“系统管理”,就可以看了插件安装的一些错误信息

    插件错误信息
  • 在“系统管理”中往下拉,找到“管理插件”点击进去就可以查看和管理所有的插件,点击“可选插件”显示所有jenkins支持的插件,在右上角的“过滤”输入框中,输入需要安装的插件名就可以筛选查找到想要的插件

    查找插件
  • 选中要安装的插件输入框,点击安装就可以在线安装需要的插件,当然由于网络的原因也可能再次安装错误,或者安装的比较慢。我们可以点击插件名进入插件的主页,里面有该插件的详细信息并能下载hpi文件进行手动安装

    插件详情
  • 在“管理插件”的页面中点击高级选项,我们可以在下面找到“上传插件”,上传下载好的插件,点击“上传”,系统就会自动上传安装该插件。

    上传插件

gitlab的配置

  • 集成gitlab,让jenkins能够直接读取修改gitlab中的代码,方便项目的构建
  • 安装gitlab-plugin
  • 在“系统管理” -> “系统设置“ -> “Gitlab” 中配置对应的gitlab信息
  • 点击“Test Connection”测试下配置是否成功

    Gitlab配置


    Add Gitlab Credentials


    Gitlab API token

Publish Over SSH

  • 通过ssh连接远程服务器,并能执行脚本部署项目
  • 安装publish-over-ssh
  • 在“系统管理” -> “系统设置“ -> “Publish over SSH” 中配置对应的ssh信息
  • Key中填登录远程服务器的密码(ssh免密码登录)
  • 点击"SSH Servers"后的“增加”按钮,新增一个远程服务器
  • 点开“高级...”按钮,能进一步的配置端口等信息。
  • 配置为Server信息后,点击"Test Configuration"按钮测试是否能够连接成功。

    ssh配置

监测代码变动自动部署

  • 点击左侧边栏的“新建”按钮,新建一个任务。
  • 填写项目的名称,并选择一种构建的方式,此时我们选择第一个,构建一个自由风格的软件项目,然后点击“OK”按钮创建任务,并进行详细的配置

    新建任务
  • 默认设置里填写项目名和描述,并选择之前配置好的要连接的gitlab

    默认配置
  • 配置源码,填写要构建项目的源码仓库地址,并指定要构建的分支

    配置源码
  • 配置触发器,选择触发构建的方式,可以通过hook,根据jenkins提供的地址,放到gitlab中的hook配置中,就会自动触发构建。此时我们选择的是定时检测项目变动,如果检测到分支有新的变动就触发构建,如果感觉一分钟时间太频繁的话,可以自己设置时间频率。

    构建触发器
  • 配置构建,构建选用的是“Invoke top-level Maven target”,填写对应的maven命令,就会自动执行maven命令进行侯建
  • 配置构建后操作, 该行为会在构建完成后执行,我们选用的是“Send build artifacts over SSH”的方式,把构建完成的jar包发送到远程服务器上用ssh命令执行启动,此时jenkins所有机器的默认路径是任务所在的目录,远程机器的默认路径是之前publish-over-ssh中指定的文件地址。Source files指定要传送到远程服务器上的文件,remote directory指定的是传送到远程服务器上的文件地址,Remove prefix是值要去除的文件目录,不然传送到远程服务器也会带有该目录层级结构的。exec Command里输入的是在远程服务器上要执行的指令。

    构建部署配置
  • 项目构建后会有构建历史,点击进去,选择“Console Output”就可以查看构建过程中的执行记录

项目回滚

  • 上面虽然实现了项目的自动部署,但是有时部署失败的时候我们需要回滚到指定版本的构建,这样才能更灵活的进行项目的构建部署。我们可以选择“参数化的构建过程”进行传递不同的参数来选择是进行新的构建还是回滚
  • 如果要在实现回滚,一定要在构建后将,构建完成的文件进行存档,方便以后回滚的时候使用

    构建后存档
  • 使用参数化构建过程,让后面的脚步可以根据不同的变量执行不同的操作。添加“Choice”参数配置不同的选项,让选择发布还是回滚,添加“String Parameter”参数来传递要回滚的版本号。

    参数和构建过程
  • 构建选择“Execute Shell”的方式,自己根据变量,自定义构建的脚本,此时如果是发布安装maven的构建过程进行新的构建,如果是回滚,知道历史构建后的文件,复制到当前构建结果目录。

    构建脚本
  • 点击构建,根据不同的参数选择发布还是回滚,回滚的时候填写要回滚到的历史版本号

    构建页面


作者:寻梦的尕柳
链接:http://www.jianshu.com/p/dceaa1c7bb49
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

相关文章

如何删除Apple Music中的连接功能

Love Apple Music, but tired of the intrusive Connect feature taking up space on your favorite artist’s page? Well, don’t worry, because getting “dis-Connected” is just a matter of changing a few simple settings in your iPhone or iPad running iOS 8.0 o…

python设计模式(十四):模板方法模式

定义一个算法或者流程,部分环节设计为外部可变,用类似于模板的思想来实例化一个实体,可以往模板中填充不同的内容;在模板思想下,实体的整体框架是确定的,他是一个模板,但是模板下内容可变&#…

FirstBird--项目流程

创建项目(英文路径)—–img图片文件创建窗体–设置大小(Basic—size–>320*480)—最大化功能禁用(Expert–>setResizable(false))添加面板–设置布局方式(set Layout—>AbsoluteLayout)自己创建面板 GameMain中将Jpanel1改为WinJpanel–创建对应类–>extends JPane…

PeeringDB初探

做网络相关工作的,可能需要了解PeeringDB这个网站(https://www.peeringdb.com), 这里有大部分公开注册的 ASN(Autonomous System Number) 以及他们相互直接做Peering的信息,这也是这个网站名字的由来。据统计&#xff…

网站排障分析命令

系统连接状态篇:1.查看TCP连接状态netstat-nat|awk{print$6}|sort|uniq-c|sort-rnnetstat-n|awk/^tcp/{print$NF}|sort|uniq-c|sort-rnnetstat-ant|awk{print$NF}|grep-v[a-z]|sort|uniq-c2.查找请求数请20个IP(常用于查找攻来源)&#xff1a…

修复windows脸部识别_如何在Windows 10中改善面部识别

修复windows脸部识别If you have the right hardware, Windows 10 lets you unlock your computer with nothing but a smile. However, Microsoft’s facial recognition isn’t always spot-on. Here’s how to help Windows recognize you better. 如果您拥有合适的硬件&…

使用组策略推送exchange自签名证书

一、导出证书打开证书颁发机构,在证书服务器上面选属性,然后按照下图进行导出操作。 在选择格式时按照上图标识选择。 二、导入证书新建一个组策略,在计算机配置-策略-windows设置-安全设置-公钥策略中选中“受信任的根证书颁发机构”并新建导…

基于.NetCore开发,前端支持Layui、React、Vue且前后端分离的快速开发框架

今天给大家推荐一个基于.Net Core开发的,前端框架支持Layui、React、Vue,并且前端和后端都支持代码一键生成,用于项目开发,可极大的提升开发效率。项目简介这是基于.net core的快速开发框架,前端框架可以根据自己需求选…

PHP常用工具方法集...

PHP常用工具方法集&#xff0c;更新时间 2018-7-14 <?php /*** 常用工具方法集* Author: zj*//** 工具总述 1.加密解密 2.生成随机字符串 3.获取文件扩展名&#xff08;后缀&#xff09; 4.文件大小格式化 5.替换标签字符 6.列出目录下的文件名 7.获取当前页面URL 8.让浏览…

一题多解 面试题

最近在其他论坛上看到几个网友的面试题&#xff0c;这些天&#xff0c;QQ群内的人都在讨论怎么解答才最简单&#xff0c;下面列出题目&#xff1a; 文件a&#xff1a; 文件b: a b c a b c b c a b c a c b a …

什么是Google On.Here,以及如何设置?

Google Wi-Fi is similar to other mesh Wi-Fi systems, but one big feature separates it from the pack: Google On.Here. Google Wi-Fi与其他网状Wi-Fi系统相似&#xff0c;但其中一个重要功能将其与众不同&#xff1a;Google On.Here。 发生什么了&#xff1f; (What Is O…

一张图看懂 SQL 的各种 join 用法

原文链接https://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins 转载于:https://www.cnblogs.com/xuchao0506/p/10559951.html

1Python全栈之路系列Web框架介绍

Python全栈之路系列之Web框架介绍 所有的语言Web框架本质其实就是起一个socket服务端,监听一个端口,然后运行起来 Web框架包含两部分,一部分是socket,另外一部分是业务的逻辑处理,根据请求的不同做不同的处理 Python的Web框架分成了两类, 即包含socket也包含业务逻辑处理的(tor…

『 再看.NET7』数值类型

在C#中&#xff0c;有int16&#xff0c;用short来定义&#xff1b;有int32&#xff0c;用int定义&#xff1b;用int64&#xff0c;用long来定义。在.NET7中&#xff0c;添加了int128&#xff0c;和unint128&#xff0c;位数更大的整型。var i16 short.MaxValue; Console.Write…

获取帮助命令

whatis 基于数据库的查找,查找内容比较慢 优点&#xff1a;查找速度快 缺点&#xff1a;没有实时性 [rootlocalhost ~]# whatis ls ls (1) - list directory contents ls (1p) - list directory contents 数据库文件 Centos6:/…

笔记本电脑升级固态硬盘好吗_如何升级笔记本电脑硬盘

笔记本电脑升级固态硬盘好吗Upgrading your laptop’s hard drive is a great way to get some extra life out of an old machine (or resurrect a dead one). Read on as we walk you through the prep work, the installation, and the followup. 升级笔记本电脑的硬盘驱动器…

购物单

小明刚刚找到工作&#xff0c;老板人很好&#xff0c;只是老板夫人很爱购物。老板忙的时候经常让小明帮忙到商场代为购物。小明很厌烦&#xff0c;但又不好推辞。 这不&#xff0c;XX大促销又来了&#xff01;老板夫人开出了长长的购物单&#xff0c;都是有打折优惠的。 …

Seay源代码审计系统

这是一款基于C#语言开发的一款针对PHP代码安全性审计的系统&#xff0c;主要运行于Windows系统上。这款软件能够发现SQL注入、代码执行、命令执行、文件包含、文件上传、绕过转义防护、拒绝服务、XSS跨站、信息泄露、任意URL跳转等漏洞。 下载链接 https://pan.baidu.com/s/1V…

dotnet 世界猜测 随机数的小测试

这是一个半技术向的博客&#xff0c;主题来源于我读过的某本书的片段&#xff0c;这是一个稍稍有些前置知识的故事&#xff0c;主题的大概内容就是假定世界存在某个规则序列&#xff0c;通过一代代的探索&#xff0c;可以获取到此序列的内容。本文将模拟此情形&#xff0c;写一…

python 批量修改密码

下午闲来无事&#xff0c;就搞个批量密码修改工具玩玩... #!/usr/bin/env python import paramiko import time ip_list(ip1,ip2) log_fileopen(mpwdok.log,w) log_file1open(mpwderr.log,w) for ip in ip_list: try: s paramiko.Transport((ip, 22)) s.c…