温馨提示×

centos jenkins怎样进行持续交付

小樊
46
2025-11-14 04:14:58
栏目: 智能运维

在 CentOS 上使用 Jenkins 实施持续交付

一 环境准备与安装

  • 安装 Java 8/11(Jenkins 2.426+ 建议使用 Java 11),并验证版本:java -version
  • 安装 Jenkins(CentOS 7/8 推荐 RPM 方式):
    • 导入仓库并安装: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
      sudo yum install -y jenkins
    • 启动并设置开机自启:sudo systemctl start jenkins && sudo systemctl enable jenkins
    • 解锁初始化:查看初始密码 sudo cat /var/lib/jenkins/secrets/initialAdminPassword,访问 http://<服务器IP>:8080 完成安装向导。
  • 安装常用工具与插件:在 Manage Jenkins > Plugins 安装 GitPipelineDocker PipelineBlue Ocean 等。
  • 安全与网络:开放 8080 端口(如 firewalld:sudo firewall-cmd --permanent --add-port=8080/tcp && sudo firewall-cmd --reload),并按需配置 SELinuxJenkins 认证/授权

二 构建与交付流水线设计

  • 推荐采用 Pipeline as Code(仓库根目录放置 Jenkinsfile),通过 SCM 拉取并在 Jenkins 中创建 Pipeline 项目执行。
  • 典型阶段:
    • Checkout:拉取指定分支代码。
    • Build:执行构建(如 mvn packagepip install -r requirements.txtmake)。
    • Test:运行单元/集成测试并收集结果。
    • Artifact:归档产物(如 .jar/.whl)。
    • Deploy/Release:推送到测试/预发/生产环境(可结合参数化构建与审批)。
  • 触发方式:
    • 轮询 SCM(简单但延迟较高)。
    • Webhook(推荐,代码推送即触发,需在代码托管平台配置)。

三 交付方式一 传统主机与脚本交付

  • 适用场景:物理机/虚拟机、传统 Tomcat、静态站点等。
  • 关键步骤:
    • Jenkins 凭据中配置目标主机的 SSH 私钥(用户名/密码或密钥)。
    • JenkinsfileDeploy 阶段使用 scp 传输产物,使用 ssh 执行远程命令(如重启服务)。
  • 示例(Java/Tomcat):
    pipeline {
      agent any
      stages {
        stage('Pull Code') {
          steps { git url: 'https://gitlab.com/your-repo.git', branch: 'main' }
        }
        stage('Build') {
          steps { sh 'mvn clean package' }
        }
        stage('Deploy') {
          steps {
            sh 'scp target/*.war tomcat@your-server:/path/to/tomcat/webapps'
            ssh tomcat@your-server 'systemctl restart tomcat'
          }
        }
      }
    }
    
  • 如需在目标机执行部署命令,确保 Jenkins 用户具备相应 sudo 权限或以具备权限的用户运行。

四 交付方式二 容器化交付与 Kubernetes

  • 适用场景:微服务、弹性伸缩、标准化交付。
  • 关键步骤:
    • Jenkins 安装 Docker Pipeline 插件,并在 Manage Jenkins > Configure System 或凭据中配置 Docker Registry(如 Docker Hub)。
    • Jenkinsfile 中构建镜像、推送到仓库,然后使用 kubectl apply 部署到 Kubernetes
  • 示例:
    pipeline {
      agent any
      environment {
        IMAGE = "your-registry/your-app:${env.BUILD_NUMBER}"
        K8S_NS = "default"
      }
      stages {
        stage('Checkout') { steps { git url: 'https://github.com/your-repo.git', branch: 'main' } }
        stage('Build')     { steps { sh 'docker build -t $IMAGE .' } }
        stage('Push')      {
          steps {
            withDockerRegistry(credentialsId: 'docker-hub', url: '') {
              sh 'docker push $IMAGE'
            }
          }
        }
        stage('Deploy to K8S') {
          steps {
            sh "kubectl set image deployment/my-app container=my-app=$IMAGE -n $K8S_NS"
            sh "kubectl rollout status deployment/my-app -n $K8S_NS"
          }
        }
      }
    }
    
  • 如需在 Kubernetes 中动态提供 Jenkins Agent,可安装 Kubernetes 插件并在 Manage Jenkins > Configure System > Cloud 配置 Kubernetes 云,实现弹性构建与隔离。

五 安全加固与最佳实践

  • 凭据与权限:使用 Jenkins 凭据管理 SSH 私钥、Docker Registry 账号、Kubeconfig;最小权限原则,禁止在脚本中硬编码敏感信息。
  • 网络安全:仅开放必要端口(如 8080),限制来源 IP;必要时启用 反向代理/HTTPS
  • 系统与合规:按需配置 SELinux、定期更新 Jenkins/插件/系统补丁;启用 审计日志与告警。
  • 质量门禁:在流水线中加入 单元测试、代码扫描、镜像安全扫描,测试不通过或安全不合规则阻断发布。
  • 可观测性:启用 构建状态通知(邮件/企业微信/Slack)、测试覆盖率构建时长等仪表板,持续优化流水线效率。

0