首页主机资讯Debian系统Jenkins如何集成CI/CD

Debian系统Jenkins如何集成CI/CD

时间2025-12-05 12:50:06发布访客分类主机资讯浏览537
导读:在 Debian 上集成 Jenkins 的 CI/CD 实践指南 一 环境准备与安装 安装 Java 11(Jenkins 推荐版本): 执行:sudo apt update && sudo apt install -...

在 Debian 上集成 Jenkins 的 CI/CD 实践指南

一 环境准备与安装

  • 安装 Java 11(Jenkins 推荐版本):
    • 执行:sudo apt update & & sudo apt install -y openjdk-11-jdk
    • 验证:java -version
  • 添加 Jenkins 官方仓库 并安装:
    • 导入密钥:curl -fsSL https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo tee /usr/share/keyrings/jenkins-keyring.asc > /devref
    • 写入源:echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] https://pkg.jenkins.io/debian-stable binary/" | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null
    • 安装与启动:sudo apt update & & sudo apt install -y jenkins & & sudo systemctl enable --now jenkins
  • 访问与解锁:
    • 打开:http://< 服务器IP> :8080
    • 初始密码:sudo cat /var/lib/jenkins/secrets/initialAdminPassword
  • 防火墙放行(如使用 UFW):
    • sudo ufw allow 8080/tcp
    • sudo ufw allow 50000/tcp(JNLP Agent 通信)
    • sudo ufw reload
  • 建议资源配置(生产):8 核 CPU / 16GB 内存 / 100GB SSD;测试:4 核 / 8GB / 50GB

二 初始化与安全配置

  • 插件安装(精简够用):
    • 进入 Manage Jenkins → Plugin Manager,安装:Pipeline、Git、Maven Integration、Docker Pipeline、Credentials Binding、Blue Ocean、Kubernetes(按需)。
    • 可选加速:在 Manage Jenkins → Plugin Manager → Advanced 将 Update Site 替换为 https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
  • 安全与权限:
    • 启用安全:Manage Jenkins → Security → Enable security,选择 Logged-in users can do anything,创建管理员账户,禁用匿名访问。
    • 系统配置:设置 Jenkins URL、时区;仅开放必要端口,限制来源 IP。

三 代码托管与触发配置

  • SSH 连接 Git(推荐):
    • 生成密钥:ssh-keygen -t rsa -b 4096 -f ~/.ssh/jenkins_github
    • 将公钥(如 jenkins_github.pub)添加到代码托管(GitHub/GitLab)Deploy Keys 或用户 SSH Keys
    • 在 Jenkins 添加凭据:Manage Jenkins → Credentials → System → Global credentials,类型选 SSH Username with private key,ID 设为 github-ssh
  • Webhook 触发(Push 即构建):
    • GitHub/GitLab 项目设置 Webhook:http://< JENKINS_URL> /github-webhook/(或 /gitlab-webhook/)。
    • Jenkins 任务启用触发器:GitHub hook trigger for GITScm polling(GitHub)或 Build when a change is pushed to a branch(GitLab)。
  • 备选轮询(无公网或无法开放 Webhook 时):
    • 在任务配置 Build Triggers → Poll SCM,如:H/5 * * * *(每 5 分钟检查一次)。

四 流水线示例与多语言实践

  • Java + Maven 示例(声明式 Pipeline)
    • 在代码根目录创建 Jenkinsfile
      pipeline {
      
        agent any
        tools {
       maven 'Maven 3.8' }
         // 需在 Global Tool Configuration 配置 Maven
        stages {
      
          stage('Checkout') {
      
            steps {
       git url: 'git@github.com:org/repo.git', branch: 'main', credentialsId: 'github-ssh' }
      
          }
      
          stage('Build') {
      
            steps {
       sh 'mvn -B -DskipTests clean package' }
      
          }
      
          stage('Test') {
      
            steps {
       sh 'mvn test' }
      
            post {
       always {
       junit '**/target/surefire-reports/*.xml' }
       }
      
          }
      
          stage('Deploy Dev') {
      
            when {
       branch 'main' }
      
            steps {
      
              sshPublisher(publishers: [sshPublisherDesc(
                configName: 'prod-ssh',
                transfers: [sshTransfer(
                  sourceFiles: 'target/*.jar',
                  removePrefix: 'target',
                  remoteDirectory: '/opt/app'
                )],
                verbose: true
              )])
            }
      
          }
      
        }
      
      }
      
      
    • 任务创建:新建 Pipeline,选择 Pipeline script from SCM,指定仓库与凭据;在 Manage Jenkins → Configure System → Publish over SSH 配置目标服务器(名称如 prod-ssh)。
  • Python 示例(声明式 Pipeline)
    pipeline {
    
      agent any
      stages {
    
        stage('Checkout') {
    
          steps {
     git url: 'git@github.com:org/pyapp.git', branch: 'main', credentialsId: 'github-ssh' }
    
        }
    
        stage('Install') {
    
          steps {
         sh 'python -m pip install --upgrade pip &
        &
     pip install -r requirements.txt' }
    
        }
    
        stage('Test') {
    
          steps {
     sh 'pytest --junitxml=reports/results.xml' }
    
          post {
     always {
     junit 'reports/results.xml' }
     }
    
        }
    
        stage('Deploy') {
    
          when {
     branch 'main' }
    
          steps {
     sh './deploy.sh' }
    
        }
    
      }
    
    }
        
    
  • 说明:
    • Java 任务依赖 Maven IntegrationPublish Over SSH 插件;Python 任务可按需集成 DockerAnsible 执行部署。

五 扩展与运维最佳实践

  • 架构与扩展:
    • 采用 Master–Agent 分布式架构,Master 负责调度,Agent 执行构建,提升并发与隔离性;可按需横向扩展 Kubernetes Pod Agent 或静态 SSH Agent。
  • 配置即代码与一致性:
    • 使用 JCasC(Configuration as Code) 管理 Jenkins 全局配置、工具与插件版本,保证环境可重建与一致性。
  • 可观测性与度量:
    • 暴露 Prometheus 指标(/prometheus),用 Grafana 构建构建时长、成功率、队列等仪表盘,持续优化流水线性能。
  • 安全与合规:
    • 最小权限原则、凭据托管(SSH/用户名密码/Secret 文本)、定期升级 Jenkins 与插件、备份 JENKINS_HOME
  • 资源与性能:
    • 并发构建与缓存策略(如 Maven ~/.m2 缓存)、构建产物归档与清理策略,避免磁盘膨胀。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: Debian系统Jenkins如何集成CI/CD
本文地址: https://pptw.com/jishu/764631.html
Linux Notepad:如何实现语法检查 Linux Notepad:如何进行版本控制集成

游客 回复需填写必要信息