.gitlab-ci.yaml自动镜像打包&&互联网企业规范化上线流程(上) —— k8s从入门到高并发系列教程 (六)

        前文介绍了镜像的制作以及把项目代码和根据环境需要的配置文件手动打包生成镜像。然而在实际企业当中,当分支即将被合并或已经被合并到特定环境后,是由 cicj 流程监听分支合并事件,根据情况决定对代码进行检查是否允许合并,当允许合并后,启动一个基于docker的镜像,把项目源代码克隆进来后,结合对应环境的配置信息,利用企业的基础镜像,打包成一个可以在线上部署的镜像,并推送到企业的私有镜像仓库中。

微服务基础镜像 docker-phpfpm && docker-cli 项目

        微服务基础镜像的dockerfile文件参照这篇教程:nginx-php镜像安装常用软件 —— k8s从入门到高并发系列教程 (三)由运维管理,独立为 docker-phpfpm 项目。当dockerfile文件变更并合并到master分支时,由gitlab 的 cicj自动打包生成新的镜像并放到企业的私有镜像仓库。

        .gitlab-ci.yml 文件内容如下

stages:
  - build

build-docker:
  stage: build
  image: docker
  only:
    - main
  script:
    - docker login $docker_url -u $docker_user -p $docker_password
    - docker build -t docker/php-fpm:v7.2 .
    - docker tag docker/php-fpm:v7.2 $docker_url/mustafa_public/php-fpm:v7.2
    - docker push $docker_url/mustafa_public/php-fpm:v7.2

        当分支被合并到main分支时,gitlab 启动一个基于 docker 镜像的容器,把项目源代码拷贝到这个容器中,该容器具备操作宿主机docker的能力。在该容器中登陆企业的私有镜像仓库、打包镜像并推送到企业的私有镜像仓库。

        关于安装gitlab的docker runner,参照这篇文件 gitlab runner 之docker

        docker-cli项目同docker-phpfpm项目,只不过dockerfile的基础镜像从  php:7.2-fpm 换成 php:7.2-cli

        开发人员的业务项目中并不包含运维任何的代码,开发人员只关注实现业务需求、通过测试后,自动执行的上线检查,其中包括上文介绍过的语法检查和代码格式规范检查,检查通过后允许合并分支。

        上线检查过程,使用到docker-cli项目,安装依赖包以及执行php命令。对应的.gitlab-ci.yml 文件内容如下

stages:
  - install
  - test

cache:
  key: $CI_COMMIT_REF_SLUG:$CI_PIPELINE_ID
  paths:
    - vendor/

安装依赖包:
  stage: install
  image: dockerhub.qingcloud.com/mustafa_public/php-cli:v7.2
  script:
    - composer install

语法检测:
  stage: test
  image: dockerhub.qingcloud.com/mustafa_public/php-cli:v7.2
  script:
    - composer analyse


代码规范检查:
  stage: test
  image: dockerhub.qingcloud.com/mustafa_public/php-cli:v7.2
  script:
    - composer cs

        先安装依赖包,再执行语法检测和代码规范检查,整个过程中共享了php的vendor目录,基于上面说的php-cli项目。检查通过后,分支就可以合并了。

        当分支被合并后,需要拿着合并好的源代码,到运维管理的 test_cd 项目,找对应环境对应项目的配置信息,拿到它的Dockerfile文件,执行构建命令进行打包和镜像推送。

线上部署项目 test_cd

         该项目分支包含 develop 开发环境 、test 测试环境 pre 预发布环境、product 线上环境。每个分支的一级目录为研发人员的微服务git名称,可以根据git push时附带的项目名称找到项目配置信息的路径。项目路径下包含一个Dockerfile文件,可以根据这个文件打包对应环境的镜像。docker文件里有该dockerfile文件所依赖的一些配置信息。www文件夹为对应微服务的源代码目录,这是个空目录。

        研发人员各自服务项目的cicj文件里,有类似如下的流程:

stages:
  - build

代码发送到cd项目:
  stage: build
  image: dockerhub.qingcloud.com/mustafa_public/mydocker:v1
  only:
    - main
  variables:
      ENV: "product"
      CD_REPO: git@gitlab.com:jiangliuer3264_docker/test_cd.git
  script:
    - git clone $CD_REPO -b $ENV /tmp/cd
    - cp -r . /tmp/cd/$CI_PROJECT_NAME/www
    - cd /tmp/cd/$CI_PROJECT_NAME
    - docker login $docker_url -u $docker_user -p $docker_password
    - docker build -t $CI_PROJECT_NAME"_"$ENV:$CI_COMMIT_SHA --build-arg APP_ENV=$ENV .
    - docker tag $CI_PROJECT_NAME"_"$ENV:$CI_COMMIT_SHA $docker_url/mustafa_project/$CI_PROJECT_NAME"_"$ENV:$CI_COMMIT_SHA
    - docker push $docker_url/mustafa_project/$CI_PROJECT_NAME"_"$ENV:$CI_COMMIT_SHA

当合并到主分支后,指定环境变量env 为 product。克隆负责部署的cd项目的product分支。把合并通过的源代码复制到cd部署项目对应目录下的www目录中。打包和推送镜像,打包传参为环境变量。

cd项目的dockerfile文件内容如下

FROM dockerhub.qingcloud.com/mustafa_public/php-fpm:v7.2

# 获取环境变量,写入yaf的配置文件
ARG APP_ENV
RUN echo "yaf.environ=$APP_ENV" >> /usr/local/etc/php/conf.d/docker-php-ext-yaf.ini

# 拷贝nginx配置文件
ADD docker/conf/nginx /etc/nginx/conf.d

# 拷贝项目源文件,打包镜像
ADD www ./

# 安装composer依赖包
RUN composer install --no-dev -o

        就是拿php-fpm基础镜像,根据传进来的环境变量参数,写yaf配置文件,拷贝nginx配置文件,拷贝项目的源代码,下载依赖。

        这样我们就实现了push项目到main分支,自动打包生成可直接运行的镜像。

       

有亮点需要注意以下:

1. 每次打包生成镜像的版本号都不一样,通过 $CI_COMMIT_SHA 区分,是为了方便遇到问题及时回滚

2. 由于需要在docker镜像中使用git 克隆企业内部另一个项目的源代码,docker镜像无该功能,需要基于docker镜像制作一个新的镜像。

docker-mybasic项目

用于生成满足企业内部使用的基于docker的、执行实际部署任务的镜像,dockerfile文件内容如下

FROM docker

RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.cloud.tencent.com/g' /etc/apk/repositories

RUN apk add --no-cache git

COPY ssh2/* /root/.ssh/
RUN chmod 600 /root/.ssh/id_rsa
RUN echo "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
RUN git config --global user.email "testmydocker@mustafa.com" && git config --global user.name "testmydocker"

        

 相关链接

手把手教你部署nginx+php

php和nginx镜像合并 && 代码打包到镜像 

nginx-php镜像安装常用软件 

yaf && yar微服务/hprose微服务 镜像初始化 

常用开发工具:php_codesniffer代码规范检查&修复、phpstan语法检查、phpunit单元测试 

.gitlab-ci.yaml自动镜像打包&&互联网企业规范化上线流程(上) 

kustomize/kubectl自动镜像部署&&互联网企业规范化上线流程(下) 

apisix网关、JMeter压测  

prometheus/grafana监控数据收集与展示 

k8s容器网络性能调优 

supervisor进程管理 

安装opcache和apcu 

APM性能监测工具skywalking 

链路跟踪工具zipkin

phpfpm和nginx配置

php整合apollo配置中心

php rdkafka操作kafka消息队列

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fanghailiang2016

扔个包子砸我一下吧~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值