jenkins修改pom文件_自动化部署—Jenkins+Docker构建工程
=================
交作业: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构建工程相关推荐
- jenkins修改pom文件_动手实践:美化 Jenkins 报告插件的用户界面
对于 Jenkins 而言,可使用插件来可视化各种构建步骤的结果.有一些插件可用于呈现测试结果.代码覆盖率.静态分析等.这些插件通常都会获取给定构建步骤的构建结果,并在用户界面中显示它们.为了呈现这些 ...
- jenkins修改pom文件_从Jenkins中的pom文件自动派生强制性SonarQube属性
情况: 我想用由詹金斯(1.642.4)触发的SonarQube(5.4)分析我的项目.它是使用maven构建的Java项目. 我看到两种触发分析的方法: 发布构建操作"使用maven进行S ...
- jenkins修改pom文件_DevOps实践:Jenkins与Nexus制品库集成
本章我们主要讲述Jenkins与制品库nexus.artifactory集成,上传下载制品. 安装部署 测试环境使用Docker安装部署 docker run -id --privileged=tru ...
- jenkins修改pom文件_jenkins小插曲-maven pom文件插件配置
jenkins工作空间的文件还在workspace下面,现在将它自动部署到tomcat的webapps下面,需要在pom.xml文件中配置部署插件. 准备工作: 配置tomcat的访问权限,在mave ...
- jenkins修改pom文件_jenkins参数化配置,pom.xml配置
1.要实现Jenkins参数化构建,要先在代码里写好能接收该参数value的配置,在pom.xml文件里加配置,如下: 1)里添加参数的key和value,通过本地执行时,可以直接从pom文件获取,或 ...
- python 修改pom文件_引用pom文件
Maven2集成Idea创建多模块项目 创建项目 选择Maven Module,新建一个Maven项目 选择maven-archetype-quickstart选项,点击下一步 顶级项目就创建好啦,把 ...
- jenkins修改pom文件_jenkins使用小技巧:pom.xml文件里的版本随着每次发布变化怎么办?...
针对这个问题,构建方法不变, 变化在动态去获取每次打出来的包名, 比如说,本次打出来的报名mypackage-1.0.3-SNAPSHOT.jar 那么,先进入target目录 #先进入target目 ...
- 修改pom文件_自动化测试基础篇:Selenium 框架设计(POM)
(给Python开发者加星标,提升Python技能) 来源: 叁藏法师 https://www.cnblogs.com/sanzangTst/p/8376550.html [导语]Selenium是 ...
- 夕阳桥断 Linux(centos6.5)下安装jenkins Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎。 通俗的来讲,jenkins就是一个可以实现自动化部署的一个插
夕阳桥断 Linux(centos6.5)下安装jenkins Jenkins 的前身是 Hudson 是一个可扩展的持续集成引擎. 通俗的来讲,jenkins就是一个可以实现自动化部署的一个插件, ...
最新文章
- 解决Android Studio由于版本问题不识别import android.support.v7.app.AppCompatActivity;
- [轉]子窗口和父窗口的函数或对象能否相互访问
- 算法-Valid Anagram
- webScoket的浅短的认识
- org.apache.struts.chain.commands.InvalidPathException: No action config found for the specified url.
- c语言switch结构计算利润,求助。。关于用switch编写简易计算器
- 用Eclipse写java
- android gallery源代码,可循环显示图像的Android Gallery组件
- sqlplus登录、连接命令
- Logstash_snmp与Logstash_snmptrap日志采集配置说明
- 创建海思Hi3559a音视频同时播放的例子
- 席位、交易单元、交易网关是什么
- 如何帮助空降经理人成功?
- 【路在脚下】----成长的感觉
- python的encode方法_Python encode() 方法
- 7-2 不变初心数 (15 分)
- 树莓派2使用TSL2561
- 车规级需要满足哪些规范?
- 我来告诉你哪个银行的信用卡最好用!
- 软件工程复习13:软件发布
热门文章
- load control template file /_controltemplates/taxonomypicker.ascx failed
- windows系统启用2个以上的mysql服务
- arch模型的思路_时间序列--ARCH模型
- 人类一败涂地电脑版_【天翼云盘】侠盗猎车手5(GTA5) 终极SVIP整合版,话不多说来波狠的!...
- 写python代码的心得体会_写python代码的一点感想
- 二叉搜索树的2层结点统计_植树节,程序猿种的那些树
- 本地下载mysql数据库_本地Windows上安装 MySQL数据库
- python封装sql脚本_flask-sqlalchemy如何使用原生的sql语句然后封装?
- 微机原理换行代码_微机原理
- appium java 时间控件_在 Appium 中快速单击控件的变通方法