写在前面的话

Jenkins 对于我们用户而言,可能中间会有不同的需求,比如自动构建,接口测试,代码质量检测。但其实我们的最终目的还是打包上线。当然,各个公司的项目开发语言会不一样,但是总体而言发布方式是几乎一致的,不管不是前端还是后端。

插件:Publish Over SSH

简单说下该插件的作用:该插件能耐允许我们向配置好密钥验证的服务器发送文件,并且在远程 Shell 的情况下执行命令。

这就相当于该插件同时具有 scp 和 ssh 的功能。我们可以去插件中心搜索:

插件安装完成以后,打开:系统管理 --> 系统设置

会多出 Publish over ssh 的选项:

此时我们点击新增,就可以增加服务器认证,比如我们新增一台测试:

打开我们的任务,增加发送和包的操作,在 构建后操作 中有这样一项:

配置说明:

此时我们点击触发构建:

在构建的控制台输出的最后,我们可以看到 ssh 操作,同时也可以发现,在 ssh 之后,使用 ls -h . 命令的时候,我们的目录是当前用户的家目录。

而使用 ip 命令的时候却发现未找到命令,这就是在这里使用命令的一个值得注意的地方。

建议命令都写绝对路径,如 /usr/sbin/ip,否则可能出现找不到命令的情况。

在执行 shell 脚本的时候,也建议在脚本前面添加 /bin/sh

连接服务器查看发送情况:

可以看到文件成功发送到了远程服务器。

关于后续更新

在将更新包发送到远程服务器以后,接下来的操作便是更新,这里就不给具体的脚本了,只给一些自己在使用过程中的以及设计的建议:

假如在远程服务器上面存在 Tomcat 应用服务地址:/data/service/tomcat-8080

1. 我们在设计目录结构的时候,建议设计三个目录:

目录 作用
/data/service/tomcat-8080 应用目录
/data/deploy/tomcat-8080 更新包传输临时存放目录
/data/backup/tomcat-8080 旧版包归档目录

2. 更新过程大致如下:

发送更新包到临时目录 --> 解压更新包到指定的名称 --> 停止应用服务 --> 备份旧版包到备份目录 --> 解压的新版包移动到应用目录  --> 启动服务 --> 发送更新信息

简单说明:

发送更新包到临时目录:就是之前我们使用的 Publish Over SSH 发送文件。

后续的步骤都是在 Publish Over SSH 中执行命令时候执行远程服务器上面的脚本实现,该脚本的功能包括解压包,停服务,备份,更新,启动,发送通知。

对于发送通知,我们这里依然采用钉钉机器人 webhook 的方式:

对于通知消息,建议设置两个机器人,一个用于通知成功,一个用于通知失败以及失败原因。

这样是为了当项目多了起来,一次可能得更新多个项目,为了更好的就行区分通知类型。

3. 规范化管理服务器。

我们在设计服务器的时候就要求服务器设计目录的一致性,这样能够减少我们很多不必要的操作,比如我第一条中的目录结构设计。这样的好处在于,我当前公司的发布脚本一共只有 4 个,这还是为了维护方便的情况分成的 4 个:

一个是传统 NG 代理的前端静态发布脚本,一个是 nodejs 启动的前端服务发布脚本。

一个是传统 Tomcat 服务更新发布脚本,一个是 Springboot 微服务启动发布脚本。

这其中又涉及多项服务,但是脚本至始至终就这几个,每个构建我们通过传递两到三个不同参数用于区分不同项目。

因为目录结构,设计都类似,所以参数也非常简单。

4. 脚本集中管理。

当我们又很多机器的时候,我们不能将脚本存储在服务器本地。否则我们修改脚本就意味着需要修改每台机器上面的脚本,这样工程量很大。我的建议是在发布传输更新包之前多一步操作,就是传输更新脚本。这样能够时刻保持脚本是最新状态。且脚本都在 Jenkins 服务器上面保存,集中管理。

5. 关于回滚操作。

对于回滚操作,由于我们每次都有对服务包做备份,并将备份按照指定 tag 进行了归档,所以我们依然可以采用脚本的形式,将旧版本从新从备份目录更新到应用目录下面。并且我们可以通过指定 tag 传参的形式回滚到指定版本。

小结

整个发布流程大致如此,当然我们可能在很多地方看到 Deloy to container 这个插件,其实它没用 Publish 那么好用。

至于个人自己公司的发布方式到底怎么取舍还是看个人,我这里就是一些建议。

【08】Jenkins:关于发布的更多相关文章

  1. jenkins自动发布java代码

    注:本文来源于<KaliArch> jenkins笔记 一.相关概念 1.1 Jenkins概念: Jenkins是一个功能强大的应用程序,允许持续集成和持续交付项目,无论用的是什么平台. ...

  2. Jenkins自动发布代码实战篇

    Jenkins自动发布代码实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  一.Jenkins服务器配置秘钥对并上传到Gitlab中 1>.在Jenkins后端生成秘钥 ...

  3. [原]Jenkins(九)---jenkins分别发布多个项目到多个远程主机

    /** * lihaibo * 文章内容都是根据自己工作情况实践得出. * 版权声明:本博客欢迎转发,但请保留原作者信息! http://www.cnblogs.com/horizonli/p/533 ...

  4. Jenkins+gitlab发布Django程序

    Jenkins+gitlab发布Django程序 一. 二. 三.shell # !/bin/bash cd /root/upload_file #git add . #git commit -m ' ...

  5. Docker+Jenkins+Git发布SpringBoot应用

    Doccker Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之 ...

  6. Windows系统下使用Jenkins 自动发布 .NET core到Linux平台下Docker

    准备工作(安装过程可以百度,已安装的可以跳过) a)     安装Jenkins,安装包下载地址:http://mirrors.tuna.tsinghua.edu.cn/jenkins/windows ...

  7. 手把手教你用Jenkins自动发布dotnet core程序

    Jenkins部分 首先,我们要有个Jenkins咯,下载链接:https://jenkins.io/download/ 我们安装官网教程安装好jenkins,安装教程略.... 嗯?不是说好手把手么 ...

  8. netcore编程之后面对不习惯的xshell黑屏部署,是时候使用jenkins自动化发布工具了

     在很久之前net还只能在windows上部署的时候,或许很多创业公司的朋友发布项目还都是人肉部署,反正windows都是可视化的界面,拖拖拉拉,开开关关还不 是特别麻烦...现如今你的项目需要在li ...

  9. gitlab+jenkins自动发布Python包到私有仓储

    背景 有个私有仓储,地址为https://your.repo.com/pypi/ 代码存储在gitlab, 地址为https://gitlab.company.com/software.git CI为 ...

  10. 使用Jenkins自动发布Windows服务项目

    不同于发布Web项目,自动发布Windows服务项目需要解决以下几个问题: 如何远程停止和开启服务?需要在发布前停止服务,在发布完成后开启服务. 如何上传编译文件到目标服务器? 问题1:如何远程停止和 ...

随机推荐

  1. Android自定义圆角矩形进度条2

    效果图: 或 方法讲解: (1)invalidate()方法 invalidate()是用来刷新View的,必须是在UI线程中进行工作.比如在修改某个view的显示时, 调用invalidate()才 ...

  2. 数据库操作之DBUtils

    概述 DBUtils是Java编程中的数据库操作实用工具,小巧简单实用. DBUtils封装了对JDBC的操作,简化了JDBC操作,可以少写代码. DBUtils三个核心功能介绍 QueryRunne ...

  3. conan使用(五)--打包chromium-base

    现在我们就利用之前学习到的conan的使用方法,将chromium中的base库打包成一个conan包. 1. 准备源码 chromium本身是通过gn来编译的,这个目前conan并不支持.所以需要把 ...

  4. EditPlus常用正则表达式

    正则表达式(Regular Expression,在代码中常简写为regex.regexp或RE)是计算机科学的一个概念.正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本 ...

  5. Grafana中mysql作为数据源的配置方法

    需求 近期在使用python写一套模拟API请求的监控项目,考虑数据可视化这方面就采用grafana来呈现,下面来看看怎么弄. 数据源准备 首先安装好mysql,将监控的日志数据写入到mysql之中. ...

  6. 201871010128-杨丽霞《面向对象程序设计(java)》第六-七周学习总结

    201871010128-杨丽霞<面向对象程序设计(java)>第六-七周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  7. flask如何返回真正意义上的json字符串?以及中文如何正常显示?

    flask中,不能直接return字典,需要把字典转换为json字符串方式有三种:1. return str(字典)2.return json.dumps(字典)3.return jsonify(字典 ...

  8. 使用opencv320演示window平台cmake的使用方法以及一个使用CNN识别字符的例子 20180408

    cmake是干啥的: 本来是Linux平台的一个编译工具. window平台上,cmake可以生成一个可以用vs(可以指定)打开的工程,然后使用 vs 编译相关的 lib.dll 或者 exe以供使用 ...

  9. AndroidStdio模拟器打不开报错 Guest isn't online after 7 seconds

    开了好几次模拟器,始终运行不出来原来的一个项目.报错如下: 解决方案: 经过百度,可能是Android Studio 3.0升级到3.0.1,启动原来建好的模拟器废掉了. 找到你软件中的 建议选择屏幕 ...

  10. 使用CSS来渲染HTML的表单元素

    效果: 实现: <!DOCTYPE html> <html> <head> <title>使用CSS来渲染HTML的表单元素</title> ...