=================

交作业:hello-world级的自动化部署(Maven+Git+Docker+Jenkins),因为内容稍微有点儿多,分两篇,这是第二篇——构建工程。

=================

环境:

CentOS7-64

已安装JAVA8(Jekins需要)

Git

Maven

Jenkins

创建SpringBoot项目,并上传到github上

我已建立了一系列SpringCloud工程(当然都是HelloWorld级别的),github地址:

https://github.com/wangjuns8/spring-cloud-study.git

(内容基于长克同学的教程、代码及指导,非常非常感谢,更多helloworld级的SpringCloud的教程文末列出链接)

我的工程是一个parent project,下面有多个model,这次以eureka和provider-user 为例。

项目整合Docker

在model的src/main目录下创建docker文件夹,再新建一个Dockerfile文件

内容如下:

---------------------------------

#基于openjdk:8

FROM openjdk:latest

#把jar包copy到的工作目录下

COPY ./microservice-discovery-eureka/target/microservice-discovery-eureka.jar /work/project/microservice-discovery-eureka.jar

# 指定当前操作目录

WORKDIR /work/project

#容器启动后执行的操作

CMD java -jar microservice-discovery-eureka.jar

---------------------------------

说明:

1. Dockerfile不一定放在项目下,只要jenkins编译时能访问到的地方就行,放在项目下是为了便于管理;

2. microservice-discovery-eureka.jar是打包的名字,可以在pom.xml里设置:

---------------------------------

<build>

<finalName>microservice-discovery-eurekafinalName>

build>

---------------------------------

创建Jenkins任务:

>> 点击主页面左侧菜单栏的“新建任务”

>> 输入任务名称

>> 选择“构建一个maven项目”

如果没有这个选项,则安装Maven Integration plugin先(详见上篇作业)

>> 确定,进入配置界面

填写jenkins配置

因为我要构建的是parent工程下的eureka model,所以指定到model下的pom.xml

为了提高package效率,可以给它加几个参数:

clean package -T 1C -Dmaven.test.skip=true  -Dmaven.compile.fork=true

说明:

1、跳过测试代码:-Dmaven.test.skip=true

2、多线程进行编译:-Dmaven.compile.fork=true

3、如果你用的Maven是3.×以上版本,可以增加 -T 1C 参数,表示每个CPU核心跑一个工程;

添加构建后执行脚本(docker构建):

填写脚本如下:

#!/bin/sh

#docker 镜像/容器名字都命名为jar包的名字

SERVER_NAME=microservice-discovery-eureka

#容器id

CID=$(docker ps | grep "$SERVER_NAME" | awk '{print $1}')

#镜像id

IID=$(docker images | grep "$SERVER_NAME" | awk '{print $3}')

#当前日期

DATE=`date +%Y%m%d`

#清除旧容器

if [ -n "$CID" ]; then

echo "存在$SERVER_NAME容器,CID=$CID"

echo "停止旧容器"

docker stop $SERVER_NAME

echo "删除旧容器"

docker rm $SERVER_NAME

fi

# 清除旧镜像

if [ -n "$IID" ]; then

echo "存在$SERVER_NAME镜像,IID=$IID"

echo "删除镜像"

docker rmi $IID

fi

#构建镜像,注意build最后面的“.”不能省略

echo "开始构建镜像"

docker build -f ./$SERVER_NAME/src/main/docker/Dockerfile -t $SERVER_NAME .

echo "构建镜像成功!"

# 运行docker容器

echo "创建并启动$SERVER_NAME容器..."

docker run --name $SERVER_NAME -d -p 8761:8761 $SERVER_NAME:v${DATE}

echo "$SERVER_NAME容器启动完成"

-------------------

说明:server_name\port\路径等,要根据个人情况填写

-------------------

保存退出。

左侧菜单->立即构建

左侧菜单->构建历史(Build History)第一条,显示构建进度,点击进度条,查看后台日志。

左侧菜单->工作空间,查看所有该工程下的文件和目录结构

位置:/var/lib/jenkins/workspace

构建的任务都在这下面。

jenkins工作过程:

1. 把源码从git全部下载下来

2. 在本地用mvn编译、打包

3. 顺序执行构建后shell脚本(docker部分)

构建过程中,出现各种异常,主要是找不到文件(路径不对),网络不通,内存不足之类的……

解决办法,参见后面“补充”。

创建第二个jenkins任务

有个偷懒儿的办法,在新建页面最下面,有个拷贝已存在的任务。

拷贝过来,改一改就能用了,哈哈。

效果展示:

先构建wj-tets-eureka,再构建provider-user。

访问:http://49.232.150.148:8761/

遗留问题:

1. 因为我的git工程是一个parent工程下面多个model,所以,在构建model的时候,jenkins会把所有parent代码下载下来(虽然没有影响,但总觉得浪费空间)。目前还不知道怎么解决。

2. 一个docker启动大约用掉200M内存,我的虚拟机最多只能启动俩服务……,后面会尝试给docker减个肥

git上同样有很多入门的SpringCloud教程,详见:

《史上最简单的 SpringCloud 教程》系列:

https://github.com/forezp/SpringCloudLearning

Spring Cloud Examples

内容跟《史上最简单的 SpringCloud 教程》极度相似,互有补充内容

https://github.com/ityouknow/spring-cloud-examples

Maven多模块编译慢的问题

https://blog.csdn.net/posonrick/article/details/51917703

=================补充=====================

1. docker构建镜像异常:

错误信息:

/usr/bin/docker-current: Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/containers/create?name=microservice-discovery-eureka: dial unix /var/run/docker.sock: connect: permission denied.

See '/usr/bin/docker-current run --help'.

原因:

Jenkins默认用户使用的是jenkins,没有操作 /var/run/docker.sock的权限。

解决:

方法一,修改默认用户为root(权限更大):

vi /etc/sysconfig/jenkins

JENKINS_USER="jenkins"

改成:

JENKINS_USER="root"

方法二,给jenkins用户操作权限

1)添加docker用户组

groupadd docker

2)把当前用户加入docker用户组

gpasswd -a ${USER} docker

3)查看是否添加成功

cat /etc/group | grep ^docker

4)重启docker

serivce docker restart

5)更新用户组

newgrp docker

2.  Docker容器启动报WARNING: IPv4 forwarding is disabled. Networking will not work

转自:https://cloud.tencent.com/developer/article/1552661

解决方法

vim /etc/sysctl.conf

或者

vi /usr/lib/sysctl.d/00-system.conf

添加如下代码:

net.ipv4.ip_forward=1

重启network服务

systemctl restart network

查看是否修改成功

sysctl net.ipv4.ip_forward

如果返回为“net.ipv4.ip_forward = 1”则表示成功了 重启容器即可。

3. ERROR: Maven JVM terminated unexpectedly with exit code 137

转自:https://www.cnblogs.com/sheng-247/p/7744527.html

解决:

  虚拟内存不够了。。。增加内存容量。

4. 常用docker命令:

1)查看docker的所有镜像:

docker images

2)列出所有运行中容器

docker ps

列出所有容器

docker ps -a

3)启动一个一直停留在后台运行的容器

docker run -dit 720cc49ec610 /bin/bash

4)登录docker容器:

docker exec -it b87ac4fe6fbc /bin/bash

jenkins修改pom文件_自动化部署—Jenkins+Docker构建工程相关推荐

  1. jenkins修改pom文件_动手实践:美化 Jenkins 报告插件的用户界面

    对于 Jenkins 而言,可使用插件来可视化各种构建步骤的结果.有一些插件可用于呈现测试结果.代码覆盖率.静态分析等.这些插件通常都会获取给定构建步骤的构建结果,并在用户界面中显示它们.为了呈现这些 ...

  2. jenkins修改pom文件_从Jenkins中的pom文件自动派生强制性SonarQube属性

    情况: 我想用由詹金斯(1.642.4)触发的SonarQube(5.4)分析我的项目.它是使用maven构建的Java项目. 我看到两种触发分析的方法: 发布构建操作"使用maven进行S ...

  3. jenkins修改pom文件_DevOps实践:Jenkins与Nexus制品库集成

    本章我们主要讲述Jenkins与制品库nexus.artifactory集成,上传下载制品. 安装部署 测试环境使用Docker安装部署 docker run -id --privileged=tru ...

  4. jenkins修改pom文件_jenkins小插曲-maven pom文件插件配置

    jenkins工作空间的文件还在workspace下面,现在将它自动部署到tomcat的webapps下面,需要在pom.xml文件中配置部署插件. 准备工作: 配置tomcat的访问权限,在mave ...

  5. jenkins修改pom文件_jenkins参数化配置,pom.xml配置

    1.要实现Jenkins参数化构建,要先在代码里写好能接收该参数value的配置,在pom.xml文件里加配置,如下: 1)里添加参数的key和value,通过本地执行时,可以直接从pom文件获取,或 ...

  6. python 修改pom文件_引用pom文件

    Maven2集成Idea创建多模块项目 创建项目 选择Maven Module,新建一个Maven项目 选择maven-archetype-quickstart选项,点击下一步 顶级项目就创建好啦,把 ...

  7. jenkins修改pom文件_jenkins使用小技巧:pom.xml文件里的版本随着每次发布变化怎么办?...

    针对这个问题,构建方法不变, 变化在动态去获取每次打出来的包名, 比如说,本次打出来的报名mypackage-1.0.3-SNAPSHOT.jar 那么,先进入target目录 #先进入target目 ...

  8. 修改pom文件_自动化测试基础篇:Selenium 框架设计(POM)

    (给Python开发者加星标,提升Python技能) 来源:  叁藏法师 https://www.cnblogs.com/sanzangTst/p/8376550.html [导语]Selenium是 ...

  9. 夕阳桥断 Linux(centos6.5)下安装jenkins Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎。 通俗的来讲,jenkins就是一个可以实现自动化部署的一个插

    夕阳桥断 Linux(centos6.5)下安装jenkins Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎. 通俗的来讲,jenkins就是一个可以实现自动化部署的一个插件, ...

最新文章

  1. 解决Android Studio由于版本问题不识别import android.support.v7.app.AppCompatActivity;
  2. [轉]子窗口和父窗口的函数或对象能否相互访问
  3. 算法-Valid Anagram
  4. webScoket的浅短的认识
  5. org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.
  6. c语言switch结构计算利润,求助。。关于用switch编写简易计算器
  7. 用Eclipse写java
  8. android gallery源代码,可循环显示图像的Android Gallery组件
  9. sqlplus登录、连接命令
  10. Logstash_snmp与Logstash_snmptrap日志采集配置说明
  11. 创建海思Hi3559a音视频同时播放的例子
  12. 席位、交易单元、交易网关是什么
  13. 如何帮助空降经理人成功?
  14. 【路在脚下】----成长的感觉
  15. python的encode方法_Python encode() 方法
  16. 7-2 不变初心数 (15 分)
  17. 树莓派2使用TSL2561
  18. 车规级需要满足哪些规范?
  19. 我来告诉你哪个银行的信用卡最好用!
  20. 软件工程复习13:软件发布

热门文章

  1. load control template file /_controltemplates/taxonomypicker.ascx failed
  2. windows系统启用2个以上的mysql服务
  3. arch模型的思路_时间序列--ARCH模型
  4. 人类一败涂地电脑版_【天翼云盘】侠盗猎车手5(GTA5) 终极SVIP整合版,话不多说来波狠的!...
  5. 写python代码的心得体会_写python代码的一点感想
  6. 二叉搜索树的2层结点统计_植树节,程序猿种的那些树
  7. 本地下载mysql数据库_本地Windows上安装 MySQL数据库
  8. python封装sql脚本_flask-sqlalchemy如何使用原生的sql语句然后封装?
  9. 微机原理换行代码_微机原理
  10. appium java 时间控件_在 Appium 中快速单击控件的变通方法