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
命令
这样容器就启动起来了。
- 最后在看一下shell文件(runPre.sh)
#! /bin/sh
dockerPs=`sudo docker ps | grep -w $1 | head -n 1 | awk '{print $1}'`
if [ "$dockerPs" != "" ];then
sudo docker stop $dockerPs
if [ $? -eq 0 ];then
echo "$dockerPs 容器已停止"
fi
fi
dockerPsAll=`sudo docker ps -a | grep -w $1 | head -n 1 | awk '{print $1}'`
if [ "$dockerPsAll" != "" ];then
sudo docker rm $dockerPsAll
if [ $? -eq 0 ];then
echo "$dockerPsAll 容器已删除"
fi
fi
image=`sudo docker images | grep -w $1 | head -n 1 | awk '{print $3}'`
if [ "$image" != "" ] ;then
sudo docker rmi $image
if [ $? -eq 0 ];then
echo "$image 镜像已删除"
fi
fi
- runPost.sh
#! /bin/sh
image=`sudo docker images | grep -w $1 | head -n 1 | awk '{print $3}'`
#启动容器
sudo docker run -itd --name $1 -p 31002:31002 $image
if [ $? -eq 0 ];then
echo "$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
附上解决方法