Jenkins3

环境准备

sonarqube的token为:d6028eee860737d6cdf746ca153e9c28e51cf322

钉钉的token为:2fb3f47786fd17fa681818d7cc63e04c6cca52a16f862f12889e5eecf66e917a

1. 钉钉通知sonar质检结果

https://gitee.com/chejiangyi/dingding-sonar

#jenkins
sonar_project_id=${JOB_NAME}
sonarreport=$(curl -s http://localhost:8082/?projectname=${sonar_project_id})
dingding_token=a097b5e1fd594a9db2b60ec49c20ee1d6c5a17ddbb2098985c628dc020461553
curl -s "https://oapi.dingtalk.com/robot/send?access_token=${dingding_token}" \
   -H "Content-Type: application/json" \
   -d "{
     \"msgtype\": \"markdown\",
     \"markdown\": {
         \"title\":\"sonar代码质量\",
         \"text\": \"## sonar代码质量报告: \n
[sonar地址](http://sonar.oldxu.com:9000/dashboard?id=${sonar_project_id}) \n
${sonarreport} \n\"
     }
 }"

实现:
基于Jenkins自动化构建项目->并检测代码质量–>然后 通过钉钉通知质量 检测结果。

2. pipeline流水线介绍

pipeline流水线: 指每一个生产单位只专注处理某一个片段的工作,以提高工作效率及产量。
在这里插入图片描述

不在是点鼠标完成,而是需要编写代码才能完成的(固定的语法格式):
在这里插入图片描述

(1)脚本实现一个简单的流水线:
在这里插入图片描述
在这里插入图片描述

(2)使用gitlab中指定的文件来执行
在这里插入图片描述
在这里插入图片描述

pipeline {
    agent any

    //流水线开始
    stages{
        stage('下载代码') {
            steps {
                echo "get code  ok"
            }
        }

        stage('检测代码') {
            steps {
                echo "check code ok"
            }
        }

        stage('编译代码') {
            steps {
                echo "build code ok"
            }
        }

        stage('发布代码') {
            steps {
                echo "deploy code ok"
            }
        }
    }
}

(3)使用流水线功能生成代码

在这里插入图片描述

在这里插入图片描述

3. pipeline实现java发布

pipeline {
    agent any

    //流水线开始
    stages{
        stage('下载代码') {
            steps {
               checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '60a946a8-b4a7-434c-8769-0b8b86ab1c30', url: 'git@10.0.0.200:ops/hello-world-war.git']]])
            }
        }

        /*java项目使用mvn、如果是非java项目,请使用sonar-scanner
        stage('检测代码') {
            steps {
                sh '/usr/local/sonar-scanner/bin/sonar-scanner \
                 -Dsonar.projectName=${JOB_NAME} \
                 -Dsonar.projectKey=${JOB_NAME} \
                 -Dsonar.sources=. \
                 -Dsonar.host.url=http://sonar.oldxu.com:9000 \
                    -Dsonar.login=422b4f1a205fa9b1888d8eecf012b338be4ea3ce'
                }
        }*/

        stage('检测代码') {
            steps {
                sh 'mvn sonar:sonar \
                -Dsonar.host.url=http://sonar.oldxu.com:9000 \
                -Dsonar.login=d6028eee860737d6cdf746ca153e9c28e51cf322'

            }
        }

        stage('编译代码') {
            steps {
                sh 'mvn package -Dmaven.test.skip=true'
            }
        }

        stage('是否发布') {
            steps {
                input message: '是否发布', ok: '发布'
            }
        }

        stage('发布代码') {
            steps {
                sh 'sh -x /scripts/java_deploy.sh'
            }
        }
    }
}

4. pipline实现java发布

jenkins pipeline质量检测:
当检测不通过拒绝执行后续操作:
在这里插入图片描述

下面代码中的质量检测功能块的代码,因为需要获取代码检测结果,是否为ok,所以必须要在sonarqube进行配置:

在这里插入图片描述

pipeline {
    agent any

    //流水线开始
    stages{
        stage('下载代码') {
            steps {
               checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '60a946a8-b4a7-434c-8769-0b8b86ab1c30', url: 'git@10.0.0.200:ops/hello-world-war.git']]])
            }
        }

        /*java项目使用mvn、如果是非java项目,请使用sonar-scanner
        stage('检测代码') {
            steps {
                sh '/usr/local/sonar-scanner/bin/sonar-scanner \
                 -Dsonar.projectName=${JOB_NAME} \
                 -Dsonar.projectKey=${JOB_NAME} \
                 -Dsonar.sources=. \
                 -Dsonar.host.url=http://sonar.oldxu.com:9000 \
                    -Dsonar.login=422b4f1a205fa9b1888d8eecf012b338be4ea3ce'
                }
        }*/

        stage('检测代码') {
            steps {
                withSonarQubeEnv('sonarqube-130'){
                sh 'mvn sonar:sonar \
                -Dsonar.host.url=http://sonar.oldxu.com:9000 \
                -Dsonar.login=d6028eee860737d6cdf746ca153e9c28e51cf322'
                }
            }
        }
         stage('质量检测') {
              steps {
                  script {
                      timeout(5) {
                          def qg = waitForQualityGate()
                              if (qg.status != 'OK') {
                                  error "Sonarqube代码检查失败,failure: ${qg.status}"
                          }
                      }
                  }
              }
          }

        stage('编译代码') {
            steps {
                sh 'mvn package -Dmaven.test.skip=true'
            }
        }

        stage('是否发布') {
            steps {
                input message: '是否发布', ok: '发布'
            }
        }

        stage('发布代码') {
            steps {
                sh 'sh -x /scripts/java_deploy.sh'
            }
        }
    }
         
      post {
          success {
              dingTalk accessToken: '2fb3f47786fd17fa681818d7cc63e04c6cca52a16f862f12889e5eecf66e917a', imageUrl: '', jenkinsUrl: 'http://10.0.0.201:8080/', message: '"构建成功"', notifyPeople: ''
          }

          failure {
             dingTalk accessToken: '2fb3f47786fd17fa681818d7cc63e04c6cca52a16f862f12889e5eecf66e917a', imageUrl: '', jenkinsUrl: 'http://10.0.0.201:8080/', message: '"构建失败"', notifyPeople: ''
          }
      }
    
  }

5. Jenkins分布式构建

Master / Slave模型、在Master上分配任务、然后可以在 Slave、或 Master上完成对应 的任务。  

为什么 ?
1.定期集成、集成时间较长。 多个 slave来均摊 Master的压力。
2.由于项目种类繁多、需要不同的环境。 go、nodejs、python、java、android、ios、
能够将特定的任务运行在指定的节点上。  

如何实现:
1、master与slave必须免密通讯。
2、slave节点 不需要安装Jenkins。
3、slave仅需要安装对应的环境即可 节点属性
4、slave要想真的能完全替代Master
4.1、slave要与web集群免密
4.2、slave要有执行上线的 脚本
Jenkins给节点推公钥,实现免密登录

(1)master与slave必须免密通讯

master(Jenkins)节点给slave节点推送公钥      

(2) slave节点 不需要安装Jenkins

(3)slave仅需要安装对应的环境即可 节点属性
在这里插入图片描述

主节点有什么服务配置,从节点也要有相同的配置
安装yum -y install java maven 和 sonar-scanner
在这里插入图片描述

(4)slave要想真的能完全替代Master

slave要与web集群免密

ssh-copy-id  -i  .ssh/id_rsa.pub 10.0.0.7
ssh-copy-id  -i  .ssh/id_rsa.pub 10.0.0.8  

slave要有执行上线的 脚本

在这里插入图片描述

如何只在一个节点上运行(不是pipeline的项目):
在这里插入图片描述

在pipeline脚本中的内容是:

pipeline {
    //agent any
    // 接入这个内容
    agent {lable 'slave-node1'}

6. Jenkins权限RBAC

基于 角色 的访问控制
全局权限: 控制用户能够操作jenkins哪些资源。
在这里插入图片描述
0.开启RBAC认证

1.创建角色、设定对应的权限

2.创建用户

3.将用户与角色关联

项目权限

  • 1.创建项目角色、分配权限
  • 2、将 用户关联至该项目角色即可在这里插入图片描述

7. Jenkins 发布模式

(额外了解) ( Kubernetes上可以应用的非常的完美 )

  • 蓝绿发布
  • 滚动发布
  • 金丝雀发布| 灰度发布
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值