全栈开发技能: 自动化运维环境搭建与实战

在实际开发中,项目功能迭代、需求变更等都会进行项目的重新部署,而每次版本发布重复性的工作,在很大程度上浪费了我们的时间与精力,自动化运维应运而生。

Jenkins 概述与环境搭建

Jenkins 官方网站地址

官网对 Jenkins 的介绍为:

The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project.

翻译过来意思就是:

开源自动化服务的领导者,依靠大量的插件完成项目的构建、推送并且可以自动化任何项目。

怎么样?是不是听起来就觉得挺牛逼的,事实是 Jenkins 真的做到了如其介绍一样。下面就让我带着大家一起来啃一啃 Jenkins。

安装 Jenkins

安装 Jenkins 常见的方式主要有两种,Docker 和 war 包的形式。两种方式各有千秋,我都演示一下如何操作使用。为小伙伴们在后续的工作中提供更多的选择。

通过 Docker 安装 Jenkins

通过 Docker 安装 Jenkins 只要求本机有 Docker 环境即可,服务迁移和安装也非常方便。我本次持续集成的 Jenkins 操作也是基于 Docker 搭建,还有一个就是后面的 Java、Python 服务等都是基于 Docker 运行,因此如果 Docker 基础差的同学,建议补充学习一些 Docker 基础知识将会更好的吸收本文的内容。

1. 拉取镜像

官方镜像拉取方式:

docker pull jenkins

由于官方拉取镜像速度一般较慢,我这里将官方的镜像拉取了一份放在我的阿里云镜像仓库,按需自取即可。

docker pull registry.cn-hangzhou.aliyuncs.com/moxinqian/official_jenkins                                                         

2. 运行容器

docker run --name jenkins -d --restart=always -v /home/jenkins_home:/var/jenkins_home -p50000:50000 -p8080:8080 -u 0 registry.cn-hangzhou.aliyuncs.com/moxinqian/official_jenkins

Jenkins 官方的 Docker 容器运行没有指定 -u,这里的目的是将 Docker 容器以 root 用户运行,防止出现权限不足报错的情况。

容器启动成功后,访问主机域名 + 指定的端口,我这里用的是 8080 端口,出现如图所示的界面表示安装成功:

在这里插入图片描述
通过 war 包安装 Jenkins

通过 war 包安装的 Jenkins 有一个好处是可以用到 Jenkins 主机的运行环境。以 Java 项目为例,假设在你的项目中用到 JNI 调用本地 dll 库的操作,并且在打包 Jenkins 会执行相关的单元测试,那么就需要将 Jenkins 安装在 Windows 主机上,虽然 Docker 启动的 Jenkins 也能做到,但是还是比较折腾的。下面我们来具体看一下如何通过 war 包安装 Jenkins。

官网下载 war 包,如图所示:

在这里插入图片描述

下载 war 包后,命令 java -jar jenkins.war 即可启动。如果要后台运行则运行 nohup java -jar jenkin.war &。除了这种运行方式外,也可以下载 Tomcat 容器将 war 包放到 Tomcat webapps 目录运行。

解锁 Jenkins

Jenkins 安装成功后,和大部分软件外,需要进行一个激活操作,这就是本节要讲的解锁 Jenkins。

首次登陆

首次登陆 Jenkins 用 token 方式登录,token 所在目录在启动后访问的前台界面和启动日志中都可以看到,Docker 方式启动可以通过命令 docker logs myjenkins(容器名称根据自己的实际情况修改)查看或到对应挂载目录下查看。如图:

在这里插入图片描述

输入 token 后进入插件配置界面。

跳过首页插件安装

由于使用默认安装插件的方式速度很慢,而且大多数会下载失败,可以通过在 Jenkins 更换插件镜像方式解决,但是我觉得那个速度也快不来多少。因此我这里讲解另外一种实用的操作:跳过系统插件安装步骤,选择通过自定义上传方式安装。下面来看具体的操作流程。

解锁 Jenkins 后进入插件安装,在插件安装界面有两个推荐方案,即安装推荐插件和自定义选择插件安装,我们这一步需要跳过插件安装,所以选择后者,如图:

在这里插入图片描述

进入插件界面后选择无,然后点击下一步,如图:

在这里插入图片描述

跳过插件安装步骤后,进入到管理员配置界面,如图:

在这里插入图片描述

输入自己设置的账号和密码后即可完成 Jenkins 的基础配置,完成后进入 Jenkins 后台,如图所示:

在这里插入图片描述

注意这个时候 Jenkins 还不能用,因为插件还没有安装。正如 Jenkins 官网的介绍一样,需要大量的插件协作完成构建、发布等。

上传插件并安装

紧接着上一节,继续来讲解如何自定义安装插件。这一节我们先认识一下 Jenkins 为我们推荐的的插件有哪些,然后在根据实际需求下载对应的插件。

了解 Jenkins 推荐的插件

在前面插件安装页面,Jenkins 推荐了一些常用的共计 20 个插件,那么都有哪些呢?我给大家整理一下如下表所示,更多的插件小伙伴们感兴趣可以去官网查看链接

插件名称 插件类型 插件描述信息
1 Folders 构建管理 这个插件允许用户创建“文件夹”来组织作业。用户可以定义自定义分类法(例如,按项目类型、组织类型)。文件夹是可嵌套的,您可以在文件夹中定义视图。
2 OWASP Markup Formatter 构建管理 使用OWASP Java HTML Sanitizer ,可以在项目描述等中输入安全的HTML标记。
3 Build Timeout 构建设置 在指定的时间没有构建完毕,自动终止构建。
4 Credentials Binding 构建设置 允许将凭证绑定到环境变量,以便从其他生成步骤使用。
6 Timestamper 构建设置 将时间戳添加到控制台输出
7 Workspace Cleanup 构建设置 工作区清理插件,此插件在构建完成后删除项目工作区。
8 Ant 打包构建工具 通过 Ant 打包源代码
9 Gradle 打包构建工具 通过 Gradle 打包源代码
10 Pipeline 管道 一套插件,可让您协调自动化,简单或复杂。有关详细信息,请参阅使用Jenkins的管道代码。
11 GitHub Branch Source 管道 Github分支源代码插件管理工具,根据Github的用户或组织创建构建项目
12 Pipeline: GitHub Groovy Libraries 管道 GitHub Groovy库,允许从GitHub动态加载Pipeline Grrovy库。
13 Pipeline: Stage View 管道 管道阶段视图插件
14 Git 源代码管理 在Jenkins中集成了源代码管理工具
15 SSH Build Agents 分布式构建 启动 ssh 代码,多台主机完成分布式构建
16 Matrix Authorization Strategy 用户和安全管理 提供基于矩阵的安全授权策略(全局和每个项目)。
17 PAM Authentication 用户和安全管理 向Jenkins添加Unix可插拔身份验证模块(PAM)支持
18 LDAP 用户和安全管理 向Jenkins添加LDAP身份验证
19 Email Extension 消息推送 Jenkins 邮件通知的加强版,可以配置邮件模板等
20 Mailer 消息推送 通过邮件通知构建结果
下载和安装插件

了解了 Jenkins 的推荐插件后,紧接着我们来安装插件。

1. 下载插件

保证 Jenkins 能够运行,只需要部分插件即可,并非官方推荐的都要安装,上面的插件中只有一部分是我们需要安装的,Id 和上图对应,如下表所示:

插件名称 插件类型 插件描述信息
1 Folders 构建管理 这个插件允许用户创建“文件夹”来组织作业。用户可以定义自定义分类法(例如,按项目类型、组织类型)。文件夹是可嵌套的,您可以在文件夹中定义视图。详情
2 OWASP Markup Formatter 构建管理 使用OWASP Java HTML Sanitizer ,可以在项目描述等中输入安全的HTML标记。详情
3 Build Timeout 构建设置 在指定的时间没有构建完毕,自动终止构建。详情
4 Credentials Binding 构建设置 允许将凭证绑定到环境变量,以便从其他生成步骤使用。详情
6 Timestamper 构建设置 将时间戳添加到控制台输出。详情
7 Workspace Cleanup 构建设置 工作区清理插件,此插件在构建完成后删除项目工作区。详情
14 Git 源代码管理 在Jenkins中集成了源代码管理工具详情
17 PAM Authentication 用户和安全管理 向Jenkins添加Unix可插拔身份验证模块(PAM)支持详情
18 LDAP 用户和安全管理 向Jenkins添加LDAP身份验证详情
19 Email Extension 消息推送 Jenkins 邮件通知的加强版,可以配置邮件模板等详情

上面的每个插件我都在描述后面附带了详情链接,直接点击跳转到对应的插件页面下载即可,同时可以获取更多关于该插件的详细信息。

例如我以第一个插件 Folders 为例,下载按钮如图所示:

在这里插入图片描述

点击该按钮后,跳转到对应的插件版本页面,如图所示:

在这里插入图片描述

建议是下载最新版本的,因为所有的插件都下载最新的,可以防止插件不兼容的问题。按照该操作,我们依次将上述推荐的插件下载。如图所示:

在这里插入图片描述

2. 安装插件

进入 Jenkins 后台,进入 Manage Jenkins 》 Manage Plugins 》 Advanced 》 Upload Plugin,依次上传前面我们下载的插件,如图所示:

在这里插入图片描述

这里我演示一个插件,后面的照着上即可,如图:

在这里插入图片描述

到这里 Jenkins 的基础插件就安装完毕了。

我在上传插件过程中,插件 Credentials Binding 上传报错,报错信息如下

在这里插入图片描述

提示我们 Trilead API Plugin 需要升级,我们去插件中心找到该插件,下载最新的插件安装即可(如果提示已安装则去已安装插件列表卸载后重新安装),如图:

在这里插入图片描述

如果在插件安装过程中,出现安装失败报错 IO 异常的情况,建议重启 Jenkins 再次上传,根据我个人经验而言,多试几次基本都能可以解决。

Jenkins 时区设置

Jenkins 默认使用的是 GMT 时间,与我们误差了 8 小时,设置时区方法 Manage Jenkins 》 Script Console,输入命令

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

如图:

在这里插入图片描述

Jenkins 重启

很多时候我们在安装了插件需要重启才能生效,我这里推荐一个非常简单的方式,就是访问 IP + 端口/restart,例如我的 IP 是 192.168.1.18,那么我访问 192.168.1.18:8080/restart 即可。

Java 项目发布常见搭配

在前面我们花了大量的篇幅介绍 Jenkins 及其环境配置,这一节我们正式开始使用 Jenkins。这里主要讲解的是 Java 的自动化构建,常见 Java 持续集成组合:Jenkins + Spring Boot + Maven + Git + Docker + 代码仓库(GitHub/Gitee 等)。

基于此我们需要准备如下内容:

  • Spring Boot 项目一个并托管在代码管理仓库
  • Maven 环境配置
  • 目标服务器一台,这就是我们项目最终发布的服务器

下面我们就来依次准备上述环境。

前期准备工作

俗话说的好,工欲善其事必先利其器,在构建项目时前将项目所要用的环境都准备好好,后续步骤将会畅通无阻。

Spring Boot 项目准备

我这里为了演示为主,这个 Spring Boot 是一个很简单的测试项目,里面只包含了一个返回“hello world”接口,如图所示:

在这里插入图片描述

项目结构介绍:

在这里插入图片描述
Jenkins Maven 环境配置

SpringB oot 项目基于 Maven 构建,需要在 Jenkins 配置 Maven 环境。

1. Maven 插件安装

由于该项目是基于 Maven 构建的,Jenkins 需要下载 Maven 的 Jenkins 插件,插件地址,如图:

在这里插入图片描述

下载并安装该插件。安装成功的标志是在创建新的构建项目时会多一个 Maven 选项,如图所示:

在这里插入图片描述

2. Jenkins 配置 Maven

除了安装 Maven 插件外,还需要在 Jenkins 后台全局管理配置 Maven 路径。配置路径为 Maven Jenkins 》 Global Tool Configuration 》Maven。如图:

在这里插入图片描述

如果勾选 Insatll automaticallly 则会在构建时检查并自动下载。但是很多时候我们会在 maven 的 settings.xml 中自定义镜像私服地址或依赖包下载路径,且自动下载 maven 包速度很慢,因此我这里选择手动上传的方式安装。在 Jenkins Docker 启动时,映射了宿主 /home/Jenkins_home 镜像目录,因此只需将 maven 安装包下载并解压至该映射目录即可。

Maven 下载地址

下面我们通过命令 docker exec -it myjenkins bash 进入 Jenkins 容器内部查看 Maven 的路径,如图所示:

在这里插入图片描述

在 Jenkins 配置该路径:

在这里插入图片描述
目标服务器

目标服务器是我们项目最终发布的服务器。

1. 服务器准备以及环境搭建

目标服务器需要满足如下三个条件:

  • 目标服务器一定要保证 Jenkins 所在的服务器能够 ping 通。
  • 为了方便演示我在本机再安装一台 Ubuntu 虚拟机当做目标服务器,同时要保证该服务器能够被 SSH 登录。(为这里目标服务器 IP:192.168.17)
  • 由于最终部署的项目在该服务器上以 Docker 的形式运行,因此该目标服务还需要安装 Docker。

2. Jenkins 配置目标服务器

安装插件 publish-over-ssh 使 Jenkins 能够远程其他服务器,下载并安装后,进入目录 Manage Jenkins 》 Configure System 》Publish over SSH,配置目标服务器。如图:

在这里插入图片描述

点击 Add 添加服务器,如图:

在这里插入图片描述

配置中有一项参数是 Remote Directory,该参数的意思是,Jenkins 默认拷贝到目标服务器的文件会将该目录作为根目录,如果目标服务器没有该目录则需要手动议创建。配置完毕后,点击最下方的 Test Configuration 测试能够连接成功,如图:

在这里插入图片描述

记得点击 save 后保存。

构建架构概述

常见的有两种方式:

1. Jenkins 服务器完成构建任务,将构建产物发送到目标服务器,再由目标服务器 build Docker 镜像,并打包容器和启动服务。

  • 优点:过程简单,不用再单独搭建 Docker 镜像中心。
  • 缺点:每次的构建的镜像无法跟踪版本,目标服务器承担了太多任务。

2. 在 Jenkins 服务器生成 Docker 镜像,并将 Docker 镜像 Push 到镜像中心,目标服务器负拉取镜像并启动服务。

  • 优点:每次的的镜像都有版本记录,方便进行镜像版本的回滚。
  • 缺点:单独搭建镜像中心,增加运维的负担。

我这里采用的第一种方式,因为我这里采用 Docker 的方式安装的 Jenkins,Docker 容器内部再创建 Docker 镜像比较麻烦。第二种方式主要的问题在于搭建镜像中心,其实两者本质差别不大,第二种方式小伙们可以拿来作为练手。我的文章《Docker 快速入门与实战》对搭建镜像中心有详细教程。

开始构建项目

在前面我们已经将前期工作都准备好了,那么现在我们就正式开启项目的构建。

新建构建项目

点击 New Item 创建项目,如图:

在这里插入图片描述
自动化项目流水线设置
在这里插入图片描述

项目创建成功后,我们来到了构建设置的界面,我将该流水线做一个说明并演示本项目中是如何使用每个流水线步骤的。

General

构建的一些基础设置,如描述信息等。

Source Code Management

在这里配置我们的代码仓库地址并指定分支和添加访问凭证(就是访问该仓库的哦账号和密码),插件很良心,在你觉得任何有疑问的地方都可以点击旁边的问号获取更多帮助。如图所示:

还有 53% 的精彩内容
©著作权归作者所有,转载或内容合作请联系作者
支付 ¥8.99 继续阅读
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容