CI實現方法之--Gitlba+Drone

寫在前面:
進入到雲計算的PAAS時代,起源Google的Kubernetes無疑成爲了PAAS雲服務的落地平臺。自2017年開始,K8s平臺已經成爲容器編排的事實標準,爲組織設計和部署應用程序帶來全新定義。在以後的幾年裏國有云,國外雲廠商陸續在IAAS平臺發佈PASS層產品。
在此基礎上出現了CICD,即持續集成與持續交付是軟件開發和交付中的實踐。項目從最初是瀑布模型,到敏捷開發,再到如今的DevOps。這是現代開發人員構建出色的產品的技術路線。隨着DevOps的興起,出現了持續集成(Continuous Integration)、持續交付(Continuous Delivery) 、持續部署(Continuous Deployment) 的新方法。
筆者基於自身需求作了以下測試,但願對同行有所助力,相關文章會持續更新。node

1、測試前提條件linux

  1. 實驗環境說明
    測試主機:阿里雲主機
    操做系統:CentOS 7.7
    測試主機配置:2C,8G
主機名 公網IP 內網IP ROLE PORT
node1 39.104.88.120 172.16.0.93 gitlab 80
node2 39.104.93.96 172.16.0.94 drone,jenkins 80,8080
node3 39.104.70.51 172.16.0.98 harbor 80
  1. 全部節點安裝docker
    1) 安裝必要的系統工具
    sudo yum install -y yum-utils device-mapper-persistent-data lvm2

    2) 添加軟件源git

    sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

    3) 更新並安裝Docker-CEgithub

    sudo yum makecache fast
    yum -y install docker-ce-18.09.9-3.el7

    4) 啓動Dockergolang

    systemctl start docker && systemctl enable docker

    5) 配置Docker調優參數docker

    tee  /etc/docker/daemon.json << EOF
    {
    "oom-score-adjust": -1000,
    "log-driver": "json-file",
    "log-opts": {
       "max-size": "100m",
       "max-file": "3"
    },
    "max-concurrent-downloads": 10,
    "max-concurrent-uploads": 10,
    "registry-mirrors": ["https://yefnfc9c.mirror.aliyuncs.com"],
    "insecure-registries" : ["0.0.0.0/0"],
    "storage-driver": "overlay2",
    "storage-opts": [
    "overlay2.override_kernel_check=true"
    ]
    }
    EOF

    6) 重啓docker生效json

    systemctl restart docker

2、測試centos

  1. 測試說明

CI實現方法之--Gitlba+Drone

2.部署說明
2.1. 部署gitlabapp

docker run --detach --hostname 39.104.88.120 --publish 443:443 --publish 80:80 --publish 1022:22 --name gitlab --restart always --volume /srv/gitlab/config:/etc/gitlab --volume /srv/gitlab/logs:/var/log/gitlab --volume /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:12.10.3-ce.0

注:39.104.88.120爲本機實際節點外網IPcurl

2.2. 部署Harbor
2.2.1. 安裝docker-compose

curl -L https://github.com/docker/compose/releases/download/1.24.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

2.2.2. 下載harbor

https://github.com/goharbor/harbor/releases/download/v1.10.2/harbor-online-installer-v1.10.2.tgz

2.2.3. 解壓後配置harbo.yaml
hostname: 172.31.48.86 //修改成實際節點內網IP
屏蔽https配置部分
2.2.4. 安裝Harbor

./install.sh --with-clair

2.2.5. 安裝結果檢查

docker-compose  ps    //正常回顯以下

CI實現方法之--Gitlba+Drone

2.3. 部署Drone
2.3.1. 部署drone主應用
如何取得

DRONE_GITLAB_CLIENT_ID
DRONE_GITLAB_CLIENT_SECRET

 登陸gitlab並配置gitlab外部認證
CI實現方法之--Gitlba+Drone
 應用回調接口申請
CI實現方法之--Gitlba+Drone
注:本測試採用docker run 部署drone,因此Url爲:http://39.104.93.96/login,按自身部署drone環境修改Url
 取得ApplicationID和secret
CI實現方法之--Gitlba+Drone
ApplicationID對應DRONE_GITLAB_CLIENT_ID
secret對應DRONE_GITLAB_CLIENT_SECRET


docker run \
  --volume=/var/run/docker.sock:/var/run/docker.sock \
  --volume=/var/lib/drone:/data \
  --env=DRONE_LOGS_DEBUG=true \
  --env=DRONE_GIT_ALWAYS_AUTH=false \
  --env=DRONE_GITLAB_SERVER=http://39.104.88.120 \
  --env=DRONE_GITLAB_CLIENT_ID=d6272993ac02c3bb4069d73bf0ff8dabeaff47c0739ae27d1a23e8b80e33faa5 \
  --env=DRONE_GITLAB_CLIENT_SECRET=01f454fe0a55256a974d420b8ca023df6efc80b33d8a917dd16138b152b73253 \
  --env=DRONE_RPC_SECRET=12345678\
  --env=DRONE_RUNNER_CAPACITY=3 \
  --env=DRONE_SERVER_HOST=39.104.93.96\
  --env=DRONE_SERVER_PROTO=http \
  --env=DRONE_TLS_AUTOCERT=false \
  --publish=80:80 \
  --publish=443:443 \
  --restart=always \
  --detach=true \
  --name=drone  \
  drone/drone:1

參數說明:
CI實現方法之--Gitlba+Drone

2.3.2. 部署Drone-runner

docker run -d \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e DRONE_RPC_PROTO=http \
  -e DRONE_RPC_HOST=172.16.0.94 \
  -e DRONE_RPC_SECRET=12345678 \
  -e DRONE_RUNNER_CAPACITY=3 \
  -e DRONE_RUNNER_NAME=${HOSTNAME} \
  -p 3000:3000 \
  --restart always \
  --name runner \
  drone/drone-runner-docker:1

參數說明:
CI實現方法之--Gitlba+Drone

Drone-runner檢查
CI實現方法之--Gitlba+Drone

3.配置說明
3.1. 配置harbor
3.1.1. 增長項目:go-server
注:admin/Harbor12345
CI實現方法之--Gitlba+Drone

3.2. 配置gitlab
3.2.1. 增長項目:go-server
CI實現方法之--Gitlba+Drone

3.2.2. 項目go-server中建立相關文件

1) 增長主應用代碼文件:server.go

package main

import (
    "fmt"
    "log"
    "net/http"
)

func hello(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello World")
}

func main() {
    http.HandleFunc("/", hello)
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal(err)
    }
}

2) 建立Dockerfile,會被.drone.yml調用

FROM golang
WORKDIR /go
ADD server /go
CMD ["./server"]

3) 建立.drone.yml文件,此文件做用是按文件內容將任務傳送至drone應用,進行CI動做。
注:此文件在配置drone完成後建立

kind: pipeline
type: docker
name: build
steps:
- name: build-code
  image: golang:alpine
  pull: if-not-exists # always never
  commands:
    - go build server.go
- name: build-image
  image: plugins/docker
  settings:
    repo: 172.16.0.98/go-server/go-server
    registry: 172.16.0.98
    use_cache: true
    username:
      from_secret: registry_username
    password:
      from_secret: registry_password
    tags: ${DRONE_BUILD_NUMBER}
    insecure: true
    mirror: https://yefnfc9c.mirror.aliyuncs.com/
trigger:
  branch:
  - master
  event:
  - push

3.3. 配置drone
3.3.1. 提示gitlab頁確認後跳轉drone
3.3.2. 點擊已同步項目go-server
CI實現方法之--Gitlba+Drone
3.3.3. 點擊已同步項目go-server後找到SETTINGS
CI實現方法之--Gitlba+Drone
3.3.4. SETTINGS設置Harbor登陸信息
注:此處valuse值對應.drone.yml中常量值,下圖標紅處。key值爲harbor用戶及密碼。

username:
  from_secret: registry_username
password:
  from_secret: registry_password

CI實現方法之--Gitlba+Drone
注:完成後建立.drone.yml文件,接3.2.2 .drone.yml內容。
4.測試效果說明
4.1. drone效果
CI實現方法之--Gitlba+Drone
4.2. harbor效果
CI實現方法之--Gitlba+Drone
4.3. 再次觸發build
修改gitlab中go-server代碼,就會再次出發build。


後續:

本次測試到此就告一段落,測試只是CICD中冰山一角,其餘部分也會陸續更新。在這個新興技術不斷涌現的今天,經過不斷的學習跟上時代步伐。如今有不少同窗對k8s有研究,除了k8s自己外,其餘圍繞k8s附加功能也值得一學,但願本文及後續能夠開啓你k8s之路。

相關文章
相關標籤/搜索