『中级篇』docker之CI/CD持续集成—真实Python项目的CI演示(72)
2018-10-28 01:43:21
李明
  • 访问次数: 379
  • 注册日期: 2018-07-09
  • 最后登录: 2020-03-30

原创文章,欢迎转载。转载请注明:转载自 IT人故事会,谢谢!
原文链接地址: 『中级篇』docker之CI/CD持续集成—真实Python项目的CI演示(72)

上次主要说了在githubCI的服务器,并且也演示了github的runner执行CICD,这次通过真实的python项目来演示下CICD。项目通过gitlab和gitlabCI进行CICD。
源码地址: https://github.com/limingios/docker-cloud-flask-demo
源码: https://github.com/limingios/docker/tree/master/No.11

随便找一个开源的python的在github项目。添加到gitlab上。

copy到gitlab上

  • new project


    166b69ee65cbad25?w=1240&h=322&f=png&s=42

  • Git repository URL

https://github.com/limingios/docker-cloud-flask-demo

166b69ee664c12a1?w=1240&h=668&f=png&s=17

  • 点击create project

166b69ee66e5bbd2?w=1240&h=655&f=png&s=12
166b69ee665a6f75?w=1240&h=347&f=png&s=49

思考

上次注册了ci的runner,其实这个runner就是一个shell,通过命令的形式在ci服务器上运行该运行的程序。有可能ci服务器没有装python2 或者python3,我们可以在ci服务器里面装python2或者python3,但是如果想一下,这个ci服务器有很多人在用的话,python有很多环境,python有很多不同的依赖,如果环境全部都装在这个shell里面是不是很混乱,不光是python项目,如果有java项目啊,js的项目都装一下包肯定会很乱很乱,怎么去解决这个问题,看来只能通过docker了。

runner管理新的flask-demo

166b69ee6717e86c?w=1240&h=556&f=png&s=22

python2.7的环境

 sudo gitlab-ci-multi-runner register

166b69ee8eab9bc6?w=1240&h=316&f=png&s=49

python3.4的环境

 sudo gitlab-ci-multi-runner register

166b69ee8eb1f8ed?w=1240&h=335&f=png&s=50

sudo gitlab-ci-multi-runner verify

166b69ee8f279274?w=719&h=104&f=png&s=360

新建github-ci 文件

166b69ee95761563?w=1240&h=719&f=png&s=14
166b69ee90ad585d?w=1240&h=560&f=png&s=61

stages:   - style   - test pep8:   stage: style   script:     - pip install tox     - tox -e pep8   tags:     - python2.7      unittest-py27:    stage: test    script:      - pip install tox      - tox -e py27    tags:      - python2.7 unittest-py34:    stage: test    script:      - pip install tox      - tox -e py34    tags:      - python3/4

166b69ee976a6a96?w=1240&h=344&f=png&s=28

本地docker没有提前拉取镜像,下载python2.7 和 python3.4的比较慢,我直接增加了加速器

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://b81aace9.m.daocloud.io sudo systemctl restart docker

166b69eecfd939d2?w=1089&h=274&f=png&s=31

结果还是报错了,开始分析:

Cloning repository... Cloning into '/builds/root/flask-demo'... fatal: unable to access 'http://gitlab-ci-token:xxxxxxxxxxxxxxxxxxxx@gitlab.example.com/root/flask-demo.git/': Couldn't resolve host 'gitlab.example.com' ERROR: Job failed: exit code 1

166b69eed26d7d99?w=1215&h=303&f=png&s=37

Runner启动的docker容器里无法访问到gitlab.example.com 这个地址(能访问到才怪)。这一般是由于我们的测试环境没有使用域名导致的, gitlab论坛里也不少人讨论这个问题,如果你是在部署正式的gitlab环境,那你自然会有一个域名来使用。不过我这里只是搭建测试环境,所以我使用了一种投机的方法:

修改Runner的/etc/gitlab-runner/config.toml 文件,在其中的[runner.docker] 下增加:

sudo vi /etc/gitlab-runner/config.toml

166b69eeda6395c8?w=763&h=603&f=png&s=151
166b69eee7306db6?w=846&h=631&f=png&s=167

成功了 重新Retry

166b69eee7a8be6e?w=1196&h=748&f=png&s=36
166b69eee88f64c8?w=1211&h=748&f=png&s=34
166b69eef52be9b2?w=787&h=308&f=png&s=193
166b69eeff3c7b69?w=707&h=323&f=png&s=179
166b69ef04821be0?w=1155&h=707&f=png&s=65

PS:这次主要给大家简单的介绍下CI,还没设计到CD。下次吧!

166b140b7f118904?w=1080&h=541&f=png&s=45