『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

栏目: 服务器 · 发布时间: 6年前

内容简介:开始想用docker registry做私有镜像库,后来放弃了,知道的老铁应该知道这个玩意没有界面很不爽,后来选择了Harbor,还是通过vagrant 创建一个虚拟服务器,这样下来一共创建3个了,也就在生产环境下估计需要3个以上才可以完成整个的CICD持续化集成。前期的3个要求都是4g双核的,gitlab,gitlabci,Harbor 都是这样要求的。我的电脑i7处理器,16g内存让老铁看看跑起来后的效果。源码:https://github.com/limingios/docker/tree/mast

开始想用docker registry做私有镜像库,后来放弃了,知道的老铁应该知道这个玩意没有界面很不爽,后来选择了Harbor,还是通过vagrant 创建一个虚拟服务器,这样下来一共创建3个了,也就在生产环境下估计需要3个以上才可以完成整个的CICD持续化集成。前期的3个要求都是4g双核的,gitlab,gitlabci,Harbor 都是这样要求的。我的电脑i7处理器,16g内存让老铁看看跑起来后的效果。源码:https://github.com/limingios/docker/tree/master/No.11

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

通过vagrant 安装

vagrant reload

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

下载Harbor

  • 选择目前最新版本1.5.2

    https://github.com/vmware/harbor/releases

    我选择的是online版本,两种版本基本上差不多。 

sudo yum -y install lrzsz
#在windows下载的1.5.2 online 上传上去
rz

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

  • 解压harbor
tar xvf harbor-online-installer-v1.5.2.tgz
  • 安装
cd harbor
sudo ./install.sh

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

  • 需要换成另外一种安装方法。
sudo ./prepare

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

安装成功

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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

正常访问

用户名:admin

密码:Harbor12345

可以执行如下的命令进行停止和启动

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

停止

sudo docker-compose stop

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

启动

sudo docker-compose start

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

测试harbor

  • 启动服务
sudo serivce docker restart
cd harbor
sudo docker-compose start

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

  • 修改参数

    >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“文件。在文件中写入

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

push 镜像试试

  • 新建用户

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

  • 新建项目

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

#这个错误,就是未建立项目。
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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

终于成功了,前前后后大概怼了3个多小时,从10点对到了凌晨1点。吸口烟,百度里面太多坑爹了,很多人写文章就是直接复制,转载我不知道他到底实践没有,我这边都是边实践帮告诉大家咋用。感觉harbor真的比docker 仓库爽太多了,看到中文的那一刻我感觉我以后必须用这个放弃docker仓库。

远程连接harbor

  • 查找Docker的服务文件:登录到已经安装Docker的服务器,输入 systemctl status docker 查看Docker的service文件。
sudo systemctl status docker

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

  • 编辑docker.service文件:在ExecStart处添加 –insecure-registry 参数。
sudo vi /usr/lib/systemd/system/docker.service

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76) .

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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

  • 如果我们想已经到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

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

  • 进入harbor看看

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

『中级篇』docker之CI/CD持续集成-项目生成镜像(76)

PS:实际上这个例子,就是特定版本的docker image的产生。一个版本的发布代表我们这个软件的稳定的版本的问世,接下来就可以进行对稳定版本的部署,我们对稳定版本的部署,稳定版本的部署具体是docker swarm还是k8s,最重要的是我们已经有了一个docker image,我们可以通过手动,或者自动的升级。update docker image 实现服务的不中断。

总体言之这几次的流程是:开发代码提交到分支后,分支下进行校验pipline,没有问题,进行deploy的,在deploy测试没有问题,打包tag,形成稳定的dockerimage版本。

百度未收录

>>原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢!

>>原文链接地址:


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Developer's Guide to Social Programming

Developer's Guide to Social Programming

Mark D. Hawker / Addison-Wesley Professional / 2010-8-25 / USD 39.99

In The Developer's Guide to Social Programming, Mark Hawker shows developers how to build applications that integrate with the major social networking sites. Unlike competitive books that focus on a s......一起来看看 《Developer's Guide to Social Programming》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换