上面的 pipeline 中有一条命令是生成Dockerfile
的,在这里做了很多优化,虽然我的Dockerfile
就写了一个FROM
,但是在这之后又会执行一系列的操作,下面我们对比下没有做优化的Dockerfile
未优化
FROM 基础镜像地址
RUN mkdir xxxxx
COPY *.jar /usr/app/app.jar
ENTRYPOINT java -jar app.jar
优化后的
FROM 基础镜像地址
优化后的Dockerfile
就这一行就完了。。。。。 下面简单介绍下这个ONBUILD
ONBUILD 可以这样理解,就比如我们这里使用的镜像,是基于 java 语言做的一个镜像,这个镜像有两部分,一个是包含 JDK 的基础镜像 A,另一个是包含 jar 包的镜像 B,关系是先有 A 再有 B,也就是说 B 依赖于 A。
假设一个完整的基于 Java 的 CICD 场景,我们需要拉代码,编译,打镜像,推镜像,更新 pod 这一系列的步骤,而在打镜像这个过程中,我们需要把编译后的产物 jar 包 COPY 到基础镜像中,这就造成了,我们还得写一个 Dockerfile,用来 COPY jar 包,就像下面这个样子:
FROM jdk基础镜像
COPY xxx.jar /usr/bin/app.jar
ENTRYPOINT java -jar app.jar
这样看起来也还好,基本上三行就解决了,但是能用一行就解决为什么要用三行呢?
FROM jdk基础镜像
ONBUILD COPY target/*.jar /usr/bin/app.jar
CMD [“/start.sh”]
打成一个镜像,比如镜像名是:java-service:jdk1.8
,在打镜像的时候,ONBUILD
后面的在本地打镜像的过程中不会执行,而是在下次引用时执行的
FROM java-service:jdk1.8
只需要这一行就可以了,并且这样看起来更加简洁,pipeline
看起来也很规范,这样的话,我们每一个 java 的服务都可以使用这一行 Dockerfile 了。
使用凭据
有时候使用 docker 进行 push 镜 《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 像时需要进行认证,如果我们直接在 pipeline 里写的话不太安全,所以得进行脱敏,这样的话我们就需要用到凭据了,添加凭据也是非常简单,由于我们只是保存我们的用户名和密码,所以用Username with password
类型的凭据就可以了,如下所示
比如说:拉取 git 仓库的代码需要用到,然后这里就添加一个凭据,对应与 pipeline 里的下面这段内容:
stage(‘Pull server code’) {
steps {
script {
checkout(
[
c l a s s : ′ G i t S C M ′ , b r a n c h e s : [ [ n a m e : ′ class: 'GitSCM', branches: [[name: ' class:′GitSCM′,branches:[[na