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

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

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

  1. 项目配置, parent工程下, 如下配置
    
        UTF-8
        UTF-8
        1.8
        test
        hub.k8s.com
    

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

    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    1.8
                    1.8
                
            
        
    
  1. 子工程,(对外接口项目/实现项目)需要在实现的项目内的pom内添加

        
            
                org.springframework.boot
                spring-boot-maven-plugin
            

            
            
                org.apache.maven.plugins
                maven-surefire-plugin
                
                    true
                
            

            
                com.spotify
                dockerfile-maven-plugin
                1.4.13
                
                    
                        default
                        
                            build
                            push
                        
                    
                
                
                    ${docker.repository}/${docker.registry.name}/${project.artifactId}
                    ${project.version}
                    
                        target/${project.build.finalName}.jar
                    
                
            
        
    

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

  1. 在实现项目下 与pom同目录下配置 Dockerfile (名称一致)
    关于Dockerfile各个指令的含义, 作用本文不做解释, 感兴趣的可自行查阅
FROM openjdk:8
MAINTAINER peter 
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自动打包并向Harbor推送镜像_第1张图片
    需要注意, 将 mvn deploy命令 下放到shell中执行。
    在parent目录下 执行 mvn clean
    然后执行 mvn deploy, 该命令会进行打包,编译, 推送等一系列操作
    作者使用参数话构建, 使用tags作为镜像版本, 也可定义其他版本, 如时间等。
  2. 执行
    执行之前确保jenkins指向的docker已进行登录私库。
    jenkins自动打包并向Harbor推送镜像_第2张图片
    在控制台输出中, 看到以下信息, 则表示构建,推送成功
    jenkins自动打包并向Harbor推送镜像_第3张图片
    执行成功
    并在私库中确认(Harbor)
    jenkins自动打包并向Harbor推送镜像_第4张图片
    jenkins自动打包并向Harbor推送镜像_第5张图片
    可以看到打包的私库以进行上传。

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

你可能感兴趣的:(jenkins,Harbor)