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)
    私庫確認
    鏡像版本
    可以看到打包的私庫以進行上傳。

說明: 打不同的版本是爲了可以對項目進行升級或降級使用。

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