Day05-02-Jenkins-pipeline

1. Jenkins-Pipeline概述

  • ansible-ad-hoc命令行版本ansible模块。
  • ansible-playbook剧本。

1) pipeline?

  • pipeline-流水线

  • 通过jenkins的工作框架,通过"代码的方式",将多个任务联合起来.

  • 流水线

    • 模块化
    • 方便检查
    • 排错
    • 整体运行清晰

2. pipeline格式

三大核心:

  • agent:类似于ansible hosts 指定在哪些机器运行pipeline

  • stages:与stage 类似于 ansible tasks

  • steps:具体的指令 类似于ansible中调用各种模块

image-20240523170516823

image-20240523172238250

3. 小试牛刀

pipeline {
    agent any
    environment {
      host="oldboylinux.com"
    }
    stages {
        stage('1.Open') {
            steps {
                echo "open eyes $host"
                }
            }
            
            stage('2.CloseAlarm') {
                steps {
                    echo "close alarm $host"
                    }
                }
                
                stage('3.Go_to_sleep') {
                    steps {
                        echo "go-to-sleep $host"
                        }
                }
        }
}

image-20240523172826614

image-20240523172917711

4. Java上线的项目

4.1 流程汇总

  • Jenkins拉取Gitlab代码,获取tag标签

  • Jenkins调用Sonarqube/sonar scan 代码质量分析

  • 略: Jenkins调用发送脚本,发送代码质量检查结果

  • Jenkins调用Maven进行构建

  • Jenkins调用部署脚本

    • 摘下web服务器
    • 分发代码,解压代码,软连接…重启服务
    • 负载均衡接入web服务器
  • 略:Jenkins通过脚本,发送上线结果

4.2 根据流程书写pipeline架构

pipeline {
    agent any
    stages {
    stage('git_pull') {
    // 拉取代码
        steps {
            echo "open eyes $host"
        }
    }
    
    stage('sonar') {
    // sonarqube 代码质量检查
        steps {
            echo "close alarm  $host"
        }
    }
    
    stage('sonar_result_tongzhi') {
    // 代码质量检查结果发送
        steps {
            echo
        }
    }
    
    stage('maven_build') {
    // java代码编译
        steps {
            echo
        }
    }
    
    stage('war_deploy') {
    // war包分发,部署
        steps {
            echo
        }
    }
    
    stage('deploy_result') {
    // war部署 结果
        steps {
            echo
        }
    }
  }
}

4.3 分步实现

image-20240524085616907

image-20240524085737404

1)拉取代码

stage('1.git_pull') {
// 拉取代码
    steps {
        git branch: '${git_tag}',credentialsId: '1b05ca78-742d-4826-9c27-bd97abe58153', url: 'git@gitlab.oldboylinux.cn:dev/java_simple.git'
    }
}

image-20240524113520944

image-20240524113531243

2)检查,编译,部署

image-20240524113558850

image-20240524113614202

stage('2.sonar') {
// sonarqube 代码质量检查
steps {
    sh '''/app/tools/maven/bin/mvn clean verify sonar:sonar \\
        -Dsonar.projectName=${JOB_NAME} \\
        -Dsonar.projectKey=${JOB_NAME} \\
        -Dsonar.host.url=http://sonar.oldboylinux.cn:9000 \\
        -Dsonar.login=0fad8e180d138aac0ec793f5bf327d6ba233e82a '''
    }
}

stage('3.sonar_result_tongzhi') {
// 代码质量检查结果发送
    steps {
        echo "没配置"
    }
}  

stage('4.maven_build') {
// java代码编译
    steps {
        sh ''' /app/tools/maven/bin/mvnclean package -DskipTests '''
    }
}

stage('4.5 .确认是否部署') {
    steps {
        input '是否继续进行部署'
    }
}

image-20240524114427671

4.4 完整pipeline代码

pipeline {
    agent any
    stages {
        stage('1.git_pull') {
        // 拉取代码
            steps {
                git branch: 'master', credentialsId: '1b05ca78-742d-4826-9c27-bd97abe58153', url: 'git@gitlab.oldboylinux.cn:dev/java_simple.git'
            }
        }
        
        stage('2.sonar') {
        // sonarqube 代码质量检查
            steps {
                sh '''/app/tools/maven/bin/mvn clean verify sonar:sonar \\
                    -Dsonar.projectName=${JOB_NAME} \\
                    -Dsonar.projectKey=${JOB_NAME} \\
                    -Dsonar.host.url=http://sonar.oldboylinux.cn:9000 \\
                    -Dsonar.login=0fad8e180d138aac0ec793f5bf327d6ba233e82a '''
            }
        }
        
        stage('3.sonar_result_tongzhi') {
        // 代码质量检查结果发送
            steps {
                echo "没配置"
            }
        }
        
        stage('4.maven_build') {
        // java代码编译
            steps {
                sh ''' /app/tools/maven/bin/mvnclean package -DskipTests '''
            }
        }
        
        stage('4.5.确认是否部署') {
            steps {
                input '是否继续进行部署'
            }
        }
        
        stage('5.war_deploy') {
        // war包分发,部署
            steps {
                //sh ''' sh -x /server/scripts/java_deploy_cd.sh '''
                echo "deploy"
            }
        }
        
        stage('6.deploy_result') {
        // war部署 结果
            steps {
                echo "部署结果"
            }
        }
     }
}

image-20240524115654220

5. 根据tag标签拉取代码(了解自己扩展即可)

  • 参数化构建
parameters
gitParameter git参数化构建name变量名字 tag_name变量
type变量类型 PT_TAG获取tag标签,PT_BRANCH分支名字
defaultValue变量的默认值
useRepository指定的源。
如何调用这个变量${tag_name} ❌
${params.tag_name}

Git Parameter | Jenkins plugin:https://plugins.jenkins.io/git-parameter/

pipeline {
    agent any
    parameters {
        gitParameter name: 'tag_name',
                     type: 'PT_TAG',
                     defaultValue: 'master',
                useRepository: "git@gitlab.oldboylinux.cn:dev/java_simple.git"
               }
    stages {
        stage('Hello') {
            steps {
                git branch: "${params.tag_name}",url: 'git@gitlab.oldboylinux.cn:dev/java_simple.git'
            }
        }
    }
 }
  • 需要先跑1次。

image-20240524133936676

  • 然后刷新

image-20240524133957615

6. 总结

  • devops ,ci/cd

  • git基本使用,下载,提交,标签,回滚,分支及分支合并

  • 远程仓库使用:

    • 码云/github 创建仓库,配置密钥
    • gitlab: 创建仓库,配置密钥,用户,项目授权.
  • Jenkins

    • 实现测试环境自动部署
    • 生产环境手动部署
    • 回滚
  • maven 打包工具/编译工具

  • 代码检测工具Sonarqube…

  • pipeline

  • 发送通知-钉钉

  • 项目:通过Pipeline实现()

    • 软件版本:
      • gitlab gitlab-ce-12.10.14
      • jenkins-2.289
      • sonarqube 7.7 (mysql)
    • 实现测试环境自动部署
    • 生产环境手动部署
    • 回滚
  • 8
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值