设计的原因

    • 主要是为了减少耦合和依赖,随时可以迁移到新的CICD系统
    • Dockerfile多阶段构建把所有的项目构建步骤都完成了,即便脱离了Jenkins系统也可以手动构建出镜像来,而且Dockerfile的环境问题相对简单
    • 弱化Jenkins的处理,也不要配置比较复杂的Jenkins运行环境

    CICD职责划分
    Jenkins负责的事情

    • 拉取Git代码
    • 自动构建docker image
    • 发布

    Dockerfile负责的事情

    • 项目的构建环境
    • 项目的构建步骤
    • 最终的运行环境

    交付规范

    • 以docker image作为交付的标准
    • 开发要提供可以运行的docker image,如果image本身不能运行,需要开发排查
    • 运维则是将开发提供的image跑在生产环境中,并提供运行保障和监控

    git项目名字规范

    • 因为jenkins构建部署的时候需要用到项目名字(project_name) 和项目组名字(project_group)
    • k8s的name规范是不允许有下划线(_)的
    • git name规范就要必须是以(-)作为分隔符,比如(go-web-demo)
    • 不按照这个规范,就需要项目单独维护自己的Jenkinsfile

    目录结构规范

    • Dockerfile这个必须要求位于项目的根目录
    • dockerignore类似gitignore,把不需要拉进去docker上下文环境的文件去除掉 | .
      ├── .dockerignore
      ├── Dockerfile
      └── deploy
      ├── Jenkinsfile
      └── manifests
      ├── deploy.yaml
      ├── svc.yaml
      └── ingress.yaml | | :—- |

    Dockerfile编写规范
    容器时间和系统源更换为国内

    • 这边服务运行的基础镜像一般是两个(alpine操作系统或者centos操作系统)
    • 运行环境配置不复杂的,使用alpine系统,因为这个最小
    • 运行环境配置复杂的,使用centos系统,因为这个最熟悉
    • registry.k8s.clicki.cn/sunteng 这个项目下的镜像是直接从dockerhub直接拉取过来的,没有修改过系统时间
    • registry.k8s.clicki.cn/common 这个项目一般都是运维制作的基础镜像,一般centos系统来的,是修改过系统时间的
    • alpine系统 更换系统源和修改系统时间 | FROM registry.k8s.clicki.cn/sunteng/node:12.16.3-alpine3.9
      # alpine 系统 更换系统源和修改系统时间 # 替换成中科大
      RUN sed -i ‘s/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g’ /etc/apk/repositories && \
      apk update && \
      apk add -U tzdata && \
      ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime | | :—- |

    • centos系统 更换系统源和修改系统时间 | | | :—- |

    语言包源更换为国内

    安全问题

    • 千万不能把kubernetes的key或者gitlab的key以及各种密码打包进容器里面
    • 要统一使用Jenkins的凭据管理来管理这些密码以及key信息

    Jenkinsfile规范

    • Jenkins共享库的维护,有运维组来维护这个代码库,开发可以查看或者提出一些公共函数或变量的需求
    • 如果完全按照规范来建立项目的话,开发直接调用共享库里面的deploy函数,不需要开发独自维护 | #!groovy
      // 共享库引用
      @Library(‘jenkins-lib’) _
      // all in one
      deploy() | | :—- |

    • 项目比较复杂的,就不能公用了,需要这个项目独自维护Jenkinsfile

    Jenkins共享库(Share Library)
    URL: http://git.clicki.cn/jenkins/jenkins-lib.git
    参考项目
    一开始可以先参考没有使用共享库的Jenkinsfile编写,容易理解很多
    URL: http://git.clicki.cn/jenkins/go-web-demo/blob/master/deploy/Jenkinsfile-no-lib
    线上会使用带有共享库引用的Jenkinsfile,便于后期的维护
    URL: http://git.clicki.cn/jenkins/go-web-demo/blob/master/deploy/Jenkinsfile
    Jenkins构建job
    URL: http://192.168.11.52:30001/job/demo-go-web