1. 程式人生 > >『中級篇』docker之CI/CD持續集成-項目生成鏡像(76)

『中級篇』docker之CI/CD持續集成-項目生成鏡像(76)

clas 解決 私服 resp min top dmi secure res

>原創文章,歡迎轉載。轉載請註明:轉載自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

技術分享圖片

通過vagrant 安裝

vagrant reload

技術分享圖片

下載Harbor

  • 選擇目前最新版本1.5.2
    https://github.com/vmware/harbor/releases
    我選擇的是online版本,兩種版本基本上差不多。?
    sudo yum -y install lrzsz
    #在windows下載的1.5.2 online 上傳上去
    rz

技術分享圖片

  • 解壓harbor

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

    cd harbor
    sudo ./install.sh

    技術分享圖片

  • 需要換成另外一種安裝方法。

    sudo ./prepare

    技術分享圖片

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

    技術分享圖片

安裝成功

訪問機器:172.28.128.6 我是自動獲取的ip

技術分享圖片

正常訪問
用戶名:admin
密碼:Harbor12345
可以執行如下的命令進行停止和啟動

技術分享圖片

技術分享圖片

停止

sudo docker-compose stop

技術分享圖片

啟動

sudo docker-compose start

技術分享圖片

測試harbor

  • 啟動服務

    sudo serivce docker restart
    cd harbor
    sudo docker-compose start

    技術分享圖片

  • 修改參數

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

技術分享圖片

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

技術分享圖片

push 鏡像試試

  • 新建用戶

技術分享圖片

  • 新建項目

技術分享圖片

#這個錯誤,就是未建立項目。
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

技術分享圖片

  • 編輯docker.service文件:在ExecStart處添加 –insecure-registry 參數。

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

    技術分享圖片

  • 重新加載service文件,重啟docker服務。
    sudo systemctl daemon-reload
    sudo systemctl restart docker

技術分享圖片

  • 嘗試遠程登錄
    sudo docker login http://172.28.128.6 -u admin -p Harbor12345

    技術分享圖片

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

技術分享圖片

這個執行後,就會自動進行pipline操作,然後通過merge到master分支

技術分享圖片.

pipline 執行通過後,可以進行merge到master分支

技術分享圖片

合並到master分支,會自動觸發pipline,多執行deploy操作

技術分享圖片

  • 如果我們想已經到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

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

  • 進入harbor看看

技術分享圖片

技術分享圖片

PS:實際上這個例子,就是特定版本的docker image的產生。一個版本的發布代表我們這個軟件的穩定的版本的問世,接下來就可以進行對穩定版本的部署,我們對穩定版本的部署,穩定版本的部署具體是docker swarm還是k8s,最重要的是我們已經有了一個docker image,我們可以通過手動,或者自動的升級。update docker image 實現服務的不中斷。
總體言之這幾次的流程是:開發代碼提交到分支後,分支下進行校驗pipline,沒有問題,進行deploy的,在deploy測試沒有問題,打包tag,形成穩定的dockerimage版本。

技術分享圖片

『中級篇』docker之CI/CD持續集成-項目生成鏡像(76)