jenkins自动打包并向Harbor推送镜像

记录, 使用jenkins自动打包并向私库推送镜像, 不限制于Harbor。该问题因为一个小点没有想到, 导致调查了一天,多次尝试,阅读大量相关的文章并未解决作者的问题。 所以作为记录,供读者多一个参考的方向。

使用说明, jenkins,github, docker, Harbor, nexus3均已部署, 环境jdk, maven, git 已配置。
nexus3作为maven私库, 其他服务jar包引用使用。
Harbor作为集群镜像服务, 其他子节点配置 “insecure-registries” 并登录即可使用Harbor作为镜像私库。
两者均使用的原因, 无非是Harbor镜像管理优于nexus3.

  1. 项目配置, parent工程下, 如下配置
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <docker.registry.name>test</docker.registry.name>
        <docker.repository>hub.k8s.com</docker.repository>
    </properties>

docker.repository: Harbor镜像私库,该域名为本地域名, 需要在本地进行配置(win -> C:\Windows\System32\drivers\etc\hosts liunx -> /etc/hosts)
docker.registry.name: Harbor新建的项目分组

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
  1. 子工程,(对外接口项目/实现项目)需要在实现的项目内的pom内添加
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <!--             打包时跳过单元测试 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>

            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>dockerfile-maven-plugin</artifactId>
                <version>1.4.13</version>
                <executions>
                    <execution>
                        <id>default</id>
                        <goals>
                            <goal>build</goal>
                            <goal>push</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repository>${docker.repository}/${docker.registry.name}/${project.artifactId}</repository>
                    <tag>${project.version}</tag>
                    <buildArgs>
                        <JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
                    </buildArgs>
                </configuration>
            </plugin>
        </plugins>
    </build>

本地打包时, 需要将此配置进行注释, 打包时会根据配置进行打镜像, 若本地没有docker启动, 会导致报错。

  1. 在实现项目下 与pom同目录下配置 Dockerfile (名称一致)
    关于Dockerfile各个指令的含义, 作用本文不做解释, 感兴趣的可自行查阅
FROM openjdk:8
MAINTAINER peter <[email protected]>
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
RUN sh -c 'touch /app.jar'
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
  1. jenkins 配置
    jenkins配置
    需要注意, 将 mvn deploy命令 下放到shell中执行。
    在parent目录下 执行 mvn clean
    然后执行 mvn deploy, 该命令会进行打包,编译, 推送等一系列操作
    作者使用参数话构建, 使用tags作为镜像版本, 也可定义其他版本, 如时间等。
  2. 执行
    执行之前确保jenkins指向的docker已进行登录私库。
    构建项目
    在控制台输出中, 看到以下信息, 则表示构建,推送成功
    推送
    执行成功
    并在私库中确认(Harbor)
    私库确认
    镜像版本
    可以看到打包的私库以进行上传。

说明: 打不同的版本是为了可以对项目进行升级或降级使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章