设为首页 收藏本站
查看: 1695|回复: 0

[经验分享] 『中级篇』docker之CI/CD持续集成

[复制链接]

尚未签到

发表于 2019-2-20 11:55:33 | 显示全部楼层 |阅读模式
  >原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!
>原文链接地址:『中级篇』docker之CI/CD持续集成-项目生成镜像(76)
  开始想用docker registry做私有镜像库,后来放弃了,知道的老铁应该知道这个玩意没有界面很不爽,后来选择了Harbor,还是通过vagrant 创建一个虚拟服务器,这样下来一共创建3个了,也就在生产环境下估计需要3个以上才可以完成整个的CICD持续化集成。前期的3个要求都是4g双核的,gitlab,gitlabci,Harbor 都是这样要求的。我的电脑i7处理器,16g内存让老铁看看跑起来后的效果。源码:https://github.com/limingios/docker/tree/master/No.11

DSC0000.jpg


通过vagrant 安装

vagrant reload
DSC0001.jpg


下载Harbor


  • 选择目前最新版本1.5.2
    https://github.com/vmware/harbor/releases
    我选择的是online版本,两种版本基本上差不多。 
    sudo yum -y install lrzsz
    #在windows下载的1.5.2 online 上传上去
    rz
DSC0002.jpg



  •   解压harbor

    tar xvf harbor-online-installer-v1.5.2.tgz
  •   安装

    cd harbor
    sudo ./install.sh
    DSC0003.jpg


  •   需要换成另外一种安装方法。

    sudo ./prepare
    DSC0004.jpg


  • 真正的安装
    sudo docker-compose up -d
    DSC0005.jpg



安装成功

  访问机器:172.28.128.6 我是自动获取的ip

DSC0006.jpg


  正常访问
用户名:admin
密码:Harbor12345
可以执行如下的命令进行停止和启动

DSC0007.jpg

DSC0008.jpg


  停止

sudo docker-compose stop
DSC0009.jpg

  启动

sudo docker-compose start
DSC00010.jpg



测试harbor


  •   启动服务

    sudo serivce docker restart
    cd harbor
    sudo docker-compose start
    DSC00011.jpg


  • 修改参数
      docker默认是从官方拉取镜像的,并且从1.12版本之后,默认私有仓库是使用https来进行连接,所以我们这里需要进行一些相应的修改:



sudo vi /etc/docker/daemon.json
#写入{"insecure-registries":["172.28.128.6"]}
sudo systemctl restart docker  
  目前很多文章都是通过修改docker的配置文件“etc/systemconfig/docker",重启docker来解决这个问题。但发现docker1.12.3版本并无此文件,根据网上创建此文件,并填入相应内容,重启docker无效果,仍然报此错误。
解决方法:在”/etc/docker/“目录下,创建”daemon.json“文件。在文件中写入

DSC00012.jpg


  harbor 就是使用的80端口,根本不就需要在docker-compose.yml 配置什么5000端口。


#因为没配置http的过滤, 某人是使用https,就拒绝了。
connect: connection refused
#配置了上边的insecure-registries
server gave HTTP response to HTTPS client
  最后登录,直接sudo docker login 私服地址不要加什么端口号
用户名:admin
密码:Harbor12345

DSC00013.jpg


push 镜像试试


  • 新建用户
DSC00014.jpg



  • 新建项目
DSC00015.jpg


#这个错误,就是未建立项目。
f9d9e4e6e2f0: Preparing
denied: requested access to the resource is denied

  • push项目

    sudo docker pull busybox
    sudo docker tag busybox 172.28.128.6/idig8/busybox
    sudo docker login 172.28.128.6 -u idig8 -p 123456789
    sudo docker push 172.28.128.6/idig8/busybox


![](https://upload-images.jianshu.io/upload_images/11223715-32e7643aa5456e78.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://upload-images.jianshu.io/upload_images/11223715-ce7f8cda9277c2ac.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://upload-images.jianshu.io/upload_images/11223715-c64af22cd5f5b5fb.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](https://upload-images.jianshu.io/upload_images/11223715-1dd1da248f4d736b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
>终于成功了,前前后后大概怼了3个多小时,从10点对到了凌晨1点。吸口烟,百度里面太多坑爹了,很多人写文章就是直接复制,转载我不知道他到底实践没有,我这边都是边实践帮告诉大家咋用。感觉harbor真的比docker 仓库爽太多了,看到中文的那一刻我感觉我以后必须用这个放弃docker仓库。
### 远程连接harbor
* 查找Docker的服务文件:登录到已经安装Docker的服务器,输入 systemctl status docker 查看Docker的service文件。
``` bash
sudo systemctl status docker
DSC00016.jpg



  •   编辑docker.service文件:在ExecStart处添加 –insecure-registry 参数。

    sudo vi /usr/lib/systemd/system/docker.service
    DSC00017.jpg


  • 重新加载service文件,重启docker服务。
    sudo systemctl daemon-reload
    sudo systemctl restart docker
DSC00018.jpg



  • 尝试远程登录
    sudo docker login http://172.28.128.6 -u admin -p Harbor12345
    DSC00019.jpg



gitlab gitlab-ci harbor

  通过gitlab-ci往harbor上打对应的镜像包



  • 修改  .gitlab-ci.yml
      增加release,当打包的时候执行生成镜像并发送到远程harbor服务器上。
    另外说明下,虽然咱们在crt编辑器连接linux的时候需要前面加上sudo,但是在script脚本的时候,不允许加入sudo,如果加了 就会报错。



stages:
- style
- test
- deploy
- release
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
docker-deploy:
stage: deploy
script:
- docker build -t flask-demo .
- if [ $( docker ps -aq --filter name=web) ]; then docker rm -f web;fi
- docker run -d -p 5000:5000 --name web flask-demo
tags:
- test1
only:
- master
docker-image-release:
stage: release
script:
- docker login 172.28.128.6 -u idig8 -p 123456789
- docker build -t 172.28.128.6/idig8/flask-demo:$CI_COMMIT_TAG .
- docker login 172.28.128.6 -u idig8 -p 1qaz@WSX3edc
- docker push 172.28.128.6/idig8/flask-demo:$CI_COMMIT_TAG
tags:
- test1
only:
- tags

DSC00020.jpg


  这个执行后,就会自动进行pipline操作,然后通过merge到master分支

DSC00021.jpg .


  pipline 执行通过后,可以进行merge到master分支

DSC00022.jpg


  合并到master分支,会自动触发pipline,多执行deploy操作

DSC00023.jpg



  • 如果我们想已经到master分支了,就光执行tag打包生成镜像怎么搞呢
      看来修改  .gitlab-ci.yml 增加except 在每个任务中。



stages:
- style
- test
- deploy
- release
pep8:
stage: style
script:
- pip install tox
- tox -e pep8
tags:
- python2.7
except:
- tags
unittest-py27:
stage: test
script:
- pip install tox
- tox -e py27
tags:
- python2.7
except:
- tags
unittest-py34:
stage: test
script:
- pip install tox
- tox -e py34
tags:
- python3/4
except:
- tags
docker-deploy:
stage: deploy
script:
- docker build -t flask-demo .
- if [ $( docker ps -aq --filter name=web) ]; then docker rm -f web;fi
- docker run -d -p 5000:5000 --name web flask-demo
tags:
- test1
only:
- master
docker-image-release:
stage: release
script:
- docker login 172.28.128.6 -u idig8 -p 123456789
- docker build -t 172.28.128.6/idig8/flask-demo:$CI_COMMIT_TAG .
- docker login 172.28.128.6 -u idig8 -p 1qaz@WSX3edc
- docker push 172.28.128.6/idig8/flask-demo:$CI_COMMIT_TAG
tags:
- test1
only:
- tags

  • 新建tag
      New tag


DSC00024.jpg

DSC00025.jpg

DSC00026.jpg

DSC00027.jpg



  • 进入harbor看看
DSC00028.jpg

DSC00029.jpg

  PS:实际上这个例子,就是特定版本的docker  image的产生。一个版本的发布代表我们这个软件的稳定的版本的问世,接下来就可以进行对稳定版本的部署,我们对稳定版本的部署,稳定版本的部署具体是docker swarm还是k8s,最重要的是我们已经有了一个docker image,我们可以通过手动,或者自动的升级。update docker image 实现服务的不中断。
总体言之这几次的流程是:开发代码提交到分支后,分支下进行校验pipline,没有问题,进行deploy的,在deploy测试没有问题,打包tag,形成稳定的dockerimage版本。
DSC00030.jpg





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-674872-1-1.html 上篇帖子: Docker容器一起动就退出的解决方案 下篇帖子: 基于DOCKER的Hadoop+HIVE环境学习试用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表