歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux服務器 >> Linux中安裝部署Docker管理工具Drone全攻略

Linux中安裝部署Docker管理工具Drone全攻略

日期:2017/3/2 16:25:32   编辑:Linux服務器

  Drone 是一個構建在Docker之上的開源持續集成平台(CI)。Drone 提供了一組預建的Docker映像,支持12+種語言和幾乎所有主要的數據庫。這意味著你不必花時間來安裝軟件和配置您的構建環境。當然,如果你需要一個高度定制的環境Drone提供了足夠的靈活性來使用自定義Docker映像。

  Drone 完全采用Go語言開發。具有快速,高效的特點。

  與其他的CI服務相比有什麼不同?

  1.Drone是開源的

  2.Drone是構建在Docker之上

  3.Drone 輕松托管在自己的基礎架構之上

  4.Drone 提供一個 CLI 來運行本地構建,在Docker容器中

  5.Drone 默認與 GitHub 集成,很快將支持Bitbucket patch

  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 。

2016418120124670.png (1028×504)

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

2016418120156929.png (748×582)

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

2016418120210857.png (429×142)

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

  代碼如下:

  # nano /etc/drone/drone.toml

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

  代碼如下:

  [github]

  client="3dd44b969709c518603c"

  secret="4ee261abdb431bdc5e96b19cc3c498403853632a"

  # orgs=[]

  # open=false

2016418120225384.png (680×400)

  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 = "[email protected]"

  user = "root"

  pass = "password"

2016418120243724.png (641×406)

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

2016418120302266.png (682×360)

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

2016418120324032.png (799×472)

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

2016418120339592.png (614×220)

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

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

  復制代碼

  代碼如下:

  image: python

  script:

  - python helloworld.py

  - echo "Build has been completed."

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

2016418120357398.png (947×268)

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

2016418120416903.png (840×299)

Copyright © Linux教程網 All Rights Reserved