温馨提示×

怎样自定义centos jenkins部署

小樊
57
2025-09-20 08:34:25
栏目: 智能运维

一、环境准备:安装基础依赖

在CentOS上自定义Jenkins部署前,需先安装Java(Jenkins依赖)、Git(代码托管库交互)、Docker(可选,用于容器化部署)等工具。

  • 安装Java:Jenkins基于Java开发,需安装JDK(推荐1.8或11版本)。
    sudo yum install -y java-11-openjdk-devel
    java -version  # 验证安装
    
  • 安装Git:用于从代码仓库拉取代码。
    sudo yum install -y git
    git --version  # 验证安装
    
  • 安装Docker(可选):若需容器化部署应用(如Tomcat、Nginx),需安装Docker。
    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:选择合适方式部署

1. YUM方式安装(推荐,便于管理)

# 添加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

2. WAR包方式安装(灵活,适合自定义环境)

# 下载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

三、配置Jenkins:基础设置与插件安装

1. 首次登录配置

  • 访问http://<服务器IP>:8080,输入初始管理员密码(从/var/lib/jenkins/secrets/initialAdminPassword获取)。
  • 选择“安装推荐插件”(包含Git、Pipeline等基础插件),或手动选择所需插件。

2. 安装必要插件

进入“Manage Jenkins” → “Manage Plugins”,安装以下插件:

  • Git Plugin:用于拉取代码仓库代码。
  • Pipeline Plugin:支持Pipeline as Code(通过Jenkinsfile定义流程)。
  • Generic Webhook Trigger Plugin:用于Git仓库Webhook触发构建。
  • Docker Pipeline Plugin(可选):用于Docker容器化部署。

3. 配置全局工具

进入“Manage Jenkins” → “Global Tool Configuration”,设置常用工具路径:

  • Java:配置JAVA_HOME(如/usr/lib/jvm/java-11-openjdk)。
  • Git:配置Git安装路径(如/usr/bin/git)。
  • Maven(可选):配置MAVEN_HOME(如/usr/share/maven)。

4. 创建管理员账户

首次登录后,设置管理员用户名、密码及邮箱,完成基础配置。

四、创建Jenkins任务:自定义部署流程

1. 新建任务

进入Jenkins首页,点击“New Item”,选择任务类型(如“Freestyle project”或“Pipeline”),输入任务名称后点击“OK”。

2. 配置源码管理

  • 选择“Git”,填写代码仓库URL(如https://github.com/your-repo/project.git)。
  • 配置Credentials(SSH密钥或账号密码),选择分支(如main)。

3. 配置构建触发器

  • Webhook触发:安装Generic Webhook Trigger插件后,勾选“Generic webhook trigger”,生成Token并配置Git仓库Webhook(指向http://<Jenkins服务器IP>:8080/generic-webhook-trigger/invoke)。
  • 轮询SCM:设置定时轮询(如H/5 * * * *表示每5分钟检查一次代码变更)。

4. 配置构建步骤

  • Freestyle项目:在“Build”部分添加“Execute shell”步骤,编写构建脚本(如Maven编译、打包):
    mvn clean package  # Maven项目编译打包
    
  • Pipeline项目:选择“Pipeline script from SCM”,配置SCM为Git,填写Jenkinsfile路径(如Jenkinsfile),后续在代码仓库中维护Pipeline脚本。

5. 配置构建后操作

  • 部署到测试环境:添加“Execute shell”步骤,执行部署脚本(如复制WAR包到Tomcat并重启):
    scp target/*.war tomcat@<测试服务器IP>:/opt/tomcat/webapps/
    ssh tomcat@<测试服务器IP> "systemctl restart tomcat"
    
  • 发送通知:通过邮件或钉钉插件发送构建结果通知。

五、自定义Pipeline脚本:实现持续交付

在代码仓库根目录创建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 '构建失败,请检查日志!'
        }
    }
}

六、高级自定义:优化部署流程

1. 使用Docker容器化部署

  • 编写Dockerfile:在项目根目录创建Dockerfile,定义应用镜像。
    FROM tomcat:9.0
    COPY target/*.war /usr/local/tomcat/webapps/ROOT.war
    EXPOSE 8080
    CMD ["catalina.sh", "run"]
    
  • 修改Pipeline脚本:添加Docker构建与部署步骤。
    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}'
        }
    }
    

2. 配置多环境部署

通过Jenkins参数化构建(如“String Parameter”添加ENVIRONMENT参数,值为testproduction),在Pipeline脚本中根据参数选择部署目标:

parameters {
    string(name: 'ENVIRONMENT', defaultValue: 'test', description: '部署环境(test/production)')
}

stage('Deploy') {
    steps {
        script {
            if (params.ENVIRONMENT == 'test') {
                // 部署到测试环境
            } else if (params.ENVIRONMENT == 'production') {
                // 部署到生产环境(需增加确认步骤)
            }
        }
    }
}

3. 集成测试与代码质量检查

在Pipeline中添加测试阶段(如JUnit测试)和代码质量检查(如SonarQube扫描):

stage('Test') {
    steps {
        sh 'mvn test'  // 执行单元测试
    }
}

stage('Code Quality Check') {
    steps {
        withSonarQubeEnv('sonarqube-server') {  // 配置SonarQube服务器
            sh 'mvn sonar:sonar'
        }
    }
}

七、常见问题排查

  • 无法访问Jenkins:检查防火墙是否开放8080端口(sudo firewall-cmd --add-port=8080/tcp --permanentsudo firewall-cmd --reload)。
  • Git拉取失败:检查Credentials是否正确,或Git仓库URL是否可达。
  • 构建脚本权限问题:确保Jenkins用户(如tomcatjenkins)有执行脚本的权限(chmod +x deploy.sh)。
  • Docker部署失败:检查Docker服务是否启动,或镜像名称、端口映射是否正确。

通过以上步骤,可在CentOS上自定义Jenkins部署流程,实现从代码提交到测试、生产的自动化持续交付。根据项目需求,可进一步扩展Pipeline脚本(如集成性能测试、通知机器人),或优化部署策略(如蓝绿部署、滚动更新)。

0