jenkin+docker 构建项目
jenkins发布项目
在构建项目之前我们需要做一些配置,安装一些插件
- 点击系统管理
- 点击插件管理
- 需要安装一下这个maven插件
- 插件安装完成之后我们需要配置一下全局工具 "系统管理>全局工具配置"
注意:安装了jdk 就不要在点自动安装了
这里需要配置一下jdk , 别名随便输入,JAVA_HOME填写安装jenkins的服务器上面的JAVA_HOME就行
如果是linux机器输入 下面的命令可以看到
[root@jk ~]# echo $JAVA_HOME
/home/vsftpd/root/jdk1.8.0_201
- jdk配置完成之后还需要配置一下maven(前提是服务器装了maven)
和jdk配置差不多,这里要注意,如果HOME路径不存在就会报上图的错误,填写正确就不会报错,同样输入下面的命令可以看到MAVEN_HOME
[root@jk ~]# echo $MAVEN_HOME
/opt/maven/apache-maven-3.6.3
- 暂时我们就配置这两个,点击保存、应用就可以了
到这里我们的前期准备工作已经做好了,下面可以开始正式构建项目了
- 首先我们这里构建一个maven项目,输入自己的项目名称,点击完成。
- 然后我们进入构建配置页面,配置一下构建参数
- 这里我们使用参数化构建,选择字符参数(其他类型参数可以自己尝试一下)
选择字符参数后会出现以下界面
这里配置下项目名称(这个是可有可无的,这里主要是测试下参数化配置,后期有其他参数需要传递在详细配置)
- 接下来是源码管理配置
url输入自己的Git项目路径
Credentials 是需要验证git的登录信息
点击图中的 “添加” 按钮
输入自己登录git的用户名密码就可以
分支默认就行,如果有自己分支,输入分支名称就行
注意:这里必须在安装jenkins的服务器上安装有git才行,否则待会构建项目会报错。
- 触发器这里选择默认就行
- 接下来就行构建前后执行的命令配置
- pre steps 为构建前执行,这里我们选择执行 shell
输入下面的执行shell 脚本的命令 (脚本文件是项目中编写好的,文章后面会给出来)
/bin/bash runPre.sh ${PRODUCT_NAME}
- build中需要填写构建的pom.xml文件
(这里是单个项目直接填写pom.xml就行,如果是maven父子工程,填写父工程的pom.xml文件地址)
Goals and options:是构建项目执行的maven命令
(这里是通过docker-maven-plugin 插件将项目构建为一个docker镜像,shell脚本主要也是控制docker镜像的启动,停止,删除)
clean package docker:build
#需要push要私有仓库的添加下面的命令
clean package docker:build -DpushImage
Post Steps : 为构建后参数(运行脚本文件,主要是通过镜像启动容器)
/bin/bash runPost.sh ${PRODUCT_NAME}
到这里配置就OK了,点击保存退出就行
可以看到我们项目现在大概是这样的
下面我们再来看一下项目结构
这里我就写了一个测试controller
Dockerfile文件可以不要(主要的之前测试了用dockerfile文件和用配置两种情况)
- 配置文件内容如下
<build><finalName>jenkins</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.0.0</version><configuration><!-- 定义镜像名 --><imageName>${project.artifactId}:${project.version}</imageName><!-- 基础镜像,编译为镜像时会下载jdk--><baseImage>java</baseImage> <workdir>/</workdir><cmd>["java", "-version"]</cmd><!-- 相当于 java -jar jenkins.jar--><entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources><!-- 远程docker地址 没有配置docker远程访问的需要配置一下 --><dockerHost>http://1.1.1.1:2375</dockerHost></configuration></plugin></plugins></build>
这里对于初步接触dockerfile配置的来说可以理解为
编译docker镜像,当我们通过镜像启动容器时会执行下面的命令
为docker镜像起名为
${project.artifactId}:${project.version}
在容器中下载并按照jdk
执行
java -version
命令执行
java -jar ${project.build.finalName}.jar
命令
这样容器就启动起来了。
开启docker远程访问
- 最后在看一下shell文件(runPre.sh)
#! /bin/shdockerPs=`sudo docker ps | grep -w $1 | head -n 1 | awk '{print $1}'`
if [ "$dockerPs" != "" ];thensudo docker stop $dockerPsif [ $? -eq 0 ];thenecho "$dockerPs 容器已停止"fi
fidockerPsAll=`sudo docker ps -a | grep -w $1 | head -n 1 | awk '{print $1}'`
if [ "$dockerPsAll" != "" ];thensudo docker rm $dockerPsAllif [ $? -eq 0 ];thenecho "$dockerPsAll 容器已删除"fi
fiimage=`sudo docker images | grep -w $1 | head -n 1 | awk '{print $3}'`
if [ "$image" != "" ] ;thensudo docker rmi $imageif [ $? -eq 0 ];thenecho "$image 镜像已删除"fi
fi
- runPost.sh
#! /bin/shimage=`sudo docker images | grep -w $1 | head -n 1 | awk '{print $3}'`#启动容器
sudo docker run -itd --name $1 -p 31002:31002 $imageif [ $? -eq 0 ];thenecho "$1 容器已启动"
fi
这里注意项目文件放的位置不要随意改动。
- 下面我们就可以开始构建项目了,点击
Build with Parameters
,在点击开始构建
- 可以看到项目就开始构建
- 点击 #24 这次构建进去看下日志
这里可以看到,它是先去我们给定的git地址下载项目,然后执行我们配置好的runPre.sh 脚本
这里因为我之前构建过,所以会出现删除容器,第一次构建不会出现
然后就开始执行docker-maven的构建操作
构建完成之后就会执行我们设置的脚本 runPost.sh (启动容器)
这里可以看到容器启动成功了。
网页输入地址就可以访问到我们的程序
后面我们改了代码,直接提交git,然后点击构建项目就行
(jenkins是可以自动构建了,这里主要的初步构建,就没有在说自动构建的情况)
服务器上输出 docker ps 可以看到我们构建的容器正在运行中
[root@jk ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a9f773f94ff 759df2d31d10 "java -jar jenkins.j…" 6 minutes ago Up 6 minutes 0.0.0.0:31002->31002/tcp jenkin
s
079205d605c3 rabbitmq:management "docker-entrypoint.s…" 3 days ago Up 3 days 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbit
mq
c6f4d59b04c5 bcef5fd2979d "docker-entrypoint.s…" 3 weeks ago Up 8 days 0.0.0.0:27017->27017/tcp mongo
1093a905e2cc 6678c7c2e56c "nginx -g 'daemon of…" 4 weeks ago Up 2 days 0.0.0.0:8081->80/tcp nginx
4b02188b00fe registry "/entrypoint.sh /etc…" 4 weeks ago Up 5 days 0.0.0.0:5000->5000/tcp vigoro
us_williamson
注 : 第一次启动可能会报以下错误sudo: no tty present and no askpass program specified
附上解决方法
jenkin+docker 构建项目相关推荐
- 基于Docker安装Jenkin并部署项目
基于Docker安装Jenkin并部署项目 一.安装 1.1 安装Docker 点击查看笔记:Docker安装 1.2 安装Docker Compose # 1.下载文件,使用的是国内镜像 curl ...
- 使用Maven构建项目Docker镜像并上传至阿里云镜像仓库
前言 前面介绍了Docker的一些安装.镜像加速.构建镜像 并推送至服务器 , 今天在前面的基础上新增配置 , 使项目可以具备构建镜像后将包推送至远端仓库的能力 Docker是什么?有什么 ...
- jenkin+maven+git构建项目
前提条件: Jenkins安装好maven插件,git插件 在manage jenkins-> global tool configuration中 配置jdk 配置Git 配置maven 新建 ...
- docker简单介绍、安装使用、常用命令、docker构建springboot项目、k8s安装
docker简单介绍 docker的意义 把事情简单化 Docker友好的基于CLI的工作流使各种技能水平的开发人员都可以访问构建,共享和运行容器化应用程序. 快速移动 从单个软件包安装即可在几分钟内 ...
- sonar检测java vue项目_Jenkins集成SonarQube 实现构建项目同时审查代码
软件版本: SonarQube:7.7 Jenkins:2.164.3 一.简介 SonarQube是一个开源的代码质量分析平台,便于管理代码的质量,可检查出项目代码的漏洞和潜在的逻辑问题.同时,它提 ...
- 用 Docker 构建、运行、发布来一个 Spring Boot 应用
原文同步至 http://waylau.com/docker-spring-boot/ 本文演示了如何用 Docker 构建.运行.发布来一个 Spring Boot 应用. Docker 简介 Do ...
- docker部署项目 dockerfile 实战 SpringBoot、flask
1 SpringBoot微服务打包Docker镜像 1.1 构建springboot项目 package com.example.springboot.demo;import org.springfr ...
- iis7 您无权使用所提供的凭据查看此目录或页面。_使用Spring Cloud和Docker构建微服务架构
原文:https://dzone.com/articles/microservice-architecture-with-spring-cloud-and-do作者:Alexander Lukyanc ...
- 使用docker构建并测试一个基于Sinatra的Web应用程序
内容来自<第一本Docker书>5.2节和博文整理而成 使用Docker构建并测试Web应用程序 在这个例子里,我们将创建一个应用程序,它接收输入的URL参数,并以JSON散列的结构输出到 ...
最新文章
- c#第一个程序-计算平方根
- 如何在spring中读取properties配置文件里面的信息
- IPC$连接常见问答
- 字典转模型的过程中,空值和id特殊字符的处理
- 公布自己的pods到CocoaPods trunk 及问题记录
- CF1158D. Beautiful Array
- 使用直接内存时可以更快
- 搭建微信令牌中控服务器,使用ThinkJs搭建微信中控服务的实现方法
- AI修复技术为何这么强?原来背后的技术是……
- android 有序广播例子,有序广播的实例解析--android案例《拦截有序广播》
- 运行在MAMP Pro上的PhP和Mysql更改版本教程
- Web开发中常用的linux命令 详解
- SlickEdit介绍
- Visual Assist X 10.8.2001 破解版 支持VC2013及以下版本
- 发邮件向论文作者卑微求代码模板
- 常见高斯型求积公式简介
- mysql启动报错2002_Mysql启动报ERROR:2002的分析与解决
- Uncaught Error: A <Route> is only ever to be used as the child of <Routes> element, never rendered d
- 奥特曼html代码,和平精英捏脸代码奥特曼
- 冰河浅析 - 揭开木马的神秘面纱(下)