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>
&porting.outputEncoding>UTF-8</porting.outputEncoding>
<java.version>1.8</java.version>
&istry.name>test</istry.name>
&pository>hub.k8s</pository>
</properties>
C:\Windows\System32\drivers\etc\hosts liunx -> /etc/hosts)
<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>
2. ⼦⼯程,(对外接⼝项⽬/实现项⽬)需要在实现的项⽬内的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>${pository}/${istry.name}/${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
</plugin>
</plugins>
</build>
本地打包时, 需要将此配置进⾏注释, 打包时会根据配置进⾏打镜像, 若本地没有docker启动, 会导致报错。
3. 在实现项⽬下 与pom同⽬录下配置 Dockerfile (名称⼀致)
关于Dockerfile各个指令的含义, 作⽤本⽂不做解释, 感兴趣的可⾃⾏查阅
FROM openjdk:8
MAINTAINER peter <xx@qq>
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} app.jar
RUN sh -c 'touch /app.jar'
maven打包本地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 -d=file:/dev/./urandom -jar /app.jar" ]
4. jenkins 配置
需要注意, 将 mvn deploy命令 下放到shell中执⾏。
在parent⽬录下 执⾏ mvn clean
然后执⾏ mvn deploy, 该命令会进⾏打包,编译, 推送等⼀系列操作
作者使⽤参数话构建, 使⽤tags作为镜像版本, 也可定义其他版本, 如时间等。
5. 执⾏
执⾏之前确保jenkins指向的docker已进⾏登录私库。
在控制台输出中, 看到以下信息, 则表⽰构建,推送成功
并在私库中确认(Harbor)
说明: 打不同的版本是为了可以对项⽬进⾏升级或降级使⽤。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论