作者: Hao

最後編輯日期: 2024-10-26

Jenkins 教學:使用 Docker 啟動 Jenkins 並設置 GitHub Webhook

Jenkins 是一個開源的自動化工具,用於持續整合和持續交付。透過 Jenkins,我們可以自動構建、測試並部署應用。本文將介紹如何使用 Docker 啟動 Jenkins 服務,並設置 GitHub Webhook 自動觸發構建流程。


1. 安裝 Docker

如果尚未安裝 Docker,可以參考以下安裝指令。根據系統不同,選擇相應的命令。

Ubuntu 系統

sudo apt update
sudo apt install docker.io

CentOS 系統

sudo yum update -y
sudo yum install docker

啟動 Docker 服務

sudo systemctl start docker
sudo systemctl enable docker

2. 使用 Docker 啟動 Jenkins

Jenkins 有官方的 Docker 映像檔,我們可以使用該映像檔來快速啟動 Jenkins。以下指令將啟動 Jenkins,並開放端口 8080 供我們訪問。

啟動 Jenkins 容器

docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v jenkins_home:/var/jenkins_home jenkins/jenkins:lts
  • -d:在背景模式運行容器。
  • --name jenkins:指定容器名稱為 jenkins
  • -p 8080:8080:將 Jenkins 的 Web 介面端口對映到主機的 8080 端口。
  • -p 50000:50000:為 Jenkins 的代理連接設置端口。
  • -v jenkins_home:/var/jenkins_home:設置 Jenkins 資料的持久化,防止數據丟失。

確認 Jenkins 已啟動

可以使用以下指令來確認 Jenkins 是否運行正常:

docker ps

3. 訪問 Jenkins 並完成初始配置

獲取解鎖密碼

首次訪問 Jenkins 需要解鎖,使用以下指令取得初始密碼:

docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword

將密碼複製後,打開瀏覽器,進入 http://localhost:8080,在輸入框中貼上初始密碼解鎖 Jenkins。(初始帳號為 admin)

安裝推薦的插件

Jenkins 解鎖後會提示安裝插件,選擇「安裝推薦的插件」來確保基本功能可用。安裝過程可能需要一些時間,完成後 Jenkins 會提示創建管理員帳戶。

創建管理員帳戶

按照提示設置管理員帳戶,用於日後管理 Jenkins,創建完畢後即可進入 Jenkins 的主界面。


4. 配置 Jenkins 的 Pipeline 任務

Pipeline 是 Jenkins 用於定義構建流程的功能,以下將展示如何創建一個簡單的 Pipeline 任務。

創建新的 Pipeline 專案

  1. 在 Jenkins 主頁點擊「新建項目」。
  2. 輸入專案名稱並選擇「Pipeline」,然後點擊「確定」。

編寫 Pipeline 腳本

在「Pipeline」配置頁面中,可以使用 Jenkins 的語法來定義構建流程,以下是一個簡單的 Pipeline 腳本範例:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                echo 'Building...'
            }
        }
        stage('Test') {
            steps {
                echo 'Testing...'
            }
        }
        stage('Deploy') {
            steps {
                echo 'Deploying...'
            }
        }
    }
}

此腳本將 Jenkins 分成三個階段:Build、Test 和 Deploy。每個階段都會顯示相應的訊息。

執行 Pipeline

配置完成後,點擊「保存」並返回專案頁面,然後點擊「立即構建」以執行 Pipeline。Jenkins 將依照腳本定義的流程執行,並顯示每個階段的詳細日誌。


5. 設置 GitHub Webhook

透過 Webhook 設置,可以讓 GitHub 自動通知 Jenkins,在有 Push 或 PR 操作時自動觸發構建流程。

在 GitHub 設定 Webhook

  1. 進入 GitHub 專案頁面,點擊「Settings(設定)」>「Webhooks」>「Add webhook(新增 Webhook)」。

  2. 在「Add webhook」頁面填入以下資訊:

    • Payload URL:填入 Jenkins 伺服器的 Webhook 地址,格式為 http://<JENKINS_IP>:8080/github-webhook/,例如:
      http://your-jenkins-server-ip:8080/github-webhook/
      
    • Content type:選擇 application/json
    • Secret(可選):可以設置一個密鑰來確保安全性,並在 Jenkins 中同步設置相同的密鑰。
  3. 選擇事件觸發條件

    • 預設選「Just the push event(僅限 Push 事件)」即可。若需要觸發 PR,可以選「Let me select individual events」,並勾選「Push」和「Pull requests」。
  4. 點擊「Add webhook」以保存設定。


在 Jenkins 配置 GitHub Webhook

  1. 進入 Jenkins 專案設置頁面

    • 找到需要綁定 Webhook 的專案,點擊「設定」。
  2. 設置 GitHub Repository

    • 在「Source Code Management(源代碼管理)」下選擇「Git」,並填寫 GitHub 專案的 URL。
  3. 設置構建觸發器

    • 在「Build Triggers(構建觸發器)」中勾選「GitHub hook trigger for GITScm polling」。
    • 這樣,當 GitHub 觸發 Webhook 時,Jenkins 就會自動執行構建。

6. 測試 Webhook

完成 Webhook 設定後,可以進行以下步驟來確認設置是否成功:

  1. GitHub 中測試 Webhook

    • 回到 GitHub 專案的「Webhooks」頁面,點擊剛設置的 Webhook。
    • 在「Recent Deliveries(最近送達)」部分點擊「Redeliver」進行測試。
  2. 檢查 Jenkins

    • 若 Webhook 正確配置,GitHub 將成功發送請求到 Jenkins,並觸發 Jenkins 的構建流程。
    • 在 Jenkins 專案頁面中可以看到新構建的記錄。

7. Jenkins 常用 Docker 指令

以下是一些管理 Jenkins Docker 容器的常用指令:

  • 停止 Jenkins 容器

    docker stop jenkins
    
  • 啟動 Jenkins 容器

    docker start jenkins
    
  • 查看 Jenkins 日誌

    docker logs jenkins
    
  • 刪除 Jenkins 容器(若不再需要 Jenkins):

    docker rm -v jenkins
    

常見問題排查

  • 無法訪問 Jenkins:檢查 Docker 是否正確啟動,且 8080 端口未被其他程序佔用。
  • 初始密碼無法解鎖:確保使用的密碼正確,可重新執行解鎖密碼指令。

透過 Docker 部署 Jenkins,不僅簡單快捷,還能有效管理和持久化 Jenkins 的數據。完成初始配置後,搭配 GitHub Webhook,你可以實現高效的自動化構建、測試和部署工作流。