溫馨提示×

Ubuntu Jenkins如何與Docker集成

小樊
32
2025-10-22 20:58:35
欄目: 智能運維

Ubuntu Jenkins與Docker集成的完整流程

1. 環境準備:安裝Docker與Jenkins

在Ubuntu系統上,首先需要安裝Docker和Jenkins,確保兩者能正常運行。

1.1 安裝Docker

更新軟件包列表并安裝依賴:

sudo apt update
sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

添加Docker官方GPG密鑰和軟件源:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

安裝Docker CE及組件:

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io

啟動Docker并設置開機自啟:

sudo systemctl start docker
sudo systemctl enable docker

關鍵操作:將Jenkins用戶加入Docker組(避免后續使用Docker命令需要sudo):

sudo usermod -aG docker jenkins
sudo systemctl restart jenkins  # 重啟Jenkins使組權限生效

驗證Docker安裝:

docker --version  # 應輸出Docker版本信息

1.2 安裝Jenkins

添加Jenkins官方源并安裝:

wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
echo deb https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list
sudo apt update
sudo apt install -y jenkins

啟動Jenkins并設置開機自啟:

sudo systemctl start jenkins
sudo systemctl enable jenkins

訪問http://<服務器IP>:8080,通過命令sudo cat /var/lib/jenkins/secrets/initialAdminPassword獲取初始密碼,完成初始配置(如安裝推薦插件、創建管理員賬號)。

2. Jenkins配置:安裝插件與授權

要讓Jenkins能控制Docker,需安裝必要插件并配置Docker訪問權限。

2.1 安裝Docker相關插件

登錄Jenkins管理界面,進入Manage Jenkins > Manage Plugins

  • 在“Available”標簽頁搜索以下插件,勾選后點擊“Install without restart”:
    • Docker Pipeline:支持在Pipeline腳本中直接使用Docker命令(如docker.build、docker.image)。
    • Docker Plugin(可選):提供Docker主機管理和容器操作的UI界面。

2.2 配置Docker訪問權限

為了讓Jenkins能遠程控制Docker守護進程,需修改Docker的通信配置:
編輯Docker守護進程配置文件:

sudo vim /etc/docker/daemon.json

添加以下內容(允許TCP連接,端口2375):

{
  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

重啟Docker使配置生效:

sudo systemctl restart docker

安全提示:開放2375端口存在安全風險,建議僅在測試環境使用;生產環境建議使用TLS加密或Docker Swarm模式。

3. 創建Jenkins Pipeline:集成Docker步驟

通過Pipeline腳本定義構建、測試、部署流程,結合Docker實現容器化CI/CD。

3.1 編寫Jenkinsfile

在項目代碼根目錄創建Jenkinsfile,示例如下(以Node.js應用為例):

pipeline {
    agent any
    environment {
        DOCKER_IMAGE = "your-dockerhub-username/your-app-name:${env.BUILD_NUMBER}"  // 鏡像名稱(含構建編號)
        DOCKER_HUB_CREDENTIALS = credentials('dockerhub-account')  // Jenkins中配置的Docker Hub憑證ID
    }
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'https://github.com/your/repo.git'  // 拉取代碼
            }
        }
        stage('Build Image') {
            steps {
                script {
                    // 使用Docker Pipeline插件構建鏡像
                    docker.build(DOCKER_IMAGE)
                }
            }
        }
        stage('Test') {
            steps {
                script {
                    // 在構建的鏡像中運行測試
                    docker.image(DOCKER_IMAGE).inside {
                        sh 'npm install'  // 安裝依賴
                        sh 'npm test'     // 執行測試
                    }
                }
            }
        }
        stage('Push Image') {
            when {
                branch 'main'  // 僅main分支推送鏡像
            }
            steps {
                script {
                    // 登錄Docker Hub并推送鏡像
                    docker.withRegistry('https://registry.hub.docker.com', DOCKER_HUB_CREDENTIALS) {
                        docker.image(DOCKER_IMAGE).push()
                    }
                }
            }
        }
        stage('Deploy') {
            steps {
                script {
                    // 示例:通過SSH推送鏡像到目標服務器(需提前配置SSH憑證)
                    def remoteServer = 'user@your-server-ip'
                    def remoteDir = '/path/to/deploy'
                    sshagent(['ssh-account']) {  // Jenkins中配置的SSH憑證ID
                        sh "scp -r ${remoteDir}/* ${remoteServer}:${remoteDir}"
                        sh "ssh ${remoteServer} 'cd ${remoteDir} && docker-compose pull && docker-compose up -d'"
                    }
                }
            }
        }
    }
}

3.2 創建Pipeline任務

  • 登錄Jenkins,點擊New Item,輸入任務名稱(如docker-app-ci),選擇Pipeline類型,點擊“OK”。
  • Pipeline配置頁:
    • 選擇“Pipeline script from SCM”(從代碼倉庫讀取腳本)。
    • 配置代碼倉庫(如GitHub)的URL和憑證。
    • 設置“Script Path”為Jenkinsfile(即代碼根目錄下的Pipeline腳本文件名)。
  • 點擊“Save”,即可觸發構建(或手動點擊“Build Now”)。

4. 關鍵注意事項

  • Docker in Docker(DinD):若需要在Jenkins容器內運行Docker(如復雜CI場景),可將Docker守護進程掛載到Jenkins容器中:
    docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins:lts
    
    但需注意,DinD可能帶來安全風險(容器逃逸),生產環境建議使用Docker outside of Docker(DooD,即Jenkins主機直接運行Docker)。
  • 權限管理:確保Jenkins用戶有足夠的權限操作Docker(如docker build、docker push),避免因權限不足導致構建失敗。
  • 鏡像優化:使用多階段構建減少鏡像大小,添加.dockerignore文件排除不必要的文件(如node_modules、.git),提升構建效率。

通過以上步驟,即可實現Ubuntu系統上Jenkins與Docker的集成,支持容器化的持續集成與交付流程。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女