基於 Gogs + Drone 構建私有 CI/CD 平臺 | Docker 篇

AlicFeng發表於2018-12-23

No matter where I am, I will reply you immediately when I see the email.My Email: echo "YUBzYW1lZ28uY29tCg==" | base64 -d

前言

CI / CD( 持續整合 / 持續部署 )方案是DevOps中不可或缺的流程之一,最近也瞭解了部分的相關的解決方案,最終選擇了Drone + Gogs基於docker容器環境來構建CI / CD,本文將分享下如何構建此平臺以及如何快速地使用到專案開發中。

應該會有一個疑問?我為什麼不選擇主流的GitLab + Jenkins 兩個最佳搭檔來構建呢?

  • GitLab是使用Ruby編寫的,Jenkins更是了不起,使用Java來編寫的,專案整體比較膨大,同時它們對硬體、CPU等開銷比較高
  • DroneGogs皆是使用Go語言來編寫構建,在整體的語言效能與記憶體開銷算是有一定的優勢,同時Drone支援GithubGitLabGogs以及Bitbucket,這點很不錯!反手就是一個贊?

GitLab + Jenkins該組合還是一個不錯的選擇,我並沒有反對,為何呢?GitLab是一個非常成熟的git工具之一,同時Jenkins也是非常成熟的CICD元件,功能非常強大。
但是我還是要站在正義的一邊,選擇Drone + Gogs。O(∩_∩)O哈哈~

環境

使用的前提,必須符合以下條件

  • 系統安裝了Docker,同時要安裝了Docker編排工具docker-compose
  • 主流的x64位系統,LinuxMacWindow
  • 安裝了git版本控制工具

安裝

安裝非常簡單,拉取docker-compose.yml編排檔案,基於Docker環境自動構建即可!
同步至github | 戳戳戳

git clone https://github.com/alicfeng/gogs-drone-docker.git
cd gogs-drone-docker && docker-compose up -d

執行docker ps來看下容器的執行情況

1678789-0c71e20c316e1d88.png!large
alicfeng - docker ps

對應的配置檔案可以根據專案的需求自由靈活改變,同時像我這樣強迫症的人,我不喜歡使用IP來進行訪問請求的以及http協議訪問,我會使用nginx代理。不詳細說了

至此,我們已經完成了平臺的構建工作了。我們來欣賞下乾杯

1678789-1de3d8bbaa385c05.png!large
Gogs

1678789-f165f6d1d9a07151.png!large
Drone

有兩個地方需要注意:

  • Drone登入的賬號需要在Gogs設定為管理員,他倆兄弟的賬密是互通的
  • Gogs的倉庫會自動同步到Drone上,此時,需要在Drone開啟鉤子才能正常執行

使用

好了,是時候來體驗兩把了,這裡需要有一個前提了,O(∩_∩)O哈哈~,你需要了解它是如何執行的,根據什麼來自動化構建的
每當分支的程式碼更新的時候,Gogs會動過鉤子同步通知Drone,而Drone收到通知之後會發生一系列動作

  • 通過git外掛clone分支程式碼到容器裡面
  • 測試
  • 編譯程式碼,構建可執行檔案
  • 將專案和執行環境打包成映象,釋出到Registry
  • 部署至生產環境
  • 傳送郵件等通知資訊,這裡還有很多外掛,比如微信、釘釘、電報等

構建的劇本是通過.drone.yml檔案編排的,基於Docker映象進行構建,很nice~下面簡單體驗下Laravel專案的即可!

pipeline:
  build:
    image: motecshine/laravelphp71
    commands:
    - mv $(pwd)/.env.dev $(pwd)/.env
    - composer config repo.packagist composer https://packagist.phpcomposer.com
    - composer install --no-scripts --no-dev
    # others
1678789-44e55c14811251a6.png!large
AlicFeng

價值源於技術,技術源於分享

相關文章