西虹市网

标题: 解析:CI&CD文件介绍 [打印本页]

作者: liukai    时间: 2022-4-29 23:44
标题: 解析:CI&CD文件介绍

  概述


  DevOps相关文件主要有Dockerfile、Jenkinsfile、deployment.yaml、kustomization.yaml、settings.xml。制品库是当下比较受关注的行业产品,我们网站内汇集很多最近最新的资讯,欢迎点击进入了解更多消息资讯!

  这些文件存放在CICD代码库中。

  地址:https://gitlab.corp.yatsenglobal.com/ops/yatsen-cicd-pipeline.git

  代码目录结构

  其作用分别为:

  文件        作用        详细

  Dockerfile        用于构建镜像        构建镜像必须,API等不需要部署的项目无需此文件

  Jenkinsfile        用于使用Jenkins控制整个构建部署过程        此文件必须

  deployment.yaml        用于在k8s集群部署应用        需要自由控制在k8s中部署的应用时,可以编写此文件

  kustomization.yaml        文件声明了kustomize程序提供的自定义        提供一种可以重复使用同一套配置的声明式应用管理

  settings.xml        用于在Java Maven构建过程中的Maven setting设置        Java应用编译时,需要用到

  基础JAVA镜像

  基础Java镜像为Java应用的基础应用,是在centos7.6镜像之上构建的,其中步骤主要有:

  源镜像、环境初始化、添加字体、添加nacos退出脚本、添加ssh免密登录、修改时区、更新系统、添加Java环境。

  基础Java镜像包含了除可执行Jar包及特殊配置之外的所有设置,使Java应用在下层得到统一,具体脚本如下:

  FROM centos:7.6.1810

  LABEL maintainer yatsen@yatsenglobal.com

  COPY nacos-logout.sh /

  COPY eureka-logout.sh /

  COPY simsun.ttf /usr/share/fonts/myfonts/simsun.ttf

  COPY ip_guard.sh ip_guard.sh

  COPY id_rsa /root/.ssh/

  COPY id_rsa.pub /root/.ssh/

  COPY known_hosts /root/.ssh/

  RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

  && rm -rf /etc/yum.repos.d/*

  && curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

  && curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

  && sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/*

  && yum makecache -y

  && yum upgrade -y

  && yum install -y java-1.8.0-openjdk-devel.x86_64 iproute kde-l10n-Chinese glibc-common mkfontscale fontconfig openssh openssh-clients rsync less

  && localedef -c -f UTF-8 -i zh_CN zh_CN.utf8

  && yum clean all

  && chmod +x ip_guard.sh

  && chmod 600 /root/.ssh/id_rsa

  && chmod 777 nacos-logout.sh eureka-logout.sh

  && cd /usr/share/fonts/myfonts

  && mkfontscale

  && mkfontdir

  && fc-cache -fv

  ENV LC_ALL=zh_CN.UTF-8 TIMEZONE=GMT+8 JAVA_OPTS=CONTAINER_CORE_LIMIT=

  所需文件如下

  基础Nginx镜像

  目前前端代码编译为静态文件后放在nginx下提供服务,所以编写了基础nginx镜像,针对前端静态代码文件提供统一的基础镜像。

  基础nginx镜像来源于系统nginx镜像,并修改了时区,添加了自定义nginx.conf。具体脚本如下:

  【FROM nginx:latest】 表示要制作的镜像的源镜像

  RUN命令做环境初始化,修改了时区。

  【COPY base/base-nginx/nginx.conf /etc/nginx/nginx.conf】为添加了自定义nginx.conf

  FROM nginx:latest

  LABEL maintainer sheng.zhuang@yatsenglobal.com

  RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone

  COPY base/base-nginx/nginx.conf /etc/nginx/nginx.conf

  Java应用镜像:

  Java应用镜像为最终可执行的镜像,来源于基础Java镜像,包含同事们辛苦编写的Java代码编译的可执行Jar包,并最终运行在k8s容器管理工具中为客户提供服务。

  Java应用镜像并不是必须来源于基础Java镜像,制作基础Java镜像是为了统一环境,简化开发。

  Java应用镜像具体脚本如下:

  ARG BASE_IMAGE=yatsen-registry-vpc.cn-shenzhen.cr.aliyuncs.com/base/base-java:centos7.6-jdk-8

  FROM ${BASE_IMAGE}

  LABEL maintainer=dang.wu@yatsenglobal.com

  ENV spring_profiles_active=dev spring_cloud_nacos_discovery_namespace=${NACOS_NAMESPACE} spring_cloud_nacos_config_namespace=${NACOS_NAMESPACE} NACOS_HOST=${NACOS_HOST} NACOS_PORT=${NACOS_PORT} server_port=${SERVER_PORT}

  COPY mall-activity-biz/target/mall-activity-biz.jar app.jar

  ENV server_name mall-activity-biz

  RUN mkdir -p /releases/releases/cert/

  ENTRYPOINT java ${JAVA_OPTS} -Dfile.encoding=utf-8 -Dspring.security.strategy=MODE_INHERITABLETHREADLOCAL -Djava.security.egd=file:/dev/http://www.manongjc.com/detail/urandom -XX:ActiveProcessorCount=${CONTAINER_CORE_LIMIT} -XX:InitialRAMPercentage=70.0 -XX:MaxRAMPercentage=70.0 -XX:MinRAMPercentage=70.0 -jar app.jar --spring.profiles.active=${spring_profiles_active} --NACOS-HOST=${NACOS_HOST} --NACOS-PORT=${NACOS_PORT}

  前端nginx应用镜像:

  前端nginx应用镜像为可执行的nginx镜像加上前端代码及配置所构建的镜像。包含前端同事们辛苦编写的前端代码编译的静态文件,并最终运行在k8s容器管理工具中为客户提供服务。

  前端镜像具体脚本如下(目前前端镜像分两次构建,后期会优化为一次构建):

  ARG BASE_IMAGE=yatsen-registry-vpc.cn-shenzhen.cr.aliyuncs.com/base/nginx:latest

  FROM ${BASE_IMAGE}

  LABEL maintainer sheng.zhuang@yatsenglobal.com

  RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' > /etc/timezone

  COPY base/base-admin-nginx/default.conf /etc/nginx/conf.d/default.conf

  RUN mkdir -p /var/log/nginx/

  COPY dist/ /data/www/mall-web-admin

  Jenkinsfile:

  Jenkinsfile是Jenkins流水线Pipeline的构建代码脚本。将Jenkins构建任务用代码的形式进行管理和维护。下方构建权限给开发者。

  Jenkinsfile常用方式将流水线分按照功能分为逻辑上的四段:流水线检查、初始化、拉取代码(Git)、编译构建(Package)、制作镜像(Build) 、部署(Deploy),如下所示:

  后端:

  @Library('yatsen-cicd-pipeline') _

  pipeline {

  agent {

  kubernetes {

  #在jenkins Configure Clouds中配置的名字

  cloud 'kubernetes'

  }

  前端:

  普通前端

  @Library('yatsen-cicd-pipeline') _

  pipeline {

  agent {

  kubernetes {

  #在jenkins Configure Clouds中配置的名字

  cloud 'kubernetes'

  }

  共享前端

  @Library('yatsen-cicd-pipeline') _

  pipeline {

  agent {

  kubernetes {

  #在jenkins Configure Clouds中配置的名字

  cloud 'kubernetes'

  }

  }

  上述Jenkins使用的工具解析:

  打包镜像并且推送镜像到镜像仓库用的命令是:

  kaniko

  参看文档:https://github.com/GoogleContainerTools/kaniko#using-kaniko

  部署使用的命令是

  kustomize

  参考文档:

  https://www.qikqiak.com/post/kustomize-101/

  https://github.com/kubernetes-sigs/kustomize

  https://kustomize.io/

  原文地址:https://www.cnblogs.com/Mr-Axin/p/14744653.html
作者: 水上飘    时间: 2022-5-26 11:51
沙发!沙发!
作者: 黯然    时间: 2022-7-1 11:54
真是 收益 匪浅
作者: 苦浪漫    时间: 2022-8-13 13:34
路过,支持一下啦
作者: 吴浩    时间: 2022-10-11 10:51
沙发!沙发!
作者: 吴浩    时间: 2022-12-4 10:36
帮你顶下哈!!
作者: 欲望!    时间: 2022-12-21 00:17
有道理。。。




欢迎光临 西虹市网 (http://bbs.xihong021.cn/) Powered by Discuz! X3