从Maven构建Docker到Jenkins

1、使用Maven插件构建Docker镜像

1.1、在pom.xml中添加Docker配置

<build>
    <plugins>
        <plugin>
             <groupId>com.spotify</groupId>
             <artifactId>docker-maven-plugin</artifactId>
             <version>1.0.0</version>
             <executions>
                 <!--将docker插件绑定到某个phase执行-->
                 <execution>
                     <id>build-image</id>
                     <phase>package</phase>
                     <goals>
                        <goal>build</goal>
                     </goals>
                </execution>
            </executions>
            <configuration>
                <imageName>test-repository/${project.artifactId}:${project.version}</imageName>
                <dockerHost>http://${dockerHost}:2375</dockerHost>
                <!--覆盖构建相同标签的镜像-->
                <forceTags>true</forceTags>
                <!--dockerfile的位置-->
                <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
                <!--jar名称配置,用在dockerfile中,需要自己写的可不用此配置-->
                <buildArgs>
                    <JAR_FILE>${project.build.finalName}.jar</JAR_FILE>
                </buildArgs>
                <!--jar源位置-->
                <resources>
                    <resource>
                        <targetPath>/</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
                <!-- 1.4.2 与maven配置文件settings.xml中配置的server.id一致,用于推送镜像 -->
                <serverId>docker-hub</serverId>
            </configuration>
        </plugin>
    </plugins>
</build>

 (1)imageName:用于指定镜像名称,其中test-repository是仓库名称,${project.artifactId}是镜像名称,${project.version}是标签名称。

 (2)resources.resource.directory:用于指定需要复制的根目录,${project.build.directory}表示target目录。

(3)resources.resource.include:用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。

1.2 执行命令,构建docker镜像

mvn clean package docker:build

 1.3 将插件绑定在某个phase执行

       很多情况下,有这样的需求,例如执行mvn clean package时,插件自动构建docker镜像。想要实现这点,只需将插件的goal绑定在某个phase。

命令格式:mvn phase:goal

例如:mvn package docker:build

那么package和docker都是phase,build是goal。

则需要添加如下配置:

<executions>
  <execution>
    <id>build-image</id>
    <phase>package</phase>
    <goals>
      <goal>build</goal>
    </goals>
  </execution>
</executions>

1.4 使用Maven推送镜像

1.4.1、修改maven的全局配置文件settings.xml。配置docker hub的用户信息。

<server>
  <id>docker-hub</id>
  <username>你的DockerHub用户名</username>
  <password>你的DockerHub密码</password>
  <configuration>
    <email>你的DockerHub邮箱</email>
  </configuration>
</server>

 1.4.2、修改pom.xml

                如上注释

1.4.3、执行命令,添加pushImage的标识,标识推送镜像

mvn clean package docker:build  -DpushImage

 1.5、项目中配置Dockerfile

根据上面的<dockerDirectory>标签配置的地址添加

 Dockerfile配置如下:

# 该镜像需要依赖的基础镜像
FROM java:8
ARG JAR_FILE
# 复制打包完成后的jar文件到/opt目录下
COPY ${JAR_FILE} /test-1.0-SNAPSHOT.jar
# 运行过程中创建一个test-1.0-SNAPSHOT.jar文件
RUN bash -c 'touch /test-1.0-SNAPSHOT.jar'
# 声明服务运行在2020端口
EXPOSE 2020
ENV JAVA_OPTS="-Xms256m -Xmx512m"
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /test-1.0-SNAPSHOT.jar" ]

2、Jenkins构建Maven项目

2.1、创建一个任务

1)新建Item

 2)创建项目

2.2项目配置 

2.2.1、配置丢弃旧的构建。根据需要配置

2.2.2、配置Git

配置能拉取到分支的账号,注意git用户权限

 2.2.3、配置构建镜像

DdockerHost与pom中<dockerHost>对应

2.2.4、配置运行脚本

服务器信息在首页——》系统管理——》系统配置——》SSH remote hosts节点,可配置多台

最终结果

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值