上篇????Gitlab CICD 与Kubernetes实践·部署GitLab Runner文章内通过Kubernetes已经完成Gitlab Runner的部署的,现在我通过一个实际的案例来测试和使用Gitlab Runner在持续集成方面的优势。查看本系列文章:
服务背景
通过Gitlab CI完成Flask web Service服务代码风格检查、单元测试、打包、发布到k8s环境里面,同时我们会在.gitlab-ci.yml
文件中配置基于分支branch
和tag
的匹配执行相应的操作任务。Flask web Service
是一个带有web登录界面的测试代码服务,服务运行的端口为5000
,下面是该服务构建Docker镜像的Dockerfile
FROM python:3.4
COPY . /skeleton
WORKDIR /skeleton
RUN pip install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com # 配置pip源,加速下载
EXPOSE 5000
ENTRYPOINT ["sh", "scripts/dev.sh"]
定义.gitlab-ci.yml
然后为项目准备.gitlab-ci.yml
文件,这个文件稍微有点长,可以通过????远程调用模板库的方式优化配置,此处我们不在多说:
stages: # 此处分为五个阶段,按顺序执行对应的环节
- style
- test
- release
- review
- deploy
pep8: # pep8是自定义命名的jobs
image: python:2.7 # 指定下面script块的指令在哪个镜像运行的容器环境内运行
stage: style # 声明该pep8的job是属于哪个stage阶段运行
script: # 该阶段执行的操作,其实就像在terminal里面执行命令一样。
- pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com tox
- tox -e pep8 # 使用tox命令进行pep8代码格式检查规范性检查,配置文件为当前项目下的tox.ini
unittest-py2.7:
image: python:2.7
stage: test
script:
- pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com tox
- tox -e py27 # 指定使用py27虚拟环境
unittest-py3.4:
image: python:3.4
stage: test
script:
- pip install -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com tox
- tox -e py34 # 指定使用py34虚拟环境
buildimage:
image: docker:latest # 该环节需要构建镜像,需要docker二进制命令,所以指定一个docker镜像
variables: # 给buildimage这个job传递的变量
DOCKER_DRIVER: overlay
DOCKER_HOST: tcp://localhost:2375 # 与service指定容器通信
services:
- name: docker:17.03-dind
command:
- "--registry-mirror=https://*****.mirror.aliyuncs.com" # 配置镜像加速,当登录私有镜像仓库的时候,如果仓库的证书不受信任,可以在下方添加`--insecure-registry=*****`选项
stage: release
script:
- docker login -u "${CI_REGISTRY_USER}" -p "${CI_REGISTRY_PASSWORD}" ${CI_REGISTRY_REPO_URL} # 登录私有或者共有镜像仓库
- docker build -t "${CI_REGISTRY_IMAGE}:latest" -f ./Dockerfile . # 构建镜像
- docker tag "$