在开发过程中,我们的代码不断迭代修改BUG,如果使用C或JAVA编写代码完成后还要打包,在大型项目中单独打包耗时很久,所以衍生出持续集成概念。我们提交代码到版本控制服务器上,触发特定条件后程序会执行测试代码,测试完成后打包生成,整个过程我们称之为持续集成。
Gitlab-runner是配合gitlab ci一起使用的后台运行任务并把结果返回gitlab的服务。Gitlab-runner允许使用令牌方式运行多个任务,可以工作在多种模式下,包括本机、使用docker容器、在容器内使用SSH执行任务、在容器内连接不同云或虚拟化程序进行自动缩放、通过SSH连接到远程服务器。
1、找到持续集成地址和令牌
打开gitlab页面上的项目,这里是http://192.168.1.137:8000/xyj/flask-demo,点击Settings进入项目设置,次级目录中选择CI/CD Pipelines记录Specific Runners中提供的url和token以备后续使用。
查找持续集成令牌
2、在命令行中将gitlab项目与gitlab-runner绑定
使用docker exec命令在c-gitlab-ci容器中执行gitlab-runner register命令,将gitlab-runner和gitlab项目进行绑定。
令牌和gitlab-runner绑定
3、创建.gitlab-ci.yml文件
Gitlab 7.12版本开始使用.gitlab-ci.yml文件来控制gitlab-runner自动构建的配置文件,.gitlab-ci.yml文件存放在项目的根目录下。浏览项目主页,点击Set up CI进入自动构建配置页面。
# 使用Docker中的docker镜像
# image: python:3.6
image:docker:latest
# 服务定义了在构建期间运行的另一个Docker映像
services:
- docker:dind
# 定义构建变量
variables:
# 自定义镜像名称,使用了gitlab保留变量CI_PROJECT_ID当前项目的唯一ID
IMAGE_TAG :"myflask:$CI_PROJECT_ID"
# 定义任务可以使用的阶段,所有阶段顺序执行,如果遇到失败则后面阶段全部失败
stages:
# 测试阶段
- test
# 构建阶段,通过测试阶段后构建镜像
- build
# 提交阶段,构建完成镜像后提交到docker仓库
- push
# 清理阶段,清理构建时候产生的数据
- cleanup
# 任务名,可以自定义
build:
# 该任务所在阶段
stage:build
# 执行shell命令
script:
# - docker info
- docker build -t "$IMAGE_TAG" .
test:
image:python:3.6
stage:test
script:
- export PYTHONPATH=/builds/xyj/fullstack_blog
- apt-get update -qy
- apt-get install -y python3-dev python3-pip
- pip install -r requirements.txt
- cd blog_site/admin/test/
- echo $PYTHONPATH
# - pwd
- python test.py
# 提交
push:
# 提交阶段
stage:push
# 执行shell命令
script:
# 登录本地registry
- docker login -u "xyj" -p "docker-registry" myregistry.com:8080
# 将自动构建镜像打标签
- docker tag "$IMAGE_TAG" "myregistry.com:8080/myflask"
# 上传镜像
- docker push "myregistry.com:8080/myflask"
# 清理
cleanup:
# 清理阶段
stage:cleanup
script:
# 停止容器
# - docker stop c-test-flask
# 移除容器
# - docker rm c-test-flask
# 移除生成的镜像
- docker rmi "$IMAGE_TAG"
4、查看构建任务消息
查看构建状态
更详细内容请关注由电子工业出版社2017年10月出版的《python全栈开发实战》全书400幅图,包含各种坑解决方法。