GCP DevOps 實作系列一 建立執行個體
今天來分享一下如何在 GCP 上建置 DevOps CI/CD 環境。以下針對使用的工具與環境做說明
- Docker : 軟體容器平台 (Software Container Platform),輕量級的虛擬環境,可將軟體部署至獨立容器中的過程自動化
- Jenkins : 開源的持續整合工具。我們需要使用它來執行一系列的自動化的工作包括監控程式碼的變化、重新測試與建置環境等等,以達到持續整合的目的。
- BitBucket : 可以免費使用的程式碼版本控制平台。相較於 github,BitBucket可以建立不公開的儲存庫 (private repository),並提供五人以下同時使用,非常適合小型專案開發。
- ubuntu 16.04 LTS : GCE 提供的映像檔
[前提備註]
目前 GCP 提供 300美金 / 年的免費專案,在規範資源內可以任意使用 GCP 的資源。當申請好帳號時,可至 GCP Console 申請免費試用。過程會需要提供信用卡資料,不過不必擔心會被收取費用,因為如果額度用完或者超過期限,專案會凍結。除非你決定要繼續使用則可手動解除。如需要知道更多內容可參考 免費試用。完成申請之後就可以開始建置環境
[步驟一 建立執行個體]
首先我們需要建立一個執行個體,可在 Computer Engine > VM 執行個體 > 建立
填入名稱並指定區域以及機器等級還有預設的系統。
有兩種方法可以安裝需要的軟體例如 docker, Jenkins 等等。第一種方式可以在成功建立執行個體後逐一安裝,第二種方式我們可以在建立執行個體時,直接把需要的軟體透過 script 安裝進去。為了方便起見我們使用第二種方式如下
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
##### npm section ##### | |
sudo apt-get update -y | |
sudo apt-get install -y npm | |
##### docker section ##### | |
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - | |
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | |
sudo apt-get update -y | |
apt-cache policy docker-ce | |
sudo apt-get install -y docker-ce | |
##### docker compose section ##### | |
sudo curl -o /usr/local/bin/docker-compose -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" | |
sudo chmod +x /usr/local/bin/docker-compose | |
##### Jenkins section ##### | |
sudo apt-get install default-jre -y | |
sudo apt-get install default-jdk -y | |
useradd jenkins -G docker -m | |
wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - | |
sudo sh -c "echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list" | |
sudo apt-get update | |
sudo apt-get install jenkins -y | |
sudo -i | |
echo "jenkins ALL= NOPASSWD: ALL" >> /etc/sudoers |
script 看似複雜,其實也不過就是安裝個別軟體。
* 特別注意 useradd jenkins -G docker -m
* 特別注意 echo "jenkins ALL= NOPASSWD: ALL" >> /etc/sudoers
* 特別注意 useradd jenkins -G docker -m
如果想要讓 jenkins 執行 docker 指令則需要把 jenkins 加到 docker 群組中
由於 jenkins 在執行任務的時候有時候可能需要用到 sudo 的指令,為了避免需要輸入密碼,因此特別指定 jenkins 這個使用者使用 sudo 時不需要輸入密碼
當設定完成後,點選建立。等待幾分鐘,執行個體就會被建立。
* 連線到主機
我們可以透過 ssh 的方式連到主機確認是否軟體都正確安裝完畢。透過控制台 Computer Engine > VM 執行個體
點選 SSH 後,就會另外開啟一個視窗連接到主機。這時候執行 docker 應該就會有相關的提示訊息顯示也就表示軟體也安裝完成
* 提示
在安裝過程中,GCE 有提供一個 serial port 輸出主機 log。我們可以透過觀察 serial port 來確認是否 script 都已執行完畢。點選 執行個體 > Serial console (port 1)
Script 執行完成後,log 會提示 Startup finished 如下
由於 Jenkins 已經透過 script 安裝成功,這時候可以訪問 外部 IP:8080 (port 8080 為 Jenkins 的預設值) 來執行 Jenkins。這時候你會發現無法存取,原因是因為對應的防火牆設定還未設定好,我們必須打開主機的 8080 port 來允許我們存取。
在預設的情況下對應的網路設定名稱應該是 default,在 Compute Engine > VM 執行個體 > 點選執行個體後,可以找到該個體所使用的網路設定
並在防火牆規則中,新增一筆資料
指定名稱為 Jenkins,流量方向為 <輸入> 並 <允許>,
來源 IP 範圍設定為 0.0.0.0/0 表示允許任何 IP 存取並指定通訊協定為 tcp:8080
* 連線到主機
我們可以透過 ssh 的方式連到主機確認是否軟體都正確安裝完畢。透過控制台 Computer Engine > VM 執行個體
點選 SSH 後,就會另外開啟一個視窗連接到主機。這時候執行 docker 應該就會有相關的提示訊息顯示也就表示軟體也安裝完成
* 提示
在安裝過程中,GCE 有提供一個 serial port 輸出主機 log。我們可以透過觀察 serial port 來確認是否 script 都已執行完畢。點選 執行個體 > Serial console (port 1)
Script 執行完成後,log 會提示 Startup finished 如下
由於 Jenkins 已經透過 script 安裝成功,這時候可以訪問 外部 IP:8080 (port 8080 為 Jenkins 的預設值) 來執行 Jenkins。這時候你會發現無法存取,原因是因為對應的防火牆設定還未設定好,我們必須打開主機的 8080 port 來允許我們存取。
在預設的情況下對應的網路設定名稱應該是 default,在 Compute Engine > VM 執行個體 > 點選執行個體後,可以找到該個體所使用的網路設定
並在防火牆規則中,新增一筆資料
來源 IP 範圍設定為 0.0.0.0/0 表示允許任何 IP 存取並指定通訊協定為 tcp:8080
建立後,8080上的 Jenkins 服務就可以正常存取,第一次使用畫面如下
如果能看到上述畫面,表示安裝已完成。接下來進入第二步驟設定 Jenkins
*如果 jenkin 無法啟動,請確認 java 是否有安裝成功,安裝 java 可參考 Install Java
如果能看到上述畫面,表示安裝已完成。接下來進入第二步驟設定 Jenkins
*如果 jenkin 無法啟動,請確認 java 是否有安裝成功,安裝 java 可參考 Install Java
留言
張貼留言