技术标签: maven jenkins 运维/部署 docker
想着在公司弄一套自动部署测试流程,jenkins + gitee 自动 build 已经测试成功了。
下一步就是 docker + maven + jenkins + git 打包发布了。
dockerfile 可以根据命令定制镜像,用来构建 docker 容器。
注意:dockerfile 命令都必须用大写
# 基础镜像,在此基础上开始构建
FROM centos
# 维护者信息
MAINTAINER shiva
# 将jar包复制到容器指定目录下
COPY /opt/shiva-test.jar /opt/
ADD /usr/local/java/jdk-8u261-linux-x64.tar.gz /opt/
# 运行命令
RUN yum install wget
RUN tar -xzvf redis.tar.gz
# 虚拟映射,用于持久化存储数据。和挂载 -v 一样。映射地址可以通过 docker inspect ID 查看
VOLUME ["/data", "/var"]
# 暴露 8080、6379 两个端口,创建时按顺序映射端口 docker run -p 12345 -p 54321 image
# 12345:8080,54321:6379
EXPOSE 8080 6379
# 后续就可以用 NODE_VERSION 代替 7.2.0
ENV NODE_VERSION 7.2.0
# 指定工作目录,对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建,也可以设置多次
WORKDIR /opt/software
PS:Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。命令越少越好。
按需要进行构建,我按自己的需求搞一个,思路大约是:
先准备一个 jar 包,就一个接口,以后 jar 包也会自动生成。
@RestController
public class IndexController {
@RequestMapping(value = "index")
public String index(){
return "服务正在运行......";
}
}
编写 dockerfile 文件:
FROM openjdk:8-jdk-alpine
MAINTAINER shiva<[email protected].com>
COPY demo.jar /opt/
EXPOSE 8080
WORKDIR /opt
ENTRYPOINT ["java","-jar","/opt/demo.jar"]
当前目录下文件:
[[email protected] software]# ll
total 16720
-rw-r--r-- 1 root root 17102555 Aug 30 09:45 demo.jar
-rw-r--r-- 1 root root 156 Aug 30 13:34 dockerfile
构建镜像:
docker build -f dockerfile -t test/demo:1.0 .
可以在镜像列表中查看 test/demo
: 1.0
的镜像,然后启动:
docker run -itd --name=testDemo -p 8081:8080 test/demo:1.0
测试访问,链接正常运行。
build 常用参数如下:
jenkins 先安装插件: Maven Integration
首先,在全局安全配置中:
HTTP ERROR 403 No valid crumb was included in the request
构建 maven项目,其他都不写了,和 jenkins npm build 一样,看以前的文章。
Goals and options可以填写下面命令。
clean compile package -Dmaven.test.skip=true
清理、编译、打包,不执行测试用例,也不编译测试用例类。
然后执行构建,测试下。
在我的工程目录 /root/.jenkins/workspace/maven test/
下,已经生成了 target 文件夹。
上面两步合在一起就行了。
dockerfile 要根据实际路径和版本修改:
FROM openjdk:8-jdk-alpine
MAINTAINER shiva<[email protected].com>
COPY target/demo-0.1.jar /opt/
EXPOSE 8080
WORKDIR /opt
ENTRYPOINT ["java","-jar","/opt/demo-0.1.jar"]
构建后 shell 命令也根据实际情况写:
docker build -f dockerfile -t test/demo:1.0 .
docker run -itd --name=testDemo -p 8081:8080 test/demo:1.0
考虑到会多次构建,重复生成镜像,重复创建容器。对命令进行改进:
# 先定义镜像和版本信息
DOCKERNAME='demoTest'
REPOSITORIES='demo/test'
TAG=`date +%Y%m%d-%H%M%S`
# 删除原来的容器
CONTAINER_ID=`docker ps | grep "${DOCKERNAME}" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then
docker stop $CONTAINER_ID
docker rm $CONTAINER_ID
else #如果容器启动时失败了,就需要docker ps -a才能找到那个容器
CONTAINER_ID=`docker ps -a | grep "${DOCKERNAME}" | awk '{print $1}'`
if [ -n "$CONTAINER_ID" ]; then # 如果是第一次在这台机器上拉取运行容器,那么docker ps -a也是找不到这个容器的
docker rm $CONTAINER_ID
fi
fi
# 删除原来的镜像
IMAGE_ID=`sudo docker images | grep ${
REPOSITORIES} | awk '{print $3}'`
if [ -n "${IMAGE_ID}" ];then
docker rmi ${
IMAGE_ID}
fi
docker build -f dockerfile -t ${
REPOSITORIES}:${
TAG} .
docker run -itd --name=${
DOCKERNAME} -p 8081:8080 ${
REPOSITORIES}:${
TAG}
最后测试,一切顺利。
【狂神说Java】Docker最新超详细版教程通俗易懂_哔哩哔哩_bilibili
Dockerfile命令详解(超全版本) - 大周说测试 - 博客园 (cnblogs.com)
docker构建jdk1.8镜像_面朝大海,春暖花开-程序员秘密
Docker 构建jdk8 镜像 - 蓝色土耳其 - 博客园 (cnblogs.com)
自动化部署(一)jenkins+github+maven+docker(通过Dockerfile脚本部署项目) - jack-jin - 博客园 (cnblogs.com)
【docker】docker build :镜像_u010900754的专栏-程序员秘密
Dockerfile部署jar_fishinhouse的专栏-程序员秘密_dockerfile jar
jenkins实现maven项目自动化部署tomcat - 夜枫林 - 博客园 (cnblogs.com)
Maven中-DskipTests和-Dmaven.test.skip=true的区别 - 飘飘雪 - 博客园 (cnblogs.com)
最近安装了一个联通的宽带,赠送的光猫是 中兴 F427,然后联通小哥给安装的时候,直接开启了光猫的路由功能。不过联通这个光猫实在是太弱了,起码默认的帐号开启的功能实在是太弱了,没法完成以下几个功能:端口转发脱机下载最重要的 5G HZ 的 Wifi,这个可以省去很多信号冲突DLNA给联通去电话,接电话的人完全不知道是什么意思,只是说如果你按住路由器只能使...
Windows下 yolov5 6.0版本转onnx转ncnn +安卓部署 附加ncnn环境配置 保姆级详细教程,踩了很多坑,基本是手把手将教你完成模型部署
场景复现Spring + MyBatis ,@Transactional不起作用
1、前言项目要走向国外市场,移动端Android和iOS,当然也包括后端和前端,需要进行国际化适配,但是之前的项目中是没有英文翻译文件的,所以需要将项目中所有的中文字符串进行收集交给专业的人士进行翻译,然后将翻译的英文内容分别整理到Android和iOS项目中去。无疑这是一个很繁琐且很容易出错的事情,而且后续在开发的过程中还会新增中文字符串,这个时候我们又需要重新走一遍上面的流程,哪怕只是新增了一个字符串!于是我们需要一个系统去专门处理这件事件,将功能开发和英文翻译这两件事分离开来,让专业的人士去做专业
1. 原地交换两个数字Python 提供了一个直观的在一行代码中赋值与交换(变量值)的方法,请参见下面的示例:x,y= 10,20print(x,y)x,y= y,xprint(x,y)#1 (10, 20)#2 (20, 10)赋值的右侧形成了一个新的元组,左侧立即解析(unpack)那个(未被引用的)元组到变量 <a> 和 <b>...
zabbix5.0版本安装1:配置环境安装2:安装zabbix5.03:设置中文模式一:准备搭建系统环境centos7.6二:安装过程1:首先查看selinux是否关闭,没有关闭手动关闭# getenforce# vi /etc/selinux/conf //未关闭情况编辑关闭SELINUX=Disabled 修改为Disabled2:查看防火墙是否关闭# systemctl status firewalld# systemctl disable f
当表有多个索引的时候,不同的事务可以使用不同的索引锁定不同的行,另外,不论是使用主键索引、唯一索引或普通索引,InnoDB都会使用行锁来对数据加锁。MySQL中锁详解(行锁、表锁、页锁、悲观锁、乐观锁等)...
ConfigMap功能在Kubernetes1.2版本中引入,许多应用程序会从配置文件、命令行参数或环境变量中读取配置信息。ConfigMapAPI给我们提供了向容器中注入配置信息的机制,ConfigMap可以被用来保存单个属性,也可以用来保存整个配置文件或者JSON二进制大对象。将配置信息放到configmap对象中,然后在pod的对象中导入configmap对象,实现导入配置的操作。ConigMap是一种API对象,用来将非机密性的数据保存到键值对中。......
在使用Eclipse的Build Project功能时,提示以下错误: An internal error occurred during: “Build Project”. GC overhead limit exceeded 如图: 搜索的一下,是属于java.lang.OutOfMemoryError。 OOM大家都知道,就是JVM内存溢出了,那GC overhead limit
https://github.com/PX4/PX4-Autopilot/issues/12038cd PX4-Autopilotsource Tools/setup_gazebo.bash $(pwd) $(pwd)/build/px4_sitl_defaultexport ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:$(pwd)/Tools/sitl_gazeb.
加密方法:public String encryptDES(String encryptString, String encryptKey) throws Exception {IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);SecretKeySpec key = new SecretKeySpec(encryptKey.getB...
关于冒泡排序是什么怎么排序的我就不多赘述了,基本简单查找翻阅一下资料都可以弄明白,我这里是用冒泡排序的算法编写简单的java代码以及进行一些优化和之间的性能小评测。一、代码+讲解 (1)下面是一般的冒泡排序java代码: int arry[] = { 3, 2, 6, 8, 1, 9, 5 }; for (int i = 0; i < arry.length; i++) { ...