基於 Gogs + Drone 構建私有 CI/CD 平臺 | Docker 篇
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等開銷比較高 -
Drone
、Gogs
皆是使用Go
語言來編寫構建,在整體的語言效能與記憶體開銷算是有一定的優勢,同時Drone
支援Github
、GitLab
、Gogs
以及Bitbucket
,這點很不錯!反手就是一個贊?
GitLab + Jenkins該組合還是一個不錯的選擇,我並沒有反對,為何呢?GitLab是一個非常成熟的git工具之一,同時Jenkins也是非常成熟的CICD元件,功能非常強大。
但是我還是要站在正義的一邊,選擇Drone
+Gogs
。O(∩_∩)O哈哈~
環境
使用的前提,必須符合以下條件
- 系統安裝了
Docker
,同時要安裝了Docker
編排工具docker-compose
- 主流的
x64
位系統,Linux
、Mac
、Window
等 - 安裝了
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
來看下容器的執行情況
對應的配置檔案可以根據專案的需求自由靈活改變,同時像我這樣強迫症的人,我不喜歡使用
IP
來進行訪問請求的以及http
協議訪問,我會使用nginx
代理。不詳細說了
至此,我們已經完成了平臺的構建工作了。我們來欣賞下乾杯
有兩個地方需要注意:
-
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
相關文章
- 基於Kubernetes構建企業Jenkins master/slave CI/CD平臺JenkinsAST
- 基於Drone實現CI/CD【0到1架構系列】架構
- 視訊私有云實戰:基於Docker構建點播私有云平臺Docker
- 基於Drone+Gogs流水線-全面認識輕量級雲原生CI引擎DroneGo
- Drone CI/CD 介紹
- 【小白向】基於Docker使用Gogs,Drone以及drone-runner-docker的自動化部署DockerGo
- 基於 Gitea+Drone CI+Vault 打造屬於自己的CI/CD工作流Git
- 基於官方Drone-CI 的alpine版本asia亞洲時區構建支援. Drone-CI based alpine Timezone BuildUI
- Drone CI For Github —— 打造自己的CI/CD工作流(一)Github
- 基於Docker快速搭建Gitlab與Gitlab CI/CD服務DockerGitlab
- [小團隊自動化] 基於 Gitea+Drone CI+Vault 打造屬於自己的CI/CD工作流Git
- 用 Jenkins 構建 CI/CD 流水線Jenkins
- 使用 Kubernetes 和滴滴雲 Docker 倉庫構建 CI/CD 流水線Docker
- 基於Gitlab-CI/CD Docker 持續整合 node 專案GitlabDocker
- Go 語言開源 CI/CD 容器 Drone 介紹Go
- 透過 Drone CLI 手動觸發 CI/CD 流程
- Serverless Devs 重大更新,基於 Serverless 架構的 CI/CD 框架:Serverless-cdServerdev架構框架
- 基於 GitLab CI 的前端工程CI/CD實踐Gitlab前端
- 輕量化自建 Drone CI For Gitea —— 打造自己的CI/CD工作流(三)Git
- Golang基於Gitlab CI/CD部署方案GolangGitlab
- 基於VMWare構建私有云2019
- DevOPS實戰:從0到1搭建基於Docker的Gitlab CI/CDdevDockerGitlab
- Docker 構建多平臺映象Docker
- Docker構建多平臺映象Docker
- 前端VUE基於gitlab的CI_CD前端VueGitlab
- websocketd | 基於 docker 構建WebDocker
- 聯調環境快速部署——基於docker-compose的CI/CD實踐Docker
- jenkins如何構建github上的程式碼(ci cd)JenkinsGithub
- [小團隊自動化] (一) Drone CI For Github —— 打造自己的CI/CD工作流Github
- 基於 Serverless 的部署平臺構建與思考Server
- Docker 整合 Jenkins Gitlab 實現 CI/CDDockerJenkinsGitlab
- 『中級篇』docker之CI/CD持續整合-gitlab安裝(70)DockerGitlab
- 中科方德技術專家直播:如何基於 OpenStack、Ceph 構建私有云平臺? | 第 27 期
- Kunbernetes-基於Nexus構建私有映象倉庫
- Gitlab CI/CD教程及npm包構建釋出實戰GitlabNPM
- 基於 GitLab CI 搭建前端自動構建環境Gitlab前端
- 基於GitLab CI搭建Golang自動構建環境GitlabGolang
- CI & CD ?