如何在 Linux 上配置持續整合服務 – Drone
如果你對一次又一次的克隆、構建、測試和部署程式碼感到厭倦了,可以考慮一下持續整合。持續整合簡稱 CI,是一種像我們一樣的頻繁提交的程式碼庫,構建、測試和部署的軟體工程實踐。CI 可以幫助我們快速的整合新程式碼到已有的程式碼庫。如果這個過程是自動化進行的,那麼就會提高開發的速度,因為這可以減少開發人員手工構建和測試的時間。Drone 是一個自由開源專案,用來提供一個非常棒的持續整合服務的環境,採用 Apache 2.0 協議釋出。它已經整合近很多程式碼庫提供商,比如 Github、Bitbucket 以及 Google Code,它可以從程式碼庫提取程式碼,使我們可以對包括 PHP, Node, Ruby, Go, Dart, Python, C/C++, JAVA 等等在內的各種語言編譯構建。它是如此一個強大的平臺,它使用了容器和 docker 技術,這讓使用者每次構建都可以在保證隔離的條件下完全控制他們自己的構建環境。
1. 安裝 Docker
首先,我們要安裝 docker,因為這是 Drone 的工作流的最關鍵的元素。Drone 合理的利用了 docker 來構建和測試應用。容器技術提高了應用部署的效率。要安裝 docker ,我們需要在不同的 linux 發行版本執行下面對應的命令,我們這裡會說明 Ubuntu 14.04 和 CentOS 7 兩個版本。
Ubuntu
要在 Ubuntu 上安裝 Docker ,我們只需要執行下面的命令。
# apt-get update # apt-get install docker.io
安裝之後我們需要使用service 命令重啟 docker 引擎。
# service docker restart
然後我們讓 docker 在系統啟動時自動啟動。
# update-rc.d docker defaults Adding system startup for /etc/init.d/docker ... /etc/rc0.d/K20docker -> ../init.d/docker /etc/rc1.d/K20docker -> ../init.d/docker /etc/rc6.d/K20docker -> ../init.d/docker /etc/rc2.d/S20docker -> ../init.d/docker /etc/rc3.d/S20docker -> ../init.d/docker /etc/rc4.d/S20docker -> ../init.d/docker /etc/rc5.d/S20docker -> ../init.d/docker
CentOS
第一,我們要更新機器上已經安裝的軟體包。我們可以使用下面的命令。
# sudo yum update
要在 centos 上安裝 docker,我們可以簡單的執行下面的命令。
# curl -sSL https://get.docker.com/ | sh
安裝好 docker 引擎之後我麼只需要簡單使用下面的systemd 命令啟動 docker,因為 centos 7 的預設初始化系統是 systemd。
# systemctl start docker
然後我們要讓 docker 在系統啟動時自動啟動。
# systemctl enable docker ln -s '/usr/lib/systemd/system/docker.service' '/etc/systemd/system/multi-user.target.wants/docker.service'
2. 安裝 SQlite 驅動
Drone 預設使用 SQlite3 資料庫伺服器來儲存資料和資訊。它會在 /var/lib/drone/ 自動建立名為 drone.sqlite 的資料庫來處理資料庫模式的建立和遷移。要安裝 SQlite3 我們要完成以下幾步。
Ubuntu 14.04
因為 SQlite3 存在於 Ubuntu 14.04 的預設軟體庫,我們只需要簡單的使用 apt 命令安裝它。
# apt-get install libsqlite3-dev
CentOS 7
要在 Centos 7 上安裝需要使用下面的 yum 命令。
# yum install sqlite-devel
3. 安裝 Drone
最後,我們安裝好依賴的軟體,我們現在更進一步的接近安裝 Drone。在這一步裡我們只簡單的從官方連結下載對應的二進位制軟體包,然後使用預設軟體包管理器安裝 Drone。
Ubuntu
我們將使用 wget 從官方的 Debian 檔案下載連結下載 drone 的 debian 軟體包。下面就是下載命令。
# wget downloads.drone.io/master/drone.deb Resolving downloads.drone.io (downloads.drone.io)... 54.231.48.98 Connecting to downloads.drone.io (downloads.drone.io)|54.231.48.98|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 7722384 (7.4M) [application/x-debian-package] Saving to: 'drone.deb' 100%[======================================>] 7,722,384 1.38MB/s in 17s 2015-11-06 14:09:28 (456 KB/s) - 'drone.deb' saved [7722384/7722384]
下載好之後,我們將使用 dpkg 軟體包管理器安裝它。
# dpkg -i drone.deb Selecting previously unselected package drone. (Reading database ... 28077 files and directories currently installed.) Preparing to unpack drone.deb ... Unpacking drone (0.3.0-alpha-1442513246) ... Setting up drone (0.3.0-alpha-1442513246) ... Your system ubuntu 14: using upstart to control Drone drone start/running, process 9512
CentOS
在 CentOS 機器上我們要使用 wget 命令從下載連結下載 RPM 包。
# wget downloads.drone.io/master/drone.rpm --2015-11-06 11:06:45-- http://downloads.drone.io/master/drone.rpm Resolving downloads.drone.io (downloads.drone.io)... 54.231.114.18 Connecting to downloads.drone.io (downloads.drone.io)|54.231.114.18|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 7763311 (7.4M) [application/x-redhat-package-manager] Saving to: ‘drone.rpm’ 100%[======================================>] 7,763,311 1.18MB/s in 20s 2015-11-06 11:07:06 (374 KB/s) - ‘drone.rpm’ saved [7763311/7763311]
然後我們使用 yum 安裝 rpm 包。
# yum localinstall drone.rpm
4. 配置埠
安裝完成之後,我們要先進行配置才能工作起來。drone 的配置檔案在/etc/drone/drone.toml 。預設情況下 drone 的 web 介面使用的是80,而這也是 http 預設的埠,如果我們修改它,請按下面所示的修改配置檔案裡 server 塊對應的值。
[server] port=":80"
5. 整合 Github
為了執行 Drone 我們必須設定最少一個和 GitHub、GitHub 企業版,Gitlab,Gogs,Bitbucket 關聯的整合點。在本文裡我們只整合了 github,但是如果我們要整合其他的服務,我們可以在配置檔案做修改。為了整合 github 我們需要在github 的設定裡建立一個新的應用:https://github.com/settings/developers 。
要建立一個應用,我們需要在 New Application 頁面點選 Register,然後如下所示填表。
我們應該保證在應用的配置項裡設定了授權回撥連結,連結看起來類似 http://drone.linoxide.com/api/auth/github.com。然後我們點選註冊應用。所有都做好之後我們會看到我們需要在我們的 Drone 配置檔案裡配置的客戶端 ID 和客戶端金鑰。
在這些都完成之後我們需要使用文字編輯器編輯 drone 配置檔案,比如使用下面的命令。
# nano /etc/drone/drone.toml
然後我們會在 drone 的配置檔案裡面找到[github] 部分,緊接著的是下面所示的配置內容
[github] client="3dd44b969709c518603c" secret="4ee261abdb431bdc5e96b19cc3c498403853632a" # orgs=[] # open=false
6. 配置 SMTP 伺服器
如果我們想讓 drone 使用 email 傳送通知,那麼我們需要在 SMTP 配置裡面設定我們的 SMTP 伺服器。如果我們已經有了一個 SMTP 服務,那就只需要簡單的使用它的配置檔案就行了,但是因為我們沒有一個 SMTP 伺服器,我們需要安裝一個 MTA 比如 Postfix,然後在 drone 配置檔案裡配置好 SMTP。
Ubuntu
在 ubuntu 裡使用下面的 apt 命令安裝 postfix。
# apt-get install postfix
CentOS
在 CentOS 裡使用下面的 yum 命令安裝 postfix。
# yum install postfix
安裝好之後,我們需要編輯我們的 postfix 配置檔案。
# nano /etc/postfix/main.cf
然後我們要把 myhostname 的值替換為我們自己的 FQDN,比如 drone.linoxide.com。
myhostname = drone.linoxide.com
現在開始配置 drone 配置檔案裡的 SMTP 部分。
# nano /etc/drone/drone.toml
找到[smtp] 部分補充上下面的內容。
[smtp] host = "drone.linoxide.com" port = "587" from = "root@drone.linoxide.com" user = "root" pass = "password"
注意:這裡的 user 和 pass 引數強烈推薦一定要改成某個具體使用者的配置。
7. 配置 Worker
如我們所知的 drone 利用了 docker 完成構建、測試任務,我們需要把 docker 配置為 drone 的 worker。要完成這些需要修改 drone 配置檔案裡的[worker] 部分。
# nano /etc/drone/drone.toml
然後取消底下幾行的註釋並且補充上下面的內容。
[worker] nodes=[ "unix:///var/run/docker.sock", "unix:///var/run/docker.sock" ]
這裡我們只設定了兩個節點,這意味著上面的配置檔案只能同時執行2 個構建操作。要提高併發性可以增大節點的值。
[worker] nodes=[ "unix:///var/run/docker.sock", "unix:///var/run/docker.sock", "unix:///var/run/docker.sock", "unix:///var/run/docker.sock" ]
使用上面的配置檔案 drone 被配置為使用本地的 docker 守護程式可以同時構建4個任務。
8. 重啟 Drone
最後,當所有的安裝和配置都準備好之後,我們現在要在本地的 linux 機器上啟動 drone 伺服器。
Ubuntu
因為 ubuntu 14.04 使用了 sysvinit 作為預設的初始化系統,所以只需要簡單執行下面的 service 命令就可以啟動 drone 了。
# service drone restart
要讓 drone 在系統啟動時也自動執行,需要執行下面的命令。
# update-rc.d drone defaults
CentOS
因為 CentOS 7使用 systemd 作為初始化系統,所以只需要執行下面的 systemd 命令就可以重啟 drone。
# systemctl restart drone
要讓 drone 自動執行只需要執行下面的命令。
# systemctl enable drone
9. 新增防火牆例外規則
眾所周知 drone 預設使用了80 埠而我們又沒有修改它,所以我們需要配置防火牆程式允許80 埠(http)開放並允許其他機器可以通過網路連線。
Ubuntu 14.04
iptables 是最流行的防火牆程式,並且 ubuntu 預設安裝了它。我們需要修改 iptable 以暴露埠80,這樣我們才能讓 drone 的 web 介面在網路上被大家訪問。
# iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT # /etc/init.d/iptables save
CentOS 7
因為 CentOS 7 預設安裝了 systemd,它使用 firewalld 作為防火牆程式。為了在 firewalld 上開啟80埠(http 服務),我們需要執行下面的命令。
# firewall-cmd --permanent --add-service=http success # firewall-cmd --reload success
10. 訪問 web 介面
現在我們將在我們最喜歡的瀏覽器上通過 web 介面開啟 drone。要完成這些我們要把瀏覽器指向執行 drone 的伺服器。因為 drone 預設使用80 埠而我們有沒有修改過,所以我們只需要在瀏覽器里根據我們的配置輸入http://ip-address/ 或 http://drone.linoxide.com 就行了。在我們正確的完成了上述操作後,我們就可以看到登入介面了。
因為在上面的步驟裡配置了 Github,我們現在只需要簡單的選擇 github 然後進入應用授權步驟,這些完成後我們就可以進入工作臺了。
這裡它會同步我們在 github 上的程式碼庫,然後詢問我們要在 drone 上構建那個程式碼庫。
這一步完成後,它會詢問我們在程式碼庫裡新增.drone.yml 檔案的新名稱,並且在這個檔案裡定義構建的過程和配置項,比如使用那個 docker 映象,執行那些命令和指令碼來編譯,等等。
我們按照下面的內容來配置我們的.drone.yml。
image: python script: - python helloworld.py - echo "Build has been completed."
這一步完成後我們就可以使用 drone 應用裡的 YAML 格式的配置檔案來構建我們的應用了。所有對程式碼庫的提交和改變此時都會同步到這個倉庫。一旦提交完成了,drone 就會自動開始構建。
所有操作都完成後,我們就能在終端看到構建的結果了。
總結
在本文中我們學習瞭如何安裝一個可以工作的使用 drone 的持續整合平臺。如果我們願意我們甚至可以從 drone.io 官方提供的服務開始工作。我們可以根據自己的需求從免費的服務或者收費服務開始。它通過漂亮的 web 介面和強大的功能改變了持續整合的世界。它可以整合很多第三方應用和部署平臺。如果你有任何問題、建議可以直接反饋給我們,謝謝。
相關文章
- 在Ubuntu上安裝Drone持續整合環境Ubuntu
- GO 微服務周邊服務持續整合Go微服務
- 持續整合服務 Travis CI 教程
- 容器環境持續整合優化,Drone CI 提速 500%優化
- 持續整合配置之Nuget
- 私有化輕量級持續整合部署方案--03-部署web服務(上)Web
- 如何在Flutter中整合華為遠端配置服務Flutter
- 持續整合、持續部署、持續交付、持續釋出
- 持續整合持續部署持續交付_持續整合與持續部署之間的真正區別
- 微服務容器部署與持續整合微服務
- 微服務化的基石——持續整合微服務
- 持續整合、持續交付、持續部署簡介
- 整合持續整合工具
- Docker 實戰(2)- 配置 Jenkins 容器上的持續整合環境DockerJenkins
- iOS 持續整合iOS
- Linux 核心的持續整合測試Linux
- Linux下搭建Jenkins持續整合LinuxJenkins
- 如何在 Kali Linux 上安裝 SSH 服務Linux
- Linux下配置Jenkins+gitlab持續整合構建流程LinuxJenkinsGitlab
- Ansible 持續整合Anolis、Ubuntu基線配置Ubuntu
- 淺談持續整合(CI)、持續交付(CD)、持續部署(CD)
- 對持續整合、 持續交付、持續部署和持續釋出的介紹
- Travis CI 持續整合服務構建 Composer 類庫簡明教程
- 持續整合、持續交付和持續部署有什麼區別?0基礎學習linux技能Linux
- 如何在React Native專案中整合華為遠端配置服務React Native
- 從持續整合到持續交付——DockerCloud概覽DockerCloud
- 談談持續整合,持續交付,持續部署之間的區別
- 私有化輕量級持續整合部署方案--03-部署web服務(下)Web
- 如何在linux新增服務Linux
- 入門:如何在 Kali Linux 上安裝 SSH 服務Linux
- 使用 Jenkins 配置 iOS 持續整合踩坑實錄JenkinsiOS
- 通過Docker容器執行持續整合/持續部署Docker
- 基於Jenkins+Git+Docker的持續整合(上)JenkinsGitDocker
- Taro 小程式持續整合
- 持續整合JenkinsBlueOcean初探Jenkins
- 如何在Flutter中整合華為認證服務Flutter
- 使用 Jenkins 建立微服務應用的持續整合Jenkins微服務
- 持續整合之hudson的構建任務排程