1. 创建Maven项目

​ Maven是一个项目管理和综合工具。Maven提供给开发人员构建一个完整的生命周期框架。

​ 开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周期。

Apache的开源项目主要服务于Java平台的构建、依赖管理、项目管理。

Project Object Model,项目对象模型。通过xml格式保存的pom.xml文件。

该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。该文件是由开发维护,我们运维人员可以不用去关心。

mvn package #会去maven的中央仓库去下载需要的依赖包和插件到.m2目录下

2、创建Maven私服nexus

部署私服 xenus

下载https://www.sonatype.com/download‐oss‐sonatype

配置仓库两个选项

1、项目下的pom.xml配置、只生效当前的项目

2、在maven配置全局所有项目生效

上传JDK和nexus安装包

rpm ‐ivh jdk‐8u121‐linux‐x64.rpm

mv nexus‐3.13.0‐01 /usr/local/

ln ‐s /usr/local/nexus‐3.13.0‐01 /usr/local/nexus

/usr/local/nexus/bin/nexus start
10.0.0.202:8081 admin admin123
配置Maven全局配置文件
/usr/local/maven/conf/settings.xml
## 3.创建一个Maven项目
创建前上传代码到gitlab服务器,把java项目添加到gitlab仓库中

01. 部署Maven

官网: http://maven.apache.org/download.cgi

清华镜像: https://mirrors.tuna.tsinghua.edu.cn/apache/maven/

**上传软件包**
[root@jenkins ~]# ll
-rw-r--r-- 1 root root 8491533 2018-08-27 14:38 apache-maven-3.3.9-bin.tar.gz
**解压**
[root@jenkins ~]# tar xf apache-maven-3.3.9-bin.tar.gz
**改变目录位置**
[root@jenkins maven]# mv apache-maven-3.3.9 /usr/local/maven-3.3.9
**软连接**
[root@jenkins maven]# ln -s /usr/local/maven-3.3.9 /usr/local/maven
[root@jenkins ~]# cd /usr/local/maven
[root@jenkins maven]# ll
total 32
drwxr-xr-x 2 root root 97 2019-11-20 21:55 bin
drwxr-xr-x 2 root root 42 2019-11-20 21:55 boot
drwxr-xr-x 3 root root 63 2015-11-11 00:38 conf
drwxr-xr-x 3 root root 4096 2019-11-20 21:55 lib
-rw-r--r-- 1 root root 19335 2015-11-11 00:44 LICENSE
-rw-r--r-- 1 root root 182 2015-11-11 00:44 NOTICE
-rw-r--r-- 1 root root 2541 2015-11-11 00:38 README.txt
**设置环境变量**
[root@jenkins maven]# echo "export PATH=/usr/local/maven/bin/:$PATH" >>/etc/profile
[root@jenkins maven]# source /etc/profile **查看结果**
[root@jenkins maven]# mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_181, vendor: Oracle Corporation
Java home: /usr/java/jdk1.8.0_181-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.el7.x86_64", arch: "amd64", family: "unix"

02. 编译测试

上传一个简单的java项目包hello‐world.tar.gz进行解压

[root@jenkins ~]# ll
-rw-r--r-- 1 root root 1325 2018-08-22 13:43 hello-world.tar.gz
[root@jenkins ~]# tar xf hello-world.tar.gz
[root@jenkins ~]# cd hello-world/
validate(验证): 验证项目正确,并且所有必要信息可用。
compile(编译): 编译项目源码
test(测试): 使用合适的单元测试框架测试编译后的源码。
package(打包): 源码编译之后,使用合适的格式(例如JAR格式)对编译后的源码进行打包。integration‐test(集成测试): 如果有需要,把包处理并部署到可以运行集成测试的环境中去。verify(验证): 进行各种测试来验证包是否有效并且符合质量标准。
install(安装): 把包安装到本地仓库,使该包可以作为其他本地项目的依赖。
deploy(部署): 在集成或发布环境中完成,将最终软件包复制到远程存储库,以与其他开发人员和项目共享。
mvn clean (清除) : 清除上次编译的结果 **测试**
[root@jenkins hello-world]# mvn test
#打包
[root@jenkins hello-world]# mvn package #会去maven的中央仓库去下载需要的依赖包和插件到.m2目录下
#打包结果
[root@jenkins hello-world]# ll target/
total 8
drwxr-xr-x 3 root root 17 2019-11-20 22:13 classes
-rw-r--r-- 1 root root 3130 2019-11-20 23:39 hello-world-1.0-SNAPSHOT.jar
drwxr-xr-x 2 root root 28 2019-11-20 23:38 maven-archiver
drwxr-xr-x 3 root root 35 2019-11-20 22:13 maven-status
-rw-r--r-- 1 root root 2872 2019-11-20 23:38 original-hello-world-1.0-SNAPSHOT.jar
drwxr-xr-x 2 root root 125 2019-11-20 22:14 surefire-reports
drwxr-xr-x 3 root root 17 2019-11-20 22:13 test-classes

03. 部署Tomcat及数据库

#上传压缩包
[root@tomcat ~]# ll
-rw-r--r-- 1 root root 9128610 Mar 27 2019 apache-tomcat-8.0.27.tar.gz
-rw-r--r-- 1 root root 170023183 Aug 14 2018 jdk-8u181-linux-x64.rpm #安装JDK
[root@tomcat ~]# rpm -ivh jdk-8u181-linux-x64.rpm
warning: jdk-8u181-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:jdk1.8-2000:1.8.0_181-fcs ################################# [100%]
Unpacking JAR files...
tools.jar...
plugin.jar...
javaws.jar...
deploy.jar...
rt.jar...
jsse.jar...
charsets.jar...
localedata.jar...
#解压Tomcat
[root@tomcat ~]# mkdir /application
[root@tomcat ~]# tar xf apache-tomcat-8.0.27.tar.gz -C /application
#创建软连接
[root@tomcat ~]# ln -s /application/apache-tomcat-8.0.27 /application/tomcat
#tomcat启动加速的方法
[root@tomcat ~]# vim /usr/java/jdk1.8.0_181-amd64/jre/lib/security/java.security
117 securerandom.source=file:/dev/urandom #修改之后
#启动tomcat
[root@tomcat ~]# /application/tomcat/bin/startup.sh
Using CATALINA_BASE: /application/tomcat
Using CATALINA_HOME: /application/tomcat
Using CATALINA_TMPDIR: /application/tomcat/temp
Using JRE_HOME: /usr
Using CLASSPATH: /application/tomcat/bin/bootstrap.jar:/application/tomcat/bin/tomcat-juli.jarTomcat started.
#检查端口
[root@tomcat ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6758/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 7134/master
tcp6 0 0 :::8009 :::* LISTEN 24383/java
tcp6 0 0 :::8080 :::* LISTEN 24383/java
tcp6 0 0 :::22 :::* LISTEN 6758/sshd
tcp6 0 0 ::1:25 :::* LISTEN 7134/master
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 24383/java

浏览器使用8080端口访问

#为项目准备好数据库jeesns,设置数据库root用户密码为root

#安装数据库
[root@tomcat ~]# yum install mariadb-server -y
[root@tomcat ~]# systemctl start mariadb.service
[root@tomcat ~]# mysqladmin password 'root'
#创建jeesns库
[root@tomcat ~]# mysql -uroot -proot -e "create database jeesns;"
#dev上面上传一个项目
[root@git ~]# ll
-rw-r--r-- 1 root root 15376795 2019-03-27 17:33 jeesns.tar.gz
[root@git ~]# tar xf jeesns.tar.gz
[root@git ~]# cd jeesns/
[root@git ~/jeesns]# git remote
origin
[root@git ~/jeesns]# git remote remove origin
[root@git ~/jeesns]# ll jeesns-web/database/
total 40
-rwxr-xr-x 1 root root 28667 2018-11-19 15:01 jeesns.sql
-rw-r--r-- 1 root root 3491 2018-11-19 15:01 update_1.2.0to1.2.1.sql
-rw-r--r-- 1 root root 1026 2018-11-19 15:01 update_1.2.1to1.3.sql
-rw-r--r-- 1 root root 1344 2018-11-19 15:01 update_1.3to1.3.1.sql #将该数据库传输到tomcat节点进行导入
[root@git ~/jeesns]# scp jeesns-web/database/jeesns.sql root@10.0.0.80:~ #导入数据库
[root@tomcat ~]# mysql -uroot -proot jeesns < jeesns.sql
[root@tomcat ~]# mysql -uroot -proot -e "use jeesns; show tables"
+---------------------------+
| Tables_in_jeesns |
+---------------------------+
| tbl_action |
| tbl_action_log |
| tbl_ads |
|tbl_picture_favor |
| tbl_picture_tag |
| tbl_score_detail |
|tbl_weibo_comment |
| tbl_weibo_favor |
| tbl_weibo_topic |
+---------------------------+ #打包jeesns项目
[root@git ~/jeesns]# mvn package #打包之后生成的war包
[root@git ~/jeesns]# ll jeesns-web/target/
total 25496
drwxr-xr-x 4 root root 181 2019-11-20 23:19 classes
drwxr-xr-x 3 root root 25 2019-11-20 23:19 generated-sources
drwxr-xr-x 5 root root 104 2019-11-20 23:19 jeesns-web
-rw-r--r-- 1 root root 26106028 2019-11-20 23:20 jeesns-web.war
drwxr-xr-x 2 root root 28 2019-11-20 23:19 maven-archiver
drwxr-xr-x 3 root root 35 2019-11-20 23:19 maven-status #将其手动传输到tomcat节点上面测试
[root@git ~/jeesns]# scp jeesns-web/target/jeesns-web.war root@10.0.0.80:/application/tomcat/webapps/ROOT.war

浏览器刷新测试

04. 创建一个jeesns项目

#清除上次编译的结果
[root@git ~/jeesns]# mvn clean
[root@git ~/jeesns]# git remote remove origin
[root@git ~/jeesns]# git remote add origin git@10.0.0.100:OPS/jeesns.git
[root@git ~/jeesns]# git add .
[root@git ~/jeesns]# git commit -m "Initial commit"
# On branch master
nothing to commit, working directory clean
[root@git ~/jeesns]# git push -u origin master
Counting objects: 1946, done.
Compressing objects: 100% (1862/1862), done.
Writing objects: 100% (1946/1946), 7.09 MiB | 7.25 MiB/s, done.
Total 1946 (delta 285), reused 0 (delta 0)
remote: Resolving deltas: 100% (285/285), done.
To git@10.0.0.100:OPS/jeesns.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.

05. Jenkins创建一个maven

#此处如果出现报错,请添加Deploy Keys



#发现已经打包成功了

[root@jenkins ~]# ll /var/lib/jenkins/workspace/maven-job/jeesns-web/target/jeesns-web.war
-rw-r--r-- 1 root root 26106007 2019-11-23 11:49 /var/lib/jenkins/workspace/maven-job/jeesns-web/target/jeesns-web.war **jenkins用户给tomcat节点进行分发公钥**
[root@jenkins ~]# ssh-copy-id -i .ssh/id_rsa.pub root@10.0.0.80
**构建后操作**
ssh root@10.0.0.80 "mv /application/tomcat/webapps/ROOT.war /tmp/$BUILD_ID-ROOT.war" scp /var/lib/jenkins/workspace/maven-job/jeesns-web/target/jeesns-web.war root@10.0.0.80:/application/tomcat/webapps/ROOT.war

[root@tomcat ~]# ll /tmp/total 50992-rw-r--r-- 1 root root 26106004 2019-11-23 01:28 2-ROOT.war

3. Pipeline项目

01. 基础概念

CI/CD持续集成/持续部署

​ 持续集成(Continuous integration)是一种软件开发实践,即团队开发成员经常集成它们的工作,通过每个成员

每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动

化测试)来验证,从而尽早地发现集成错误。

​ 比如(你家装修厨房,其中一项是铺地砖,边角地砖要切割大小。如果一次全切割完再铺上去,发现尺寸有误的话

浪费和返工时间就大了,不如切一块铺一块。这就是持续集成。)

​ 持续部署(continuous deployment)是通过自动化的构建、测试和部署循环来快速交付高质量的产品。某种程度上代表了一个开发团队工程化的程度,毕竟快速运转的互联网公司人力成本会高于机器,投资机器优化开发流程化

相对也提高了人的效率。

​ 比如(装修厨房有很多部分,每个部分都有检测手段,如地砖铺完了要测试漏水与否,线路铺完了要通电测试电路

通顺,水管装好了也要测试冷水热水。如果全部装完了再测,出现问题可能会互相影响,比如电路不行可能要把地

砖给挖开……。那么每完成一部分就测试,这是持续部署。)

​ 持续交付 Continuous Delivery:频繁地将软件的新版本,交付给质量团队或者用户,以供评审尽早发现生产环境中存在的问题;如果评审通过,代码就进入生产阶段. 比如(全部装修完了,你去验收,发现地砖颜色不合意,水池太小,灶台位置不对,返工吗?所以不如没完成一部

分,你就去用一下试用验收,这就是持续交付。)

敏捷思想中提出的这三个观点,还强调一件事:通过技术手段自动化这三个工作。加快交付速度。

1.什么是pipeline

Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色。什么是Pipeline,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个

任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。

2.Pipeline 概念

Pipeline 是一个用户定义的 CD 流水线模式。Pipeline 代码定义了通常包含构建、测试和发布步骤的完整的构

建过程。

Node node 是一个机器,它是 Jenkins 环境的一部分,并且能够执行 Pipeline。同时,node 代码块也是脚本式

Pipeline 语法的关键特性。

Stage Stage 块定义了在整个 Pipeline 中执行的概念上不同的任务子集(例如"构建","测试"和"部署"阶段),

许多插件使用它来可视化或呈现 Jenkins 管道状态/进度。

Step 一项任务。从根本上讲,一个步骤告诉 Jenkins 在特定时间点(或过程中的"步骤")要做什么。例如,使用

sh step:sh 'make' 可以执行 make 这个 shell 命令。

3.jenkins file声明式

脚本式

脚本式语法格式:
pipeline{
agent any
stages{
stage("get code"){
steps{
echo "get code from scm"
}
}
stage("package"){
steps{
echo "packge code"
}
}
stage("deploy"){
steps{
echo "deploy packge to node1"
}
}
}
}

#回滚脚本
vim huigun.sh
#!/bin/bash
cd /usr/share/nginx/ (进到nginx目录)
ls -d web-* (查看web版本)
read -p "复制你需要回滚的目录版本" ver (传参)
rm -fr html (删除软连接)
ln -s $ver html (重新软连接)

02. 创建pipeline项目



在仓库创建一个Jenkinsfile文件进行调用

编辑Jenkinsfile文件

pipeline{
agent any
stages{
stage("get code"){
steps{
echo "get code"
}
}
stage("unit test"){
steps{
echo "unit test"
}
}
stage("package"){
steps{
sh 'tar zcf /opt/web-${BUILD_ID}.tar.gz ./* --exclude=./.git --exclude=Jenkinsfile'
}
}
stage("deploy"){
steps{
sh 'ssh 10.0.0.80 "mkdir /opt/web-${BUILD_ID}"'
sh 'scp /opt/web-${BUILD_ID}.tar.gz 10.0.0.80:/opt'
sh 'ssh 10.0.0.80 "tar xf /opt/web-${BUILD_ID}.tar.gz -C /code"'
}
}
}
}

执行构建报错

修改脚本再次构建

Git--09 创建Maven项目的更多相关文章

  1. Storm系列(三):创建Maven项目打包提交wordcount到Storm集群

    在上一篇博客中,我们通过Storm.Net.Adapter创建了一个使用Csharp编写的Storm Topology - wordcount.本文将介绍如何编写Java端的程序以及如何发布到测试的S ...

  2. java web开发入门九(Maven使用&idea创建maven项目)基于intellig idea

    Maven 1.解决的问题 jar包的依赖和管理:版本.依赖关系等 自动构建项目 2.maven介绍 1.Maven是什么? Apache Maven是一个软件项目管理的综合工具.基于项目对象模型(P ...

  3. 创建maven项目(cmd 命令)

    2016五月 22 原 创建maven项目(cmd 命令) 分类:maven (994) (0) 1.普通方式创建 1)进入cmd窗口执行 mvn archetype:generate 2) 光标停止 ...

  4. (八)Eclipse创建Maven项目运行mvn命令

    1.Eclipse创建Maven项目 使用Eclipse创建一个Maven项目非常的简单,选择菜单项File>New>Other(也可以在项目结构空白处右击鼠标键),在弹出的对话框中选择M ...

  5. Jenkins创建Maven项目及SSH部署

    前面我们已经安装了Jenkins的环境,以及配置好了jdk和maven.下面我们来看如何通过Jenkins将svn的项目进行打包和部署. 创建MAVEN项目 1.点击新建,输入项目名,选择" ...

  6. Eclipse创建maven项目

    许久不创建maven web项目了,今天上手很是陌生,搜集资料后终于创建成功,跟大家也分享一下,同时也便于以后再次忘记使用... 新建maven项目(右击new,若不存在,可在other里面寻找)

  7. 首次创建maven项目的准备工作

    需要JDK1.5以上.Eclipse.maven maven下载地址:http://maven.apache.org/download.cgi 1.配置环境变量新建系统变量M2_HOME 2.运行cm ...

  8. 分模块创建maven项目(一)

    maven是一个项目构建和管理的工具. 我们可以通过maven仓库可以实现管理构建(主要是JAR还包括:WAR,ZIP,POM等等). 我们可以通过maven插件可以实现编译源代.产生Javadoc文 ...

  9. 创建maven项目时,提示 overlaps the workspace location

    创建maven项目时提示: Invalid project description.OKF:\java\mywork overlaps the workspace location: F:\java\ ...

随机推荐

  1. 033:DTL常用过滤器(2)

    date过滤器: date过滤器:将一个日期按照指定的格式,格式化成字符串.示例代码如下: views.py: from datetime import datetime def cur_date(r ...

  2. javaSE之运行时异常和编译时异常

    运行时异常继承自RuntimeException; package foundationEnhance; public class Person { private int age; public P ...

  3. [CF959F]Mahmoud and Ehab and yet another xor task题解

    搞n个线性基,然后每次在上一次的基础上插入读入的数,前缀和线性基,或者说珂持久化线性基. 然后一个num数组记录当时线性基里有多少数 然后每次前缀操作一下就珂以了 代码 #include <cs ...

  4. div页面布局基本布局知识

    页面代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  5. UPDATE 在不同数据库中的使用方式

    MYSQL 中update 表一 set Gmoney = 表二.列名 from 表一,表二 where 表一.EMPID = 表二.EMPID举例:update table1 set table1. ...

  6. centos7中yum安装lamp环境

    一.准备工作 1.1 环境 操作系统:centos7(CentOS-7-x86_64-Minimal-1708) 硬件:(这个根据项目运行和配置建议设置,一般我先配个1核1G) 1.2 关闭selin ...

  7. php面试专题---15、MySQL数据库基础考察点

    php面试专题---15.MySQL数据库基础考察点 一.总结 一句话总结: 注意:只写精品 1.mysql定义int(3),那么我存1234就错了么? 不是:无影响:只会影响显示字符的个数:可以为整 ...

  8. 使用Atom写你的笔记

    使用Atom写你的笔记 本文参考简书笔记. 使用sync-settings同步你的Atom设置 使用sync-settings插件需要以下3个条件: 电脑已安装Atom Atom内已安装sync-se ...

  9. Support Vector Machine(4):SMO算法

    经过上一篇的推导,我们的优化问题已经化为了如下等价形式: 我们在不考虑任何约束条件的情况下去想这个minimize的问题,可以将其抽象为: SMO算法的思想是,每次迭代,只改变一个参数,而将n-1个参 ...

  10. Ural Amount of Degrees(数位dp)

    传送门 Amount of Degrees Time limit: 1.0 secondMemory limit: 64 MB Description Create a code to determi ...