使用Maven、jenkins、docker实现持续集成

之前使用过jenkins+maven的方法自动构建项目并推送到tomcat的方法–>传送门

由于spring boot/cloud等的微服务的流行,人们更喜欢即开即用的方式。docker作为一个免费开源的容器,越来越多的应用也都会存在一个docker版本(比如jenkins、gitlab)。不过spring boot只需要一句命令就能启动也可以不需要创建一个docker版本。

安装

必须的系统环境:

  • Jdk(推荐还是用Oracle JDK,Jenkins执行编译的过程还是需要Oracle JDK的,方便起见替换掉系统的openjdk)
  • Maven
  • Docker
  • Git
  • Jenkins

docker hub 配置

使用docker官方的registry保存镜像,并不知道有没有限制。
create repo
创建一个私有Repo,repository的名称将作为镜像的名称

Maven配置

使用Maven构建docker镜像的话需要使用docker-maven-plugin

pom.xml添加插件和配置信息,根据官方的实例修改配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.11</version>
<configuration>
<!-- 目标位置 -->
<serverId>docker-hub</serverId>
<!-- 用户名/镜像名 -->
<imageName>tusik/web</imageName>
<!-- Dockerfile的位置 -->
<dockerDirectory>src/main/docker</dockerDirectory>
<pushImage>true</pushImage>
<!-- 镜像的标签,project.version在properties标签下添加 -->
<imageTags>
<imageTag>${project.version}</imageTag>
<imageTag>latest</imageTag>
</imageTags>
<entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
<!-- copy the service's jar file from target into the root directory of the image -->
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>

根据上面的配置在Maven的setting.xml下添加全局的docker hub信息

1
2
3
4
5
6
7
8
9
10
<servers>
<server>
<id>docker-hub</id>
<username>foo</username>
<password>secret-password</password>
<configuration>
<email>foo@foo.bar</email>
</configuration>
</server>
</servers>

可以此时进入项目运行

1
mvn clean package docker:build -DpushImageTag

or

1
mvn clean package docker:build -DpushImage

进行测试能否正常工作,如果出现Permission denied的错误提示则需要把jenkins用户加入docker用户组sudo usermod -aG docker jenkins,或者直接chmod 777 /var/run/docker.sock

Dockerfile

可以根据自己需求修改内容

1
2
3
4
5
6
FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD web-0.0.1-SNAPSHOT.jar app.jar
RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

Jenkins

创建项目并设置完git仓库地址和hook只后配置maven部分
maven setting
当git中触发push事件之后就会请求hook,jenkins开始拉取并开始使用maven构建项目,完成之后根据Dockerfile将jar打包进image并上传到docker hub

只是要注意tag,相同的tag将会被覆盖

文章作者: Image
文章链接: https://by.cx/2018/07/29/maven-jenkins-docker/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编译程序