1、Nexus与Maven

先说一下这个Maven是什么呢?大家都知道,Java社区发展的非常强大,封装各种功能的Jar包满天飞,那么如何才能方便的引入我们项目,为我所用呢?答案就是Maven,只需要粘贴个Jar包的地址,Maven就会自动到网上查找引入到你的项目中。不过首先你的下载个Maven,然后指定一下

当下来的包包(jar)放到哪里。

我的版本是apache-maven-3.2.1,找到conf里面的配置文件 settings.xml,瞅瞅有没有

<localRepository>E:/java_jar/maven_jar/repos</localRepository>

然后你们包包从哪个地址当呢?问Nexus要吧。

那么Nexus为何物?这叫私服。可以放你自己的jar包和第三方的jar包,这样整个组内就可以共享这些Jar包了。

Nexus所有版本下载地址:http://www.sonatype.org/nexus/archived

(1)下载安装

解压后会在同级目录中,出现两个文件夹:nexus-oss-webapp-1.8.0和sonatype-work,前者包含了nexus的运行环境和应用程序,后者包含了你自己的配置和数据。

$ mkdir nexus
$ tar -xzvf /home/mazhi/nexus-2.7.0-06-bundle.tar.gz

  

(2)启动

$ cd bin/
$ ./nexus
  Usage: ./nexus { console | start | stop | restart | status | dump }
$ ./nexus start

访问网址:http://ip地址:8081/nexus   默认用户名/密码:admin/admin123

3rd party、Snapshots、Releases这三个,分别用来保存第三方jar、项目组内部的快照、项目组内部的发布版.

(3)nexus仓库中各目录介绍

项目中的各种jar包和项目快照等都放在/nexus/sonatype-work/nexus/storage/目录下,在这个目录下包括以下各种目录和存放相应文件
/nexus/sonatype-work/nexus/storage/central - 用于放置maven从中央仓库中下载下来的项目pom.xml中配置到的相关jar包
/nexus/sonatype-work/nexus/storage/thirdparty - 用于放置自己手动上传的第三方jar包
/nexus/sonatype-work/nexus/storage/releases - 用于放置项目deploy后的发布版

来具体看一看如何使用Maven和Nexus。

首先要将下载下来的Maven集成到Eclipse中,如下:

指定了Installations后,还需要指定User Settings,也就是自己Maven下的配置文件settings.xml。

Eclipse中新建一个名为sample的Maven项目,使用Eclipse工具新建Maven项目,新建一个类CommonUtils.java,如下:

package org.mazhi.commons;

import java.text.SimpleDateFormat;
import java.util.Date;

public class CommonUtils {

	public static String getDate(){
		SimpleDateFormat   formatter   =   new   SimpleDateFormat   ("yyyy-MM-dd HH:mm:ss");
		Date   curDate   =   new   Date(System.currentTimeMillis());//获取当前时间
		String   str   =   formatter.format(curDate);
		return str;
	}

}

这是一个公共项目中的公共类,我们需要使用Maven自动发布构建到Nexus中,在工程项目下添加:

        <!-- 项目发布到远程仓库 -->
	<distributionManagement>
		<repository>
			<id>nexus-releases</id>
			<url>http://ip:端口/nexus/content/repositories/releases/</url>
		</repository>
		<snapshotRepository>
			<id>nexus-snapshots</id>
			<url>http://ip:端口/nexus/content/repositories/snapshots/</url>
		</snapshotRepository>
	</distributionManagement>

然后在settings.xml中添加如下配置:

 <servers>
	  <server>
		  <id>nexus-releases</id>
		  <username>admin</username>
		  <password>admin123</password>
	  </server>
	  <server>
		  <id>nexus-snapshots</id>
		  <username>admin</username>
		  <password>admin123</password>
	  </server>
   </servers>

在pom.xml文件上右键,Run As->Maven build,在Goals中填写deploy后执行

看Eclipse console有Uploading日志输出时,看下Nexus,

可以看到发布成功,其它的项目只需要引入<dependency>即可

  

2、Jenkins自动化部署项目

这个Jenkins是干什么的呢?简单来说就是从项目版本管理git上拉代码,然后对代码进行编译,打成war包扔到环境里,就这么个事儿。好,我们来装一个。

首先从官方上下载jenkins,http://mirrors.jenkins-ci.org/war/ 可以选择不同的版本。下载完成后放置在服务器某个目录下,cd到该目录下,执行:

java -jar jenkins.war

jenkins内置一个jetty容器,默认使用8080端口,如果你的8080被占用了,请执行:

java -jar jenkins.war --httpPort=8081

启动后的访问地址如下:

http://locahost:端口号/

  当然你也可以直接把war包放到tomcat目录下启动,这样jenkins就启动起来了。

访问地址为:

http://locahost:端口号/jenkins  

那么Jenkins如何拉版本库中的代码并进行编译部署呢?

先到系统管理->系统设置里指定一下JDK与Git。如果没有Git选项,还需要到系统管理>>管理插件>>可选插件中搜索Git Plugin后安装。

JDK要编译Java代码,当然需要知道用哪个版本的JDK进行编译了,而且也需要调用Git客户端来和版本库产生一些交互。

我们的项目是Maven项目,还需要指定一下使用我们自己的Maven,如下:

在部署时我们需要使用FTP或者SSH将jar/war包放到远程环境里,所以需要到系统管理>>管理插件>>可选插件中 搜索 Publish Over SSH 或者Publish Over FTP,

然后到系统设置里进行设置。设置FTP,如下图。

设置SSH,如下图。

我们只需要选择FTP或SSH一种即可。

选择新建>>构建一个Maven项目,我们需要指定这个任务执行的一系统动作。首先对Git进行一下设置。

在这里指定了Git的项目地址(git@git.oschina.net:mazhimazh/sample.git)和从哪个分支(master)拉取代码进行编译。

如果没有Git的可以使用git.oschina.net,与GitHub不同的是可以建立个人的私有项目。

无论使用Windows、Linux还是Mac的用户需要安装一个Git客户端。为了每次提交本地代码时不输入用户名和密码,我们需要生成一对 Key(这里指密钥),然后才能通过加密的方式和服务器的代码库取得同步。

到开始菜单,找到“Git Bash”,运行之,并执行以下命令:

$ ssh-keygen -t rsa -C "2500261120@qq.com"

程序会提示您输入密钥的文件名,直接按回车即可。然后会要求你输入一个密码,将来在使用密钥的时候需要提供这个密码。可以输入,也可以不输入直接回车(无论输入还是不输入,都会要求你确认一次)。确认完毕后,程序将生成一对密钥存放在以下文件夹:

C:\Users\Administrator[这里替换成你的用户名]\.ssh

密钥分成两个文件,一个私钥(id_rsa)、一个公钥(id_rsa.pub)。私钥保存在您的电脑上,公钥交项目负责人添加到服务器上。用户必须拥有与服务器公钥所配对的私钥,才能访问服务器上的代码库。

将代码上传到git@OSC上时,首先要在Git@OSC上新建一个sample项目,https地址为:

https://git.oschina.net/mazhimazh/sample.git

然后找到本地的sample项目,用Git Bash执行如下命令:

$git init
Initialized empty Git repository in f:/eclipse_workspace/sample/.git/

$git remote add sp https://git.oschina.net/mazhimazh/sample.git

$ git remote -v
sp https://git.oschina.net/mazhimazh/sample.git (fetch)
sp https://git.oschina.net/mazhimazh/sample.git (push)
$git add --all $git commit -m "upload all" $git pull sp master $git push sp master

成功上传项目后就可以使用Jenkins来拉项目到本地了。

然后需要使用Maven进行编译打包为jar,如下图。

其中的Goals and options中的值为clean install,也就相当于mvn clean与mvn install命令了。

设置一下使用FTP或者SSH上传jenkins编译打包后的jar包部署到192.168.2.129(开发的内部测试服务器),设置如下:

最后点击“立即构建”,等构建完成后,查看控制台输出信息,可以清楚的看到执行的各个步骤,如下:

信息很多,再上一张关键图。

剑指架构师系列-持续集成之Maven+Nexus+Jenkins+git+Spring boot的更多相关文章

  1. 剑指架构师系列-持续集成之Maven实现项目的编译、发布和部署

    Maven组织项目进行编译.部署 Maven项目基本的结构说明如下: mazhi  // 控制所有荐的编译.部署.发布 mazhi-app-parent  // 项目的父项目,有一些公共的设置可以被子 ...

  2. 剑指架构师系列-spring boot的logback日志记录

    Spring Boot集成了Logback日志系统. Logback的核心对象主要有3个:Logger.Appender.Layout 1.Logback Logger:日志的记录器 主要用于存放日志 ...

  3. 剑指架构师系列-Redis安装与使用

    1.安装Redis 我们在VMware中安装CentOS 64位系统后,在用户目录下下载安装Redis. 下载redis目前最稳定版本也是功能最完善,集群支持最好并加入了sentinel(哨兵-高可用 ...

  4. 剑指架构师系列-tomcat6通过IO复用实现connector

    由于tomcat6的配置文件如下: <Connector port="80" protocol="org.apache.coyote.http11.Http11Ni ...

  5. 剑指架构师系列-Struts2构造函数的循环依赖注入

    Struts2可以完成构造函数的循环依赖注入,来看看Struts2的大师们是怎么做到的吧! 首先定义IBlood与BloodImpl类: public interface IBlood { } pub ...

  6. 剑指架构师系列-tomcat6通过伪异步实现connector

    首先在StandardService中start接收请求的线程,如下: synchronized (connectors) { for (int i = 0; i < connectors.le ...

  7. 剑指架构师系列-Struts2的缓存

    Struts2的缓存中最重要的两个类就是ReferenceMap与ReferenceCache.下面来解释下ReferenceCache中的get()方法. public V get(final Ob ...

  8. 剑指架构师系列-Hibernate需要掌握的Annotation

    1.一对多的关系配置 @Entity @Table(name = "t_order") public class Order { @Id @GeneratedValue priva ...

  9. 剑指架构师系列-InnoDB存储引擎、Spring事务与缓存

    事务与锁是不同的.事务具有ACID属性: 原子性:持久性:由redo log重做日志来保证事务的原子性和持久性,一致性:undo log用来保证事务的一致性隔离性:一个事务在操作过程中看到了其他事务的 ...

随机推荐

  1. Lumen框架搭建指南

    新人从java转php,到新公司搭建lumen框架,lumen官方文档的坑不是一般的多,对新手极其不友好,记录下我搭建过程,希望对小白们有所帮助. 首先看下官方文档:https://lumen.lar ...

  2. POJ-1789 Truck History---最小生成树Prim算法

    题目链接: https://vjudge.net/problem/POJ-1789 题目大意: 用一个7位的string代表一个编号,两个编号之间的distance代表这两个编号之间不同字母的个数.一 ...

  3. Frame

    Frame意为框架,是在屏幕上的一个矩形区域. Frame主要作为其他组件的框架基础,或为其他组件提供间距补充. 何时使用Frame组件呢? Frame组件主要用于在复杂的布局中奖其他组件分组,也用于 ...

  4. Http协议消息报头

    哎.不知道怎么写Http协议... 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议. HTTP基于TCP/IP通信协议来传递数据 ...

  5. 解决 Can't Connect to MySQL Server on IPAddress (10061) 的问题

    我的MySQL服务器安装在Ubuntu 14.04.3 LTS操作系统上. 然后我通过局域网内的另一台电脑连不上,但是能ping通. 解决办法是首先找到my.cnf这个文件. 我的文件位置在/etc/ ...

  6. Python将excel文件从xls转换为xlsx

    本文使用场景:将一个xls格式Excel文件转换为xlsx文件格式.接下来将一步一步演示该操作.你也可以对代码进行修改使其适用于你所需的场景. 安装Python3 首先需要安装Python,我这里安装 ...

  7. Linux OpenGL 实践篇-3 绘制三角形

    本次实践是绘制两个三角形,重点理解顶点数组对象和OpenGL缓存的使用. 顶点数组对象 顶点数组对象负责管理一组顶点属性,顶点属性包括位置.法线.纹理坐标等. OpenGL缓存 OpenGL缓存实质上 ...

  8. $.ajax()方法详解 jquery

    $.ajax()方法详解   jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Str ...

  9. Python系列之 - python循环语句

    前两篇说的是数据类型和数据运算,本篇来讲讲条件语句和循环语句. 1. 条件语句 条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执 ...

  10. [BZOJ 4403]序列统计

    Description 给定三个正整数N.L和R,统计长度在1到N之间,元素大小都在L到R之间的单调不降序列的数量.输出答案对10^6+3取模的结果. Input 输入第一行包含一个整数T,表示数据组 ...