在CentOS上自定義Jenkins部署前,需先安裝Java(Jenkins依賴)、Git(代碼托管庫交互)、Docker(可選,用于容器化部署)等工具。
sudo yum install -y java-11-openjdk-devel
java -version # 驗證安裝
sudo yum install -y git
git --version # 驗證安裝
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker && sudo systemctl enable docker # 啟動并設置開機自啟
# 添加Jenkins官方YUM倉庫
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
# 安裝Jenkins
sudo yum install -y jenkins
# 啟動Jenkins并設置開機自啟
sudo systemctl start jenkins
sudo systemctl enable jenkins
# 下載Jenkins WAR包
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
# 后臺啟動Jenkins(指定端口為8080)
nohup java -jar jenkins.war --httpPort=8080 > jenkins.log 2>&1 &
# 查看初始管理員密碼(用于首次登錄)
tail -f jenkins.log # 密碼位于/var/lib/jenkins/secrets/initialAdminPassword
http://<服務器IP>:8080
,輸入初始管理員密碼(從/var/lib/jenkins/secrets/initialAdminPassword
獲?。?。進入“Manage Jenkins” → “Manage Plugins”,安裝以下插件:
進入“Manage Jenkins” → “Global Tool Configuration”,設置常用工具路徑:
JAVA_HOME
(如/usr/lib/jvm/java-11-openjdk
)。/usr/bin/git
)。MAVEN_HOME
(如/usr/share/maven
)。首次登錄后,設置管理員用戶名、密碼及郵箱,完成基礎配置。
進入Jenkins首頁,點擊“New Item”,選擇任務類型(如“Freestyle project”或“Pipeline”),輸入任務名稱后點擊“OK”。
https://github.com/your-repo/project.git
)。main
)。http://<Jenkins服務器IP>:8080/generic-webhook-trigger/invoke
)。H/5 * * * *
表示每5分鐘檢查一次代碼變更)。mvn clean package # Maven項目編譯打包
Jenkinsfile
),后續在代碼倉庫中維護Pipeline腳本。scp target/*.war tomcat@<測試服務器IP>:/opt/tomcat/webapps/
ssh tomcat@<測試服務器IP> "systemctl restart tomcat"
在代碼倉庫根目錄創建Jenkinsfile
,以代碼形式定義部署流程(推薦)。示例如下:
pipeline {
agent any // 使用任意可用節點
stages {
stage('Pull Code') {
steps {
git branch: 'main', url: 'https://github.com/your-repo/project.git'
}
}
stage('Build') {
steps {
sh 'mvn clean package' // Maven編譯打包
}
}
stage('Deploy to Test') {
steps {
sh 'scp target/*.war tomcat@<測試服務器IP>:/opt/tomcat/webapps/'
ssh tomcat@<測試服務器IP> 'systemctl restart tomcat'
}
}
stage('Deploy to Production') {
when {
expression { return currentBuild.result == 'SUCCESS' } // 僅構建成功時部署
}
steps {
input message: '確認部署到生產環境?', ok: 'Deploy'
sh 'scp target/*.war tomcat@<生產服務器IP>:/opt/tomcat/webapps/'
ssh tomcat@<生產服務器IP> 'systemctl restart tomcat'
}
}
}
post {
always {
echo '構建流程結束,發送通知...'
}
success {
echo '構建成功!'
}
failure {
echo '構建失敗,請檢查日志!'
}
}
}
FROM tomcat:9.0
COPY target/*.war /usr/local/tomcat/webapps/ROOT.war
EXPOSE 8080
CMD ["catalina.sh", "run"]
stage('Build Docker Image') {
steps {
script {
docker.build("your-dockerhub-id/your-app:${env.BUILD_NUMBER}")
}
}
}
stage('Push Docker Image') {
steps {
script {
docker.withRegistry('https://registry.hub.docker.com', 'dockerhub-credentials') {
docker.image("your-dockerhub-id/your-app:${env.BUILD_NUMBER}").push()
}
}
}
}
stage('Deploy with Docker') {
steps {
ssh tomcat@<測試服務器IP> 'docker pull your-dockerhub-id/your-app:${env.BUILD_NUMBER} && docker stop your-app || true && docker rm your-app || true && docker run -d -p 8080:8080 --name your-app your-dockerhub-id/your-app:${env.BUILD_NUMBER}'
}
}
通過Jenkins參數化構建(如“String Parameter”添加ENVIRONMENT
參數,值為test
或production
),在Pipeline腳本中根據參數選擇部署目標:
parameters {
string(name: 'ENVIRONMENT', defaultValue: 'test', description: '部署環境(test/production)')
}
stage('Deploy') {
steps {
script {
if (params.ENVIRONMENT == 'test') {
// 部署到測試環境
} else if (params.ENVIRONMENT == 'production') {
// 部署到生產環境(需增加確認步驟)
}
}
}
}
在Pipeline中添加測試階段(如JUnit測試)和代碼質量檢查(如SonarQube掃描):
stage('Test') {
steps {
sh 'mvn test' // 執行單元測試
}
}
stage('Code Quality Check') {
steps {
withSonarQubeEnv('sonarqube-server') { // 配置SonarQube服務器
sh 'mvn sonar:sonar'
}
}
}
sudo firewall-cmd --add-port=8080/tcp --permanent
,sudo firewall-cmd --reload
)。tomcat
或jenkins
)有執行腳本的權限(chmod +x deploy.sh
)。通過以上步驟,可在CentOS上自定義Jenkins部署流程,實現從代碼提交到測試、生產的自動化持續交付。根據項目需求,可進一步擴展Pipeline腳本(如集成性能測試、通知機器人),或優化部署策略(如藍綠部署、滾動更新)。