溫馨提示×

如何在CentOS上實現Jenkins自動化

小樊
58
2025-09-24 12:26:14
欄目: 智能運維

一、環境準備

在CentOS上實現Jenkins自動化前,需完成以下基礎準備:

  1. 系統更新:運行sudo yum update -y確保系統軟件包為最新版本。
  2. 安裝Java環境:Jenkins基于Java開發,推薦安裝OpenJDK 11及以上版本(如sudo yum install -y java-11-openjdk-devel),安裝后通過java -version驗證是否成功。
  3. 安裝依賴工具:安裝wget用于下載Jenkins倉庫配置(sudo yum install -y wget)。

二、安裝Jenkins

1. 添加Jenkins官方倉庫

通過以下命令添加Jenkins Red Hat Stable倉庫并導入GPG密鑰(確保軟件包來源可信):

sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key

2. 安裝Jenkins

使用YUM包管理器安裝Jenkins(自動解決依賴):

sudo yum install -y jenkins

3. 啟動與配置Jenkins服務

啟動Jenkins服務并設置開機自啟:

sudo systemctl start jenkins
sudo systemctl enable jenkins

通過sudo systemctl status jenkins檢查服務狀態(顯示“active (running)”即為成功)。

三、配置Jenkins

1. 獲取初始密碼

首次訪問Jenkins需輸入管理員初始密碼,可通過以下命令獲?。?/p>

sudo cat /var/lib/jenkins/secrets/initialAdminPassword

2. 訪問Web界面

在瀏覽器中輸入http://<服務器IP>:8080,粘貼初始密碼完成解鎖。

3. 安裝推薦插件

選擇“安裝推薦插件”(如Git、Maven、Pipeline等),覆蓋常用功能;或進入“Manage Jenkins > Manage Plugins”手動安裝所需插件(如Docker、Kubernetes等)。

4. 配置全局工具

進入“Manage Jenkins > Global Tool Configuration”,設置工具路徑(如JDK、Maven、Git):

  • JDK:指定安裝路徑(如/usr/lib/jvm/java-11-openjdk);
  • Maven:配置MAVEN_HOME(如/usr/share/maven);
  • Git:填寫Git安裝路徑(如/usr/bin/git)。

5. 配置防火墻

允許Jenkins端口(默認8080)通過防火墻:

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload

6. 創建管理員賬戶

完成初始配置后,創建管理員賬戶(設置用戶名、密碼、郵箱),替代默認的“admin”賬戶。

四、創建自動化任務

1. 新建任務

進入Jenkins主頁,點擊“New Item”,輸入任務名稱(如“my-app-ci”),選擇任務類型:

  • Freestyle Project:適用于簡單構建流程(如編譯、打包);
  • Pipeline:適用于復雜流水線(如多階段構建、部署),推薦使用。

2. 配置任務(以Pipeline為例)

(1)配置源碼管理

選擇“Git”,填寫倉庫URL(如https://github.com/user/repo.git)和分支(如main);若倉庫為私有,需添加SSH密鑰或賬號密碼作為憑證。

(2)配置構建觸發器
  • 代碼提交觸發:勾選“GitHub hook trigger for GITScm polling”(需在GitHub倉庫中配置Webhook,指向http://<服務器IP>:8080/github-webhook/);
  • 定時觸發:使用Cron語法(如H/5 * * * *表示每5分鐘觸發一次)。
(3)配置Pipeline腳本

選擇“Pipeline script from SCM”,指定SCM類型為“Git”,填寫倉庫URL和Jenkinsfile路徑(如Jenkinsfile,需存放在倉庫根目錄)。

(4)示例Jenkinsfile(聲明式Pipeline)
pipeline {
    agent any  // 使用任意可用節點
    stages {
        stage('Checkout') {
            steps {
                git branch: 'main', url: 'https://github.com/user/repo.git'  // 拉取代碼
            }
        }
        stage('Build') {
            steps {
                sh 'mvn -B clean package'  // 使用Maven編譯打包
            }
        }
        stage('Test') {
            steps {
                junit '**/target/surefire-reports/*.xml'  // 運行單元測試并生成報告
            }
        }
        stage('Deploy') {
            steps {
                sh 'scp target/*.jar user@server:/opt/app/'  // 部署到測試服務器
            }
        }
    }
    post {
        always {
            cleanWs()  // 清理工作空間
        }
    }
}

保存任務后,點擊“Build Now”即可觸發首次構建。

五、自動化觸發優化

1. Webhook觸發

在代碼倉庫(如GitHub、GitLab)中配置Webhook,指向Jenkins服務器的/github-webhook//gitlab-webhook/接口,實現代碼提交后自動觸發構建。

2. 定時觸發

通過Cron語法設置定時任務(如每天凌晨2點構建):

pipeline {
    triggers {
        cron('H 2 * * *')  // 每天2點觸發
    }
    // 其他配置...
}

3. 手動觸發

在任務頁面點擊“Build Now”,手動啟動構建(適用于需要人工確認的場景)。

六、高級實踐(可選)

1. 分布式構建

通過Docker添加構建節點(如Linux節點),提升構建效率:

docker run -d --name jenkins-agent -p 50000:50000 jenkins/agent

在Jenkins“Manage Jenkins > Manage Nodes and Clouds”中添加節點,配置Label(如linux),在Pipeline中使用agent { label 'linux' }指定節點。

2. 容器化部署

結合Docker和Kubernetes實現標準化部署:

stage('Build Image') {
    steps {
        script {
            docker.build("myapp:${env.BUILD_ID}")  // 構建Docker鏡像
        }
    }
}
stage('Push to Registry') {
    steps {
        withCredentials([usernamePassword(credentialsId: 'dockerhub', usernameVariable: 'DOCKER_USER', passwordVariable: 'DOCKER_PASS')]) {
            docker.withRegistry('https://registry.hub.docker.com', 'dockerhub') {
                docker.image("myapp:${env.BUILD_ID}").push()  // 推送鏡像到Docker Hub
            }
        }
    }
}
stage('Deploy to Kubernetes') {
    steps {
        sh 'kubectl set image deployment/myapp myapp=myapp:${env.BUILD_ID}'  // 更新Kubernetes Pod鏡像
    }
}

3. 質量門禁

集成SonarQube進行代碼質量掃描,阻斷問題構建:

stage('Code Scan') {
    steps {
        withSonarQubeEnv('sonar-server') {  // 配置SonarQube服務器
            sh 'mvn sonar:sonar'
        }
    }
}
stage('Quality Gate') {
    steps {
        timeout(time: 15, unit: 'MINUTES') {
            waitForQualityGate abortPipeline: true  // 若質量不達標,終止流水線
        }
    }
}

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