摘要:是的最佳實踐部署編寫文件的部署及其簡單,采用的方式,類似于。具體如下此處需要注意的是在處的。登錄配置項目此處輸入的用戶名和密碼是的。支持和兩個數據庫。新的配置文件如下仔細查看關于的文檔,需要我們手動創建數據庫。其中有和相關的。
整個基于k8s的pass平臺,關鍵的一部分就是CICD。CICD又是devops的關鍵部分。之前主流的工具是Jenkins。今天主要介紹的是drone。drone用go語言實現的,drone是前google員工2013年開源的一個CI/CD工具,現在已經拉了投資商業化了。企業版是付費的,我們用的是免費版本。drone更新比較快,之前穩定版本是0.7,今天部署的時候已經更新到0.8了。不過相關的文檔不完善,很多都是coming soon。
優勢:drone引入pipline的概念,整個build過程由多個stage組成,每一個stage都是docker。
各stage間可以通過共享宿主機的磁盤目錄, 實現build階段的數據共享和緩存基礎數據, 實現加速下次build的目標
各stage也可以共享宿主機的docker環境,實現共享宿主機的docker image, 不用每次build都重新拉取base image,減少build時間
可以并發運行。多個build可以并發運行,單機并發數量由服務器cpu數決定。 由開發者負責打包image和流程控制。Docker-in-docker,這一點非常重要,一切都在掌握之中。相比jenkins的好處是,所有的image都是開發者提供,不需要運維參與在CI服務器上部署各種語言編譯需要的環境。
是DevOps的最佳實踐!
drone的部署及其簡單,采用docker-compose的方式,類似于gogs。
具體docker-compose.yml如下:
version: "2" services: drone-server: image: drone/drone:0.8 ports: - 80:8000 - 9000 volumes: - /var/lib/drone:/var/lib/drone/ restart: always environment: - DRONE_OPEN=true - DRONE_HOST=127.0.0.1 - DRONE_GOGS=true - DRONE_GOGS_URL=http://gogs.xxx.com - DRONE_GOGS_PRIVATE_MODE=true - DRONE_SECRET=f5b8122b5e1cf51da10d3be6e25bf6ec drone-agent: image: drone/agent:0.8 restart: always depends_on: - drone-server volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - DRONE_SERVER=drone-server:9000 - DRONE_SECRET=f5b8122b5e1cf51da10d3be6e25bf6ec - DOCKER_API_VERSION=1.24
此處需要注意的是在agent處的 DOCKER_API_VERSION=1.24。在執行pipline的時候,直接報錯
client is newer than server (client API version: 1.26, server API version: 1.24)
這其實是docker1.12版本的一個issue。解決方案就是在agent里增加環境變量DOCKER_API_VERSION=1.24。
執行docker-compose基本上就一句命令
docker-compose up -d
不熟悉docker-compose命令的可以具體查看。
至于docker-compose的安裝,我這里使用pip安裝的。
yum install python-pip -y
pip install docker-compose -y登錄配置gogs項目
此處輸入的用戶名和密碼是gogs的。drone拿著用戶名和密碼可以獲取gogs的項目和建立webhook。
登錄成功以后選擇你想要進行cicd的項目即可??梢栽O置各種gogs鉤子的觸發條件,比如push或是merge,tag等。下面是我實際測試的一個項目截圖。
.drone.yml當然必須現在項目根目錄下添加.drone.yml文件。增加自己實際的構建邏輯。
由于我這邊是一個go項目作為測試。具體的內容如下:
pipeline: build: image: golang:latest commands: - go get - go build
然后基本上工作就完成了。
看到上面的貼圖其實有報錯信息的,具體的錯誤
fatal: could not read Username for "http://gogs.xxx.com": No such device or address
exit status 128
其實在實際應用場景中,幾乎所有單位的gogs都是私有倉庫,所以才會出現這個問題。這個坑我也是查了很多信息都沒有解決,最后是這個issue以及看了drone-git的源碼以后找到了解決方案。實際上在drone0.4之前,是不支持gogs私有倉庫的。而在之后的版本已經解決了這個問題,需要在docker-compose文件中增加 如下配置項:
# Set to true if Gogs is running in private mode. DRONE_GOGS_PRIVATE_MODE=true
之前的docker-compose文件默認啟用的是內部的sqlite數據庫,在生產環境中,我們需要持久化到生產數據庫。drone支持mysql和pgsql兩個數據庫。這里我用的是mysql。
新的配置文件如下:
version: "2" services: drone-server: image: drone/drone:0.8 ports: - 80:8000 - 9000 volumes: - /var/lib/drone:/var/lib/drone/ restart: always environment: - DRONE_OPEN=true - DRONE_HOST=127.0.0.1 - DRONE_GOGS=true - DRONE_GOGS_URL=http://gogs.xx.com - DRONE_GOGS_PRIVATE_MODE=true - DRONE_SECRET=f5b8122b5e1cf51da10d3be6e25bf6ec - DRONE_DATABASE_DRIVER=mysql - DRONE_DATABASE_DATASOURCE=root:123456@tcp(xx.205.xx.126:3306)/drone?parseTime=true drone-agent: image: drone/agent:0.8 restart: always depends_on: - drone-server volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - DRONE_SERVER=drone-server:9000 - DRONE_SECRET=f5b8122b5e1cf51da10d3be6e25bf6ec - DOCKER_API_VERSION=1.24
仔細查看drone關于mysql的文檔,需要我們手動創建drone數據庫。
和k8s的結合其實主要的目的還是在我們k8s的平臺上使用起來,drone提供了豐富的插件。其中有k8s和helm相關的。結合harbor和helm,實現k8s的CICD,大致的流程:合并代碼觸發pipline,build和生成鏡像推到harbor,然后利用helm插件部署到k8s中。
當然如果你的項目不是docker部署的,其實也完全可以使用drone的。比如golang項目,就可以構建完成以后,將構建成功的可執行文件拷貝到目的主機。
由于一切都是基于docker,所以完全可以定制自己不同的鏡像用來實現不同的場景。尤其是提供了service這個功能??梢蕴峁┮恍﹎ysql等service,可以在測試階段發揮作用。由于我最近一直在做golang的項目,有一個場景大概所有的gopher都有這個問題,那就是go的包管理工具太多了,dep,godep,glide等,最好的實現就是提供一些多帶帶安裝了某種工具的go基礎鏡像,在具體的項目選擇不同的鏡像即可。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/32609.html
摘要:是的最佳實踐部署編寫文件的部署及其簡單,采用的方式,類似于。具體如下此處需要注意的是在處的。登錄配置項目此處輸入的用戶名和密碼是的。支持和兩個數據庫。新的配置文件如下仔細查看關于的文檔,需要我們手動創建數據庫。其中有和相關的。 前言 整個基于k8s的pass平臺,關鍵的一部分就是CICD。CICD又是devops的關鍵部分。之前主流的工具是Jenkins。今天主要介紹的是drone。...
摘要:簡介是公司開源的用于監控,可視化,管理集群的一個類似于的系統。另外一個是插件,該插件用來控制容器的流量。在官方不支持流控之前,也是一個不侵入的選擇。由于沒有提供登錄認證的功能。通過將暴露,內網可以訪問。 scope簡介 scope 是 weave公司開源的用于監控,可視化,管理kubernetes集群的一個類似于dashbord的UI系統。有一下四大特點: 實時了解你的docker容...
摘要:簡介是公司開源的用于監控,可視化,管理集群的一個類似于的系統。另外一個是插件,該插件用來控制容器的流量。在官方不支持流控之前,也是一個不侵入的選擇。由于沒有提供登錄認證的功能。通過將暴露,內網可以訪問。 scope簡介 scope 是 weave公司開源的用于監控,可視化,管理kubernetes集群的一個類似于dashbord的UI系統。有一下四大特點: 實時了解你的docker容...
摘要:插件實現了一半,由于企業微信申請比較麻煩,所以也沒有進展。今天抽出時間,研究了一下插件,主要目的是實現非容器項目的部署。其實就是借助插件,將構建好的項目可執行文件和配置文件發布到指定主機上。直接上文件插件基于實現。完成新項目的部署。 前言 最近連續996加班,一直沒有時間完成drone系列文章。drone-wechat插件實現了一半,由于企業微信token申請比較麻煩,所以也沒有進展。...
閱讀 2323·2023-04-26 00:28
閱讀 3067·2019-08-30 15:55
閱讀 2742·2019-08-30 12:47
閱讀 1550·2019-08-29 11:04
閱讀 3150·2019-08-28 18:14
閱讀 945·2019-08-28 18:11
閱讀 1671·2019-08-26 18:36
閱讀 3383·2019-08-23 18:21