這可能是你的第一個 DevOps 解決方案!
前言
本文轉載自個人部落格:https://www.otokaze.cn/2020/your-first-devops-solution.html
2020 年了,不知道還有哪些程式設計師還是每次發版上線都還人肉的做著打包、測試、上傳、部署等一系列機械性的事情。為了打通這些場景使其能夠自動化,避免重複性的勞動,DevOps 的概念也隨之孕育而生。
至於要怎麼更好的實現 DevOps 的概念,按照公司的規模和專案的大小在市場上都已經有很成熟的解決方案了。不過本著生命不息,折騰不止的原則,也作為研究愛好為目的,這裡分享一下我是如何不依賴任何第三方平臺,通過最低的成本全自建的構造屬於自己的 DevOps 系統的!
我把本次文章所需要用到的資原始檔以及一鍵部署指令碼都在 Github 上進行了開源,fork 一下這些都是你的~
github:https://github.com/otokaze/DevOps
快速開始
先讓我簡要說明一下 Devops 系統本身所應該具備的基本行為:
Coding >> Commit >> Hooks >> Building >> Unit Testing >> Image Pushing >> Deploying
顯然,Devops 是多個系統的組成。各個元件進行了分工與合作,流水線式的作業,最終取得了我們想要的結果。因此,我在開源界挑選了幾個極低資源佔用簡單輕便的開源專案來構成我們的系統組成部分。
Gitea
作為一個私有 GIT 倉庫,Gitea 足夠的輕便,它只有一個二進位制檔案,60MB 不到的大小承載了所有的功能。同樣也歸功於 GO 的高效能編譯器讓它在執行時與生俱來所具備超低記憶體和 CPU 等資源佔用的能力,這也成為我選擇它的最佳理由。
部署
docker-compose -f ./Gitea/docker-compose.yaml up -d
Registry
Registry 作為私有 Docker 註冊中心是目前唯一的選擇,這也是 Docker 的官方開源的私有註冊中心解決方案。此外,您也別無選擇。 :(
部署
docker-compose -f ./Registry/docker-compose.yaml up -d
Drone
現在,我們還需要一個 CI/CD 平臺能把任務調動起來!
同樣也歸功於 Go 語言的實現,Drone 不僅非常易於部署,而且更重要的是:它的穩定執行僅佔用伺服器上不到 20MB 的記憶體。愛了愛了~
部署
docker-compose -f ./Drone/docker-compose.yaml up -d
Example
此外,為了能讓 Drone 能跟和我們本身的 Gitea 協調工作,告訴它程式碼完成提交後需要做什麼,所以我們還需要一個 YAML 描述它的 “工作事項”。
這裡以我另一個開源的測試檢視 Docker 容器內負載均衡以及 ip&hostname 資訊的小工具來作為 Demo。
github:https://github.com/otokaze/yourip
---
kind: pipeline
type: docker
name: default
platform:
os: linux
arch: amd64
steps:
- name: linter
image: alpine/git
commands:
- change=$(git diff origin/master $DRONE_COMMIT ./CHANGELOG.md 2> /dev/null) && code=0 || code=$?
- if [ ! $code -eq 0 ]; then echo 'CHANGELOG.md not fount.'; exit $code; fi
- if [ -z "$change" ]; then echo 'CHANGELOG.md no change.'; exit 1; fi
- name: builder
image: golang:1.13.8
environment:
GOOS: linux
GOARCH: amd64
CGO_ENABLED: 0
commands:
- go build -o yourip
- go test
- name: tagger
image: alpine
commands:
- tags=$(grep -E -o v[0-9]+\.[0-9]+\.[0-9]+ CHANGELOG.md | head -1 | sed s/v/latest,/g)
- if [ -z $tags ]; then echo 'No version found in CHANGELOG.md'; exit 1; else echo $tags > .tags; fi
when:
event:
- push
- name: pushing
image: plugins/docker
settings:
username:
from_secret: DOCKER_REGISTRY_USERNAME
password:
from_secret: DOCKER_REGISTRY_PASSWORD
repo: registry.otokaze.cn/yourip
registry: registry.otokaze.cn
when:
event:
- push
- name: deploying
image: curlimages/curl
environment:
DEPLOY_API: https://swarm.otokaze.cn/api/services/yourip/redeploy
TOKEN:
from_secret: DOCKER_SWARMPIT_TOKEN
commands:
- code=$(curl -XPOST -s -w %{http_code} "$DEPLOY_API?tag=latest" -H 'Content-Type:application/json' -H "authorization:$TOKEN")
- if [[ $code == "" || $code -lt 200 ]]; then echo "redeploy failed. HTTP_CODE=${code}"; exit 1; fi
when:
event:
- push
trigger:
branch:
- master
event:
- pull_request
- push
...
Swarmpit
最後的最後,我還需要一個容器編排引擎來管理我的服務,實現服務的平滑升級,橫向擴容,回滾釋出等功能。
關於容器編排引擎,swarm 其實並不是一個主流的選擇,但只作為我一個小範圍內使用的人來說,我不需要 k8s 那麼多複雜的功能和特性,所以 Docker 自家的 swarm 成了我的最佳選擇,因為它足夠簡單,還非常好用。
部署
docker stack deploy -c ./Swarmpit/docker-compose.yml swarmpit
不來一發嗎?
- Gitea: https://git.otokaze.cn
- Drone: https://drone.otokaze.cn
- Registry: https://registry.otokaze.cn
- Swarmpit: https://swarm.otokaze.cn
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- 可能是你見過最完善的微前端解決方案前端
- EMAS 移動 DevOps 解決方案 —— Mobile DevOpsdev
- 這可能是史上最全Redis高可用解決方案總結Redis
- 最常用的分散式ID解決方案,你知道幾個分散式
- 這個強大的資料傳輸解決方案,99%的公司都在用
- 這可能是Feign呼叫可重試的最佳方案了
- CORNERSTONE一站式雲端DevOps平臺為各企業DevOps解決方案而生dev
- 這11個靈魂問答,解決你80%的資料中臺困境
- 你必須瞭解的分散式事務解決方案分散式
- 幹掉Session?這個跨域認證解決方案真的優雅!Session跨域
- 你說你會Promise?那你解決一下專案中的這五個難題?Promise
- OTRS的ITSM 第一個符合ITIL的IT服務管理解決方案
- DevOps是什麼?5分鐘帶你瞭解DevOpsdev
- 第一個以隱私為核心的乙太網2層伸縮解決方案 - aztec
- 不知道這些,你以為你還能devops?dev
- 這可能是你見過最好的工程師繪圖指北工程師繪圖
- 個人小程式接入支付解決方案
- 第五章 實現你的第一個學習代理-解決山地車的問題
- 從 Docker Hub 拉取映象受阻?這些解決方案幫你輕鬆應對Docker
- transitionEnd和animationEnd的一個臨時解決方案
- Python 的 3 個主要缺點及其解決方案Python
- 使用laravel解決庫存超出的幾個方案Laravel
- 你想了解的DDS協議解決方案在這裡協議
- 資料傳輸POST心法分享,做前端的你還解決不了這個bug?前端
- 典型案例 | 基於全數字實時模擬的嵌入式DevOps解決方案dev
- 你的第一個Django程式Django
- 你的第一個SpringMVC程式SpringMVCC程式
- 你的第一個Solana SPL
- 如何快速高效地完成UI介面設計?這五種主要的解決方案你應該知道UI
- 這可能是你見過的最全的網路爬蟲總結爬蟲
- 你的企業安全解決方案存在哪些誤區?
- 遠端桌面提示"你的憑據不工作"解決方案
- 阿里云云效榮獲首個可信雲DevOps解決方案國家級標準先進級認證阿里dev
- 遊戲角色口型老是對不上?這裡有一個高效解決方案遊戲
- 這篇可能是你見過最全的滑鼠鍵盤監測
- GitHub 8000+ Star!這可能是最適合你的 TensorFlow 教程Github
- 別再問我 WiFi 密碼了:這兩個 GitHub 幫你解決WiFi密碼Github
- 走進雲研發時代 阿里雲釋出雲原生DevOps解決方案阿里dev