Fork me on GitHub

Jenkins+Maven+SVN+Nexus 搭建持续集成环境

摘要

Jenkins 只是一个平台,真正运作的都是插件。这就是 jenkins 流行的原因,因为 jenkins 什么插件都有。Hudson 是 Jenkins 的前身,是基于 Java 开发的一种持续集成工具,用于监控程序重复的工作,Hudson 后来被收购,成为商业版。后来创始人又写了一个 jenkins,jenkins 在功能上远远超过 hudson

一、DevOps

DevOps 是“开发”和“运维”的缩写。

DevOps 是一组最佳实践强调 (IT 研发、运维、测试) 在应用和服务生命周期中的协作和沟通,强调整个组织的合作以及交付和基础设施变更的自动化,从而实现持续集成、持续部署和持续交付

DevOps 平台四大模块

1. 项目管理 (创建项目—>> 项目需求)
2. 运维平台 (监控–日志收集—等)
3. 持续交付 (提交完代码—> 自动打包—> 构建)
4. 代码托管 (gitlab—-> 代码提交)
————————————————————>>DevOps 平台

针对 DevOps 开源项目

1. 项目管理—(JIRA 非开源但是用的人比较多)、(Redmine 使用 ruby 写的)
2. 代码托管—(SVN–usvn 有 web 管理界面)、(GitLab)
3. 持续交付—(主流 Jenkins)、(GitLab gitlab-ci 也可以做交付)
4. 运维平台—(国内的开源运维平台可能就是腾讯蓝鲸)

二、服务介绍

很多事情不是光运维就可以决定的,还需要跟研发交流,我这里只是演示一个大概的持续交付的流程~

2.1 Jenkins 介绍

Jenkins 只是一个平台,真正运作的都是插件。这就是 jenkins 流行的原因,因为 jenkins 什么插件都有
Hudson 是 Jenkins 的前身,是基于 Java 开发的一种持续集成工具,用于监控程序重复的工作,Hudson 后来被收购,成为商业版。后来创始人又写了一个 jenkins,jenkins 在功能上远远超过 hudson

2.2 Maven 介绍

maven 的用途
maven 是一个项目构建和管理的工具,提供了帮助 管理 构建、文档、报告、依赖、scms、发布、分发 的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
maven 的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性
利用 maven 自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。

maven 的核心概念介绍

Pom

pom 是指 project object Model。pom 是一个 xml,在 maven2 里为 pom.xml。是 maven 工作的基础,在执行 task 或者 goal 时,maven 会去项目根目录下读取 pom.xml 获得需要的配置信息

pom 文件中包含了项目的信息和 maven build 项目所需的配置

Artifact

这个有点不好解释,大致说就是一个项目将要产生的文件,可以是 jar 文件,源文件,二进制文件,war 文件,甚至是 pom 文件。每个 artifact 都由 groupId:artifactId:version 组成的标识符唯一识别。需要被使用 (依赖) 的 artifact 都要放在仓库 (见 Repository) 中

Repositories

Repositories 是用来存储 Artifact 的。如果说我们的项目产生的 Artifact 是一个个小工具,那么 Repositories 就是一个仓库,里面有我们自己创建的工具,也可以储存别人造的工具,我们在项目中需要使用某种工具时,在 pom 中声明 dependency,编译代码时就会根据 dependency 去下载工具(Artifact),供自己使用。

Build Lifecycle

是指一个项目 build 的过程。maven 的 Build
Lifecycle 分为三种,分别为 default(处理项目的部署)、clean(处理项目的清理)、site(处理项目的文档生成)。他们都包含不同的 lifecycle。
Build Lifecycle 是由 phases 构成的

….

参考:关于 Maven 常用参数及说明

   

2.3 SVN 介绍

SVN 是近年来崛起的非常优秀的版本管理工具,与 CVS 管理工具一样,SVN 是一个固态的跨平台的开源的版本控制系统。SVN 版本管理工具管理者随时间改变的各种数据。这些数据放置在一个中央资料档案库 repository 中,这个档案库很像一个普通的文件服务器或者 FTP 服务器,但是,与其他服务器不同的是,SVN 会备份并记录每个文件每一次的修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定的更新历史记录。

本站相关文章

SVN 服务实战应用指南

VisualSVN 迁移至 Linux SVN+Apache+ssl 集成 LDAP

2.4 Nexus 介绍

maven 的仓库只有两大类:1. 本地仓库 2. 远程仓库,在远程仓库中又分成了 3 种:

1 中央仓库

2 私服

3 其它公共库。

私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的 Maven 用户使用。当 Maven 需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为 Maven 的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。

Maven 私服的 个特性:

1. 节省自己的外网带宽:减少重复请求造成的外网带宽消耗

2. 加速 Maven 构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低

3. 部署第三方构件:有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库 (私服) 中,供内部 maven 项目使用

4. 提高稳定性,增强控制:Internet 不稳定的时候,maven 构建也会变的不稳定,一些私服软件还提供了其他的功能

5. 降低中央仓库的负荷:maven 中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力

因此我们在实际的项目中通常使用私服来间接访问中央仓库,项目通常不直接访问中央仓库

三、环境搭建

首先最新版本 2.97 只支持 java1.8,我们需要将 jdk 版本设置为 1.8

tomcat 的版本最好也是 8.0.x 版本,如果使用 8.5 可能会有问题

系统我们使用 Centos7

3.1 配置 jdk 环境

$ wget http://download.oracle.com/otn-pub/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz
$ tar zxf jdk-8u91-linux-x64.tar.gz -C /usr/local/
$ ln –s /usr/local/jdk1.8.0_91 /usr/local/jdk
$ vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
检查
$ java -version
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)

3.2 安装 Jenkins

提示:首先 Jenkins 安装方式有 2 中,一种是 yum 安装,另一种是使用 war 的方式进行安装(war 就需要安装 tomcat)

官方文档:https://pkg.jenkins.io/redhat/

如果我们想使用 war 包的方式可以直接下载 war 包

这里我们可以参考本站以前文章 持续集成之 Jenkins+Gitlab 简介 [一]

下载 tomcat (tomcat 和 jdk 版本最好相同)

$ wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.0.48/bin/apache-tomcat-8.0.48.tar.gz
$ tar xf apache-tomcat-8.0.48.tar.gz –C /application/
$ mv /application/apache-tomcat-8.0.48 /application/jenkins
$ rm –rf /application/jenkins/webapps/* && mkdir –p /application/jenkins/webapps/ROOT
下载 war 包
$ wget http://mirrors.jenkins.io/war/latest/jenkins.war
$ cp jenkins.war  /application/jenkins/webapps/ROOT/
$unzip /application/jenkins/webapps/ROOT/jenkins.war
我们直接执行 bin/startup.sh 启动就可以

启动我们可以查看 tomcat 日志

Jenkins 访问地址:localhost:8080

关于 tomcat 安装参数及配置修改可以参考本站 企业必会技能 tomcat

新版本的 jenkins 为了保证安全,在安装之后有一个锁,需要设置密码之后才可以解锁

我们选择推荐安装即可

安装插件中

设置管理员账号密码

登陆 jenkins

3.2 安装 maven 环境

$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.2/binaries/apache-maven-3.5.2-bin.tar.gz
$ tar xf apache-maven-3.5.2-src.tar.gz
$ mv apache-maven-3.5.2 /usr/local/
$ ln -s /usr/local/apache-maven-3.5.2/ /usr/local/maven
$ vim /etc/profile
export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:$PATH
$source /etc/profile
验证
$ mvn -v
Apache Maven 3.5.2 (138edd61fd100ec658bfa2d307c43b76940a5d7d; 2017-10-18T03:58:13-04:00)
Maven home: /usr/local/maven
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/local/jdk1.8.0_151/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"
这里我们需要修改 maven 的 settings.xml 设置一些相关配置。这里我们直接访问
https://www.abcdocker.com/abcdocker/2893

3.3 安装私服(Nexus)

下载地址:http://www.sonatype.org/nexus/go/

$ wget https://sonatype-download.global.ssl.fastly.net/nexus/3/nexus-3.7.0-04-unix.tar.gz
$ tar xf nexus-3.7.0-04-unix.tar.gz -C /usr/local/
$ ln -s /usr/local/nexus-3.7.0-04/ /usr/local/nexus
设置环境变量
$ vim /etc/profile
export JAVA_HOME=/usr/local/jdk
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
export JENKINS_HOME=/jenkins
export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:$PATH:/usr/local/nexus/bin
$ source  /etc/profile

启动脚本

$ nexus 
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Usage: /usr/local/nexus/bin/nexus {start|stop|run|run-redirect|status|restart|force-reload}
$ nexus start
WARNING: ************************************************************
WARNING: Detected execution as "root" user.  This is NOT recommended!
WARNING: ************************************************************
Starting nexus
如果我们想把警告去除,需要在修改用户和环境变量。

访问地址:localhost:8081 端口可以在 /etc/nexus-default.properties 中修改)

nexus 登陆界面

3.4 Jenkins 配置

因为我们需要构建 Java 项目,所以需要安装一个 Maven 插件
插件名称 Maven Integration plugin
系统管理–> 管理插件

此时我们可以在已安装的插件中找到

配置 Jenkins 全局工具配置

系统管理 --> 全局工具配置

配置我们的 JDK、Maven 地址保存就可以

四、Jenkins 构建项目

4.1 创建 maven 项目

创建 maven 项目,起名称

4.2 设置构建参数

这里是说我们构建的记录保留的天数与个数

SVN 地址以及账户的配置

没有问题就不会报错

这是 maven 的编译参数,如果有问题需要与研发的童鞋商议

添加 Shell 脚本,添加的 shell 脚本可以是命令,也可以是执行一个脚本。

构建演示:

这里是正在下载依赖包,因为我们项目一般在测试环境使用,是很多研发一起使用,所以这里的地址就是我们私服(Nexus 地址)

执行完毕

当我们执行完成之后上面的 shell 脚本可以是将 war 包复制到 tomcat 项目目录里

/jenkins/workspace/maven/bxg-ask-center-web/target
–jenkins 主目录—项目目录—- 代码分支—–

以下是我们以前 Jenkins shell 中的配置,比较 low 仅供参考

提示:很多相关的参数不是运维能决定的,需要研发参与

更改 Jenkins 的主目录

https://www.cnblogs.com/zz0412/p/jenkins_jj_07.html

如何用 Maven 创建 web 项目(具体步骤)

https://www.cnblogs.com/apache-x/p/5673663.html

Maven 私服 Nexus 详解

http://blog.csdn.net/u013516966/article/details/43753143

maven 核心,pom.xml 详解(转)

https://www.cnblogs.com/qq78292959/p/3711501.html

转自:Jenkins+Maven+SVN+Nexus 搭建持续集成环境

赞赏是最好的支持与鼓励!
-------------本文结束感谢您的阅读-------------