海口网站制作价格,网站kv如何做,wordpress更换主题的技巧,wordpress文档模板#x1f49d;#x1f49d;#x1f49d;欢迎来到我的博客#xff0c;很高兴能够在这里和您见面#xff01;希望您在这里可以感受到一份轻松愉快的氛围#xff0c;不仅可以获得有趣的内容和知识#xff0c;也可以畅所欲言、分享您的想法和见解。
推荐:Linux运维老纪的首页…欢迎来到我的博客很高兴能够在这里和您见面希望您在这里可以感受到一份轻松愉快的氛围不仅可以获得有趣的内容和知识也可以畅所欲言、分享您的想法和见解。
推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老 导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。 常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等 数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂 非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。 ✨✨ 欢迎订阅本专栏 ✨✨ 自动化运维之GitJenkins 基本使用 技能目标 - 了解 Jenkins 持续集成工具 - 学会安装 Jenkins 持续集成工具 - 学会利用Jenkins实现源码自动打包部署 2.1 案例分析
2.1.1 案例概述 随着软件开发复杂度的不断提高团队成员之间如何更好地协同工作以确保软件开发的 质量已经慢慢成为开发过程中不可回避的问题。Jenkins 自动化部署可以解决集成、测试、 部署等重复性的工作工具集成的效率明显高于人工操作并且持续集成可以更早的获取代 码变更的信息从而可以更早的进入测试阶段并且能够更早的发现问题这样解决问题的 成本就会显著下降。持续集成缩短了从开发、集成、测试、部署各个环节的时间从而也缩 短了中间出现的等待时间。持续集成也意味着开发、集成、测试、部署得以持续。所以当 配置完 Jenkins 持续集成持续交付环境后就可以把发布的任务交给集成服务器去处理了。 本章将使用 Maven(Ant) 等来实现 Java 项目自动化构建发布部署。这些工具可以帮助在构 建过程中实现自动化发布、回滚等动作。 2.1.2 案例前置知识点
1. 什么是 Jenkins Jenkins 原名 Hudson2011 年改为现在的名字它是一个开源的实现持续集成的软件 工具。官方网站网址https://jenkins.io/。 Jenkins 能实时监控持续集成过程中所存在的问题提供详细的日志文件和提醒功能 还能通过图表的形式形象地展示项目构建的趋势和稳定性。 Jenkins 包含以下几个特点 易安装从官网仅需要下载一个 jenkins.war 文件后直接运行无需额外的安装更 无需安装数据库 易配置提供友好的 GUI 配置界面 变更支持Jenkins 能从代码仓库SVN /Git中获取并产生代码更新列表并显示到 编译输出信息中 支持永久链接用户是通过 Web 来访问 Jenkins 的而这些 Web 页面的链接地址都是 永久链接地址可以在各种文档中直接使用该链接 集成 E-Mail/RSS/IM当完成一次集成后可通过这些工具实时收取集成结果构建一 次集成需要花费一定时间有了这个功能就可以在等待结果过程中干别的事情 JUnit/TestNG 测试报告是以图表等形式提供详细的测试报表功能 支持分布式构建Jenkins 可以把集成构建等工作分发到多台计算机中完成 文件指纹信息Jenkins 会保存构建集成所产生的 jars 文件、集成构建使用了哪个版本 的 jars 文件等构建记录 支持第三方插件Jenkins 支持第三方插件这使得 Jenkins 功能变得越来越强大。 2. 持续集成的作用 持续集成Continuous Integration简写为 CI可以保证团队开发人员提交代码的质量 减轻软件发布的时间压力。在持续集成过程中任何一个环节都是自动完成的无需太多的人 工干预这样有利于减少重复过程从而可以节省时间、费用和工作量。 3. 持续集成的特点 持续集成是一个自动化的、周期性的集成测试过程检出代码、编译构建、运行测试、 结果记录、测试统计等过程都是自动完成的无需人工干预。持续集成需要有专门的集成服 务器来执行集成构建操作同时需要有代码托管工具的支持。 4. 持续集成的工作原理 Jenkins 的工作原理是先将源代码从 SVN/Git 版本控制系统中拷贝一份到本地然后根 据设置的脚本进行 build构建。整个系统的关键就是 build 脚本build 脚本告诉 Jenkins 在一次集成中需要执行的任务如图 2.1 所示。 图 2.1 持续集成工作原理 5. Maven 介绍 Maven 项目对象模型(POM)是可以通过一小段描述信息来管理项目的构建、报告和文 档的软件项目管理工具。 Maven 除了程序构建能力出色之外还提供高级项目管理工具。由于 Maven 的缺省构 建规则有较高的可重用性所以常常用两三行 Maven 脚本就可以构建简单的项目。由于 Maven 是面向项目的方法许多 Apache Jakarta 项目发布时都使用 Maven而且公司企业 项目采用 Maven 的比例也在持续增长。 Maven 这个单词意为知识的积累最初在 Jakata Turbine 项目中用来简化构建过程。 当时有一些项目有各自 Ant build 文件仅有细微的差别而 JAR 文件都由 CVS 维护。 于是希望有一种标准化的方式构建项目一个清晰的方式定义项目的组成一个容易的方式 发布项目的信息以及一种简单的方式在多个项目中共享 JARs因此 Maven 就这样诞生 了。 2.1.3 案例环境
1. 本案例环境 本案例共使用三台服务器每台服务器划分不同的服务角色最后通过配置 Jenkins 实 现自动打包部署 Java 项目。本案例具体实验环境如表 2-1 所示。 表 2-1 GitJenkins 基本环境 主机操作系统 主机名/IP 地址主要软件服务器CentOS 7.3-x86_64Jenkins/192.168.8.91Jenkins服务器CentOS 7.3-x86_64Docker/192.168.8.92Docker服务器CentOS 7.3-x86_64Git/192.168.8.93Git/SVN 2. 案例拓扑 本章案例拓扑图如图 2.2 所示。 图 2.2 案例拓扑 3. 案例需求 1从 GitHub 下载开源的博客系统到本地然后将开源的博客系统源码提交到 Git 本 地代码版本控制系统。 2配置 Jenkins 持续集成持续交付工具完成 Java 项目自动打包部署等工作。 4. 案例实现思路 1准备 Jenkins 基础环境。 2Jenkins 基本配置。 3实现 Jenkins 自动打包。 2.2 案例实施
2.2.1 准备 Jenkins 基础环境
1. 准备系统环境 三台主机都执行以下操作主机名根据不同主机做调整。 [rootlocalhost ~]# hostnamectl set-hostname jenkins [rootlocalhost ~]# bash [rootjenkins ~]# systemctl stop firewalld systemctl disable firewalld [rootjenkins ~]# systemctl stop NetworkManager systemctl disable NetworkManager [rootjenkins ~]# sed -i /^SELINUX/s/enforcing/disabled/ /etc/selinux/config [rootjenkins ~]# setenforce 0 2. 使用 YUM 安装并配置 Git [rootgit ~]# yum install -y git //jenkins 主机也需执行此条命令 [rootgit ~]# useradd git [rootgit ~]# passwd git 更改用户 git 的密码 。 新的 密码 //输入 git 用户的密码密码可自行设定 重新输入新的 密码 passwd所有的身份验证令牌已经成功更新。 [rootgit ~]# su - git [gitgit ~]$ mkdir tale.git //创建 Git 版本仓库一般以.git 为后缀 [gitgit tale.git]$ git --bare init 初始化空的 Git 版本库于 /home/git/tale.git/ [gitgit tale.git]$ ll total 12 drwxrwxr-x. 2 git git 6 Jul 1 17:10 branches -rw-rw-r--. 1 git git 66 Jul 1 17:10 config -rw-rw-r--. 1 git git 73 Jul 1 17:10 description -rw-rw-r--. 1 git git 23 Jul 1 17:10 HEAD drwxrwxr-x. 2 git git 242 Jul 1 17:10 hooks drwxrwxr-x. 2 git git 21 Jul 1 17:10 info drwxrwxr-x. 4 git git 30 Jul 1 17:10 objects drwxrwxr-x. 4 git git 31 Jul 1 17:10 refs 此时Git 服务器就已经部署完成。但是用户还不能向服务器推送数据也不能克隆 Git 版本仓库。因为要在服务器上开放至少一种支持 Git 的协议比如HTTP/HTTPS/SSH 协议等现在使用最多的就是 HTTPS 和 SSH 协议。切换至 Git 客户机192.168.8.91生 成免交互 SSH 密钥认证。 [rootjenkins ~]# ssh-keygen //一路回车 [rootjenkins ~]# ssh-copy-id git192.168.8.93 //将客户机的公钥传递给 Git 服务器 这样就可以从 Git 服务器中克隆版本仓库了此时目录内没有文件是正常的。[rootjenkins ~]# git clone git192.168.8.93:/home/git/tale.git 正克隆到 tale... warning: 您似乎克隆了一个空版本库。 3. 下载开源博客系统 将开源博客系统源码克隆到本地 Git 仓库目录然后添加注释“all tale”并提交到 Git 版本仓库中。 [rootjenkins ~]# mkdir tale-test [rootjenkins ~]# cd tale-test/ [rootjenkins table-test]# git clone https://github.com/otale/tale.git [rootjenkins table-test]# cd [rootjenkins ~]# cp -rf tale-test/tale/* tale/ [rootjenkins ~]# cd tale [rootjenkins tale]# git add . [rootjenkins tale]# git commit -m all tale *** Please tell me who you are. Run git config --global user.email youexample.com git config --global user.name Your Name to set your accounts default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address (got rootJenkins.(none)) [rootjenkins tale]# git config --global user.email adminexample.com [rootjenkins tale]# git config --global user.name admin [rootjenkins tale]# git commit -m all tale [rootjenkins tale]# git push origin master //默认 push 到 master 主干 Counting objects: 349, done. Compressing objects: 100% (302/302), done. Writing objects: 100% (349/349), 5.29 MiB | 5.54 MiB/s, done. Total 349 (delta 37), reused 0 (delta 0) To git192.168.8.93:/home/git/tale.git * [new branch] master - master 4. 安装部署 Jenkins
1部署 Tomcat 提前下载好 JDK 与 Tomcat 软件包用于部署 Tomcat 服务。 [rootjenkins ~]# tar zxvf jdk-8u202-linux-x64.tar.gz //先上传 JDK 安装包 [rootjenkins ~]# mv jdk1.8.0_202/ /usr/local/java/ [rootjenkins ~]# vim /etc/profile export JAVA_HOME/usr/local/java/ export CLASSPATH$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jarexport PATH$JAVA_HOME/bin:$PATH [rootjenkins ~]# source /etc/profile [rootjenkins ~]# java -version java version 1.8.0_202 Java(TM) SE Runtime Environment (build 1.8.0_202-b08) Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode) [rootjenkins ~]# tar zxvf apache-tomcat-8.5.56.tar.gz [rootjenkins ~]# mv apache-tomcat-8.5.56 /usr/local/tomcat [rootjenkins ~]# tar zxvf apache-maven-3.6.0-bin.tar.gz [rootjenkins ~]# mv apache-maven-3.6.0 /usr/local/maven [rootjenkins ~]# cd /usr/local/tomcat/bin/ [rootjenkins bin]# sh startup.sh 2部署 Jenkins 从官网 http://mirrors.jenkins.io/war下载 jenkins.war 软件包尽量下载较新版本的 Jenkins旧版本在实验中可能会出现默认插件不支持安装。将 jenkins.war 文件保存到 Tomcat 服务的 /usr/local/tomcat/webapps 目录下。启动 Tomcat 就会自动部署 Jenkins。 将 jenkins.war 软件包上传到 Tomcat 服务的对应目录后在浏览器的地址栏中输入 http://192.168.8.91:8080/jenkins 便可开始部署 Jenkins如图 2.3 所示。 图 2.3 解锁 Jenkins 从图 2.3 中可以看出 Tomcat 方式启动 Jenkins 已经成功。初次部署 Jenkins会生成 一个初始登录密码。 [rootjenkins ~]# cat /root/.jenkins/secrets/initialAdminPassword 909ce9e5e72440d2b90ea891ef8148d9 //每个人的密码不同 复制这段密码到浏览器的“管理员密码”框中并单击“继续”登录 Jenkins然后选择“安 装推荐插件”如图 2.4 所示。在实际生产环境下可以根据需求安装 Jenkins 插件。 图 2.4 安装推荐插件 在安装插件的过程中个别插件可能因为网络问题会出现安装失败现象。如果出现插件 安装失败现象可暂时忽略之后可到“插件管理”内安装对应插件。 插件安装完后会出现“创建第一个管理员用户”的提示本案例中创建的用户、密码与 邮件地址如图 2.5 所示。 图 2.5 创建管理员用户 创建完管理员用户后单击“保存并完成”→“开始使用 Jenkins”可进入 Jenkins 首页如 图 2.6 所示。 图 2.6 Jenkins 首页 至此Jenkins 已经部署完毕。 2.2.2 Jenkins 配置 在部署完 Jenkins 工具后就可以对 Jenkins 进行配置。本案例的配置主要包括以下几 个步骤。 (1) 安装 Jenkins 必要插件 (2) 添加验证凭据 (3) 添加 Publish Over SSH 远程主机 (4) 配置 Maven、JDK、Git 环境 (5) 构建 tale 基础镜像 (6) 构建新的工程项目 (7) 验证 Jenkins 持续集成持续交付。 1. 安装 Jenkins 必要插件 在 Jenkins 首页中单击左侧的“Manage Jenkins”→“Manage Plugins”→“可选插件” 进入如图 2.7 所示插件安装界面在搜索框中输入要安装的 Publish Over SSH 、Maven Integration 插件并勾选其左侧的复选框单击“直接安装”按钮开始插件安装操作。 图 2.7 可选插件页面 2. 添加 Publish Over SSH 远程主机 在 Docker 主机上创建远程目录。 [rootdocker ~]# mkdir /data 在 Jenkins 首页中单击“Manage Jenkins”→“Configure System”→“Publish over SSH”→“SSH Servers”→“新增”选项添加 SSH 远程主机如图 2.8 所示。输入 Name、 Hostname、Username 必要信息后单击“高级”选项→勾选“Use Password authentication,or use a different key”选项→输入“远程主机登录密码”→“Test Configuration”测试远程主机配 置。测试远程主机配置成功后单击“保存”按钮。 图 2.8 SSH Servers 配置 3. 配置 Maven、JDK、Git 环境 在 Jenkins 首页中单击“Manage Jenkins”→“Global Tool Configuration”→“JDK”→“新 增 JDK”。“JDK 别名”设置为“JDK1.8”去掉“自动安装”选项“JAVA_HOME”设置为本案例 中 JDK 实际安装路径“/usr/local/java”如图 2.9 所示。 图 2.9 JDK 配置 在“Global Tool Configuration”配置界面中找到“Maven”配置选项然后单击“新增 Maven”并设置别名为“Maven3.6”、MAVEN_HOME 为“/usr/local/maven”如图 2.10 所 示。 图 2.10 Maven 配置 Git 配置保持默认即可以上各项配置完毕后推荐重启下 Jenkins 服务重启命令如 下所示。 [rootjenkins ~]# cd /usr/local/tomcat/bin [rootjenkins bin]# sh shutdown.sh [rootjenkins bin]# sh startup.sh 4. 构建 tale 基础镜像 在 Docker 主机192.168.8.92上构建 tale 基础镜像。在构建基础镜像之前需要先 安装 Docker 与 JDK。 [rootdocker ~]# yum install -y yum-utils device-mapper-persistent-data lvm2 [rootdocker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo [rootdocker ~]# yum makecache fast [rootdocker ~]# yum -y install docker-ce [rootdocker ~]# mkdir /etc/docker [rootdocker ~]# cat EOF /etc/docker/daemon.json { registry-mirrors: [ https://dockerhub.azk8s.cn, https://hub-mirror.c.163.com ] } EOF [rootdocker ~]# systemctl start docker systemctl enable docker Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. [rootdocker ~]# tar zxvf jdk-8u202-linux-x64.tar.gz [rootdocker ~]# mv jdk1.8.0_202/ /usr/local/java/ [rootdocker ~]# vim /etc/profile export JAVA_HOME/usr/local/java/ export CLASSPATH$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar export PATH$JAVA_HOME/bin:$PATH [rootdocker ~]# source /etc/profile [rootdocker ~]# java -version java version 1.8.0_162 Java(TM) SE Runtime Environment (build 1.8.0_162-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode) 构建 tale 基础镜像时依赖 Dockerfile 等相关文件所以需要先创建 tale 基础镜像所用 到的文件。 [rootdocker ~]# mkdir /git [rootdocker ~]# cd /git [rootdocker git]# ll //上传并查看构建 tale 基础镜像所需文件 总用量 186696 -rw-r--r-- 1 root root 366 8 月 31 18:45 Dockerfile -rw-r--r-- 1 root root 98 8 月 31 18:45 run.sh [rootdocker git]# docker build -t 192.168.8.92:5000/tale:v1 . 5. 构建一个新的工程项目 在以上配置完成后回到 Jenkins 首页选择“新建任务”输入一个任务名称“tale-test” 并选择“构建一个 maven 项目”配置项单击当前页面下方的“确定”按钮如图 2.11 所示。 图 2.11 新建任务 在任务配置页面中选择“源码管理”并选中“Git”设置“Repository URL”地址为 “git192.168.8.93:/home/git/tale.git”如图 2.12 所示。 图 2.12 源码管理 之后选择“Build”模块“Goals and options”填写“clean package”如图 2.13 所示。 图 2.13 Build 设置 选择“构建后操作”中的“Send build artfacts over SSH”选项并进行配置如图 2.14 所 示。 图 2.14 构建后操作 Exec command 执行命令如下所示 cd /data/tale tar zxf *.tar.gz docker run -itd --name kgc-tale-test -p 9000:9000 -v /usr/local/java:/usr/local/jdk -v /data/tale:/tale 192.168.8.92:5000/tale:v1 以上全部配置完成后单击“保存”即可。然后单击左侧的“立即构建”就开始 tale 项目 的编译构建直至任务构建完成。在构建过程中可以单击进度条查看控制台输出如图 2.15 所示。 图 2.15 控制台输出 如图 2.16 所示可以看到此工程任务已构建成功并且在构建后用于创建 tale 项目 的 Docker Web 环境命令也执行成功。 图 2.16 构建成功 2.2.3 验证 Jenkins 自动打包部署结果
1. 验证拷贝目录内容 在 Docker 主机上查看 tale 目录是否拷贝到/data 目录下查询结果如下所示。 [rootdocker ]# cd /data/tale/ [rootdocker tale]# ll 总用量 6296 drwxr-xr-x 2 root root 4096 9 月 4 11:19 lib drwxr-xr-x 5 root root 118 9 月 4 11:19 resources -rw-r--r-- 1 root root 6371965 9 月 4 11:19 tale-latest.jar -rw-r--r-- 1 root root 23706933 9 月 4 11:19 tale.tar.gz -rw-r--r-- 1 root root 3409 9 月 4 11:19 tool 从结果可知Jenkins 已经将打好的 jar 包拷贝过来了。 2. 验证 tale 项目 Docker Web 环境 [rootdocker ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ce60aff10e5 192.168.8.92:5000/tale:v1 /run.sh 4 minutes ago Up 4 minutes 0.0.0.0:9000-9000/tcp kgc-tale-test 从上述结果可以得知Web 容器已经创建成功可以通过浏览器访问 tale 开源博客系 统在浏览器中输入 http://192.168.8.92:9000 即可访问访问结果如图 2.17 所示。图 2.17 tale 博客安装首页 至此Jenkins 自动打包部署完毕。