Linux中國

如何在 linux 上配置持續集成服務 – Drone

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

Registering App Github

要創建一個應用,我們需要在 New Application 頁面點擊 Register,然後如下所示填表。

Registering OAuth app github

我們應該保證在應用的配置項里設置了授權回調鏈接,鏈接看起來類似 http://drone.linoxide.com/api/auth/github.com。然後我們點擊註冊應用。所有都做好之後我們會看到我們需要在我們的 Drone 配置文件里配置的客戶端 ID 和客戶端密鑰。

Client ID and Secret Token

在這些都完成之後我們需要使用文本編輯器編輯 drone 配置文件,比如使用下面的命令。

# nano /etc/drone/drone.toml

然後我們會在 drone 的配置文件裡面找到[github] 部分,緊接著的是下面所示的配置內容

[github]
client="3dd44b969709c518603c"
secret="4ee261abdb431bdc5e96b19cc3c498403853632a"
# orgs=[]
# open=false

Configuring Github Drone

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"

Configuring SMTP Drone

注意:這裡的 userpass 參數強烈推薦一定要改成某個具體用戶的配置。

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 就行了。在我們正確的完成了上述操作後,我們就可以看到登錄界面了。

Login Github Drone

因為在上面的步驟里配置了 Github,我們現在只需要簡單的選擇 github 然後進入應用授權步驟,這些完成後我們就可以進入工作台了。

Drone Dashboard

這裡它會同步我們在 github 上的代碼庫,然後詢問我們要在 drone 上構建那個代碼庫。

Activate Repository

這一步完成後,它會詢問我們在代碼庫里添加.drone.yml 文件的新名稱,並且在這個文件里定義構建的過程和配置項,比如使用那個 docker 鏡像,執行那些命令和腳本來編譯,等等。

我們按照下面的內容來配置我們的.drone.yml

image: python
script:
 - python helloworld.py
 - echo "Build has been completed."

這一步完成後我們就可以使用 drone 應用里的 YAML 格式的配置文件來構建我們的應用了。所有對代碼庫的提交和改變此時都會同步到這個倉庫。一旦提交完成了,drone 就會自動開始構建。

Building Application Drone

所有操作都完成後,我們就能在終端看到構建的結果了。

Build Success Drone

總結

在本文中我們學習了如何安裝一個可以工作的使用 drone 的持續集成平台。如果我們願意我們甚至可以從 drone.io 官方提供的服務開始工作。我們可以根據自己的需求從免費的服務或者收費服務開始。它通過漂亮的 web 界面和強大的功能改變了持續集成的世界。它可以集成很多第三方應用和部署平台。如果你有任何問題、建議可以直接反饋給我們,謝謝。

via: http://linoxide.com/linux-how-to/setup-drone-continuous-integration-linux/

作者:Arun Pyasi 譯者:ezio 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國