码迷,mamicode.com
首页 > 其他好文 > 详细

Git--09 创建Maven项目

时间:2019-12-06 10:06:28      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:存储   验收   unit test   not   mvn   show   key   一个用户   部署   

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项目

标签:存储   验收   unit test   not   mvn   show   key   一个用户   部署   

原文地址:https://www.cnblogs.com/gongjingyun123--/p/11993211.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!