9.Devops实战篇之——流水线pipeline

目录

1. 认识pipeline

2. 流水线语法

3. 流水线语法生成

4. jenkins脚本语法维护

5.pipeline具体实现

5.1 pipeline拉取gitlab代码

5.2 pipeline-maven构建项目

5.3 pipeline-sonarqube代码测试

5.4 pipeline-jenkins构建镜像

5.5 pipeline-通知服务器拉取镜像并运行

5.6 jinkins发送外部通知


1. 认识pipeline

#想要快速定位出现的问题,上面的这种自定义风格的项目是很难做到的,因为日志都打印在一个面上。所以需要流水线。

#体验流水线

#可以很清晰的看到每个流程执行的时间和结果。

#我们要做的就是把我们 第1-第8 之前实现的每一个步骤,都按照流水线的形式来完成。

2. 流水线语法

#想要构建流水线,就需要先了解它的语法

//所有脚本命令都放在pipeline中
pipeline {
    //jenkins可以做集群,这里是选择哪个jenkins节点来构建任务
    agent any
    
    //声明全局变量,方便后面使用
    environment {
        key = 'value'
    }
    
    //主体。具体每个阶段的任务定义
    stages {
        stage('拉取gitlab仓库代码') {
            steps {
                echo '拉取gitlab仓库代码 - 成功'
            }
        }
    
        stage('maven构建项目') {
            steps {
                echo 'maven构建项目 - 成功'
            }
        }
   
        stage('sonarqube代码检测') {
            steps {
                echo 'sonarqube代码检测 - 成功'
            }
        }
    
        stage('jenkins制作自定义镜像并推送到harbor') {
            steps {
                echo 'jenkins制作自定义镜像并推送到harbor - 成功'
            }
        }
   
        stage('jenkins通知服务器拉取镜像并运行') {
            steps {
                echo 'jenkins通知服务器拉取镜像并运行 - 成功'
            }
        }
    }
}

#写在pipeline script中,立即构建

3. 流水线语法生成

#例如”拉取gitlab仓库代码“步骤

##

#把生成的语法放到具体的stage.steps里面即可。

4. jenkins脚本语法维护

#在jenkins端的脚本维护是比较麻烦的。这里我们选用流水线每次构建的时候,从git拉取jenkinsfile文件进行构建。

#在git仓库中追加一个名为Jenkinsfile的文件

#把流水线脚本放到里面即可。这样每次构建会先拉取这个文件,根据此文件进行构建。

#再次构建即可看到

5.pipeline具体实现

5.1 pipeline拉取gitlab代码

#这里我们还是要根据标签来拉取代码

#在我们之前生成的git拉取代码流水线语法中复制,写到到giltlab仓库的Jenkinsfile中。

#写入,注意我们使用了变量tag,来拉取对应代码。

#再次build,就会根据版本。

5.2 pipeline-maven构建项目

#构建项目无非就是执行shell命令

#生成pipeline脚本,再放到gitlab上的Jenkinsfile文件里。

sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'

#构建如果出现这样的问题

#我们也可以手动去容器内部执行mvn clean package -DskipTests命令测试构建,也会失败。

#mvn -v出来显示java的版本是17那肯定是构建不了的,因为我们的IDEA是2024的最新版本,用的是jdk22。

#所以最后是因为jenkins容器内部JAVA_HOME指定的位置不是我们安装的jdk-22版本。在容器内部改过来即可。或者在docker-compose.yml就写好这个环境变量。

export JAVA_HOME=/var/jenkins_home/jdk

#再次构建即可

jenkins@dbab3d17884d:~/workspace/pipeline$ ls target/*.jar
target/mytest1.jar

5.3 pipeline-sonarqube代码测试

#基于sonar-scanner

#生成脚本,放到Jenkinsfile中

##

#再次构建即可

5.4 pipeline-jenkins构建镜像

#推送镜像这边,如果仓库地址写固定的,后期修改会很麻烦。所以在Jenkinsfile去定义环境变量,进行调用即可。

environment {
        harborUser = 'admin'
        harborPasswd = 'Harbor12345'
        harborAddress = '192.168.64.21:80'
        harborRepo = 'repo'
    }

#生成构建和推送脚本写到Jenkinsfile

mv ./target/*.jar ./docker/
docker build -t ${JOB_NAME}:${tag} ./docker/


docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress}
docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}
docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}
docker image prune -f

#构建之后。验证一下

5.5 pipeline-通知服务器拉取镜像并运行

#publish over ssh

#先声明一下字符参数,等下引用

#生成流水线脚本,添加到Jenkinsfile

#生成脚本

sshPublisher(publishers: [sshPublisherDesc(configName: 'node1', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harborAddress $harborRepo $JOB_NAME $tag $host_port $container_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])

#改为双引号!!!

#开始构建。最后我们就完成了从自由风格转变到pipeline的配置。

#其实都是差不多的一套东西,但流水线更清晰

##

5.6 jinkins发送外部通知

#下载钉钉插件

#钉钉群添加自定义机器人,关键字:部署

#Jenkins——系统管理——钉钉配置

#有了机器人以后就就可以写pipeline脚本了,因为自动生成是出不来的。

#每个插件不同版本有不同的使用方式,详细看文档

##

post {
        success {
            dingtalk(
                robot: 'jenkins-ding',
                type: 'MARKDOWN',
                title: 'success: ${JOB_NAME}',
                text: [ "- 构建成功: ${JOB_NAME} \n- 版本号: ${tag} \n- 构建持续时间: ${currentBuild.durationString}" ]
            )
        }
        failure {
            dingtalk(
                robot: 'jenkins-ding',
                type: 'MARKDOWN',
                title: 'failure: ${JOB_NAME}',
                text: [ "- 构建成功: ${JOB_NAME} \n- 版本号: ${tag} \n- 构建持续时间: ${currentBuild.durationString}" ]
            )
        }

    }

#再次构建,如果失败显示语法错误,重启jenkins即可。

#Jenkinsfile全部内容如下

//所有脚本命令都放在pipeline中
pipeline {
    //jenkins可以做集群,这里是选择哪个jenkins节点来构建任务
    agent any
    
    //声明全局变量,方便后面使用
    environment {
        harborUser = 'admin'
        harborPasswd = 'Harbor12345'
        harborAddress = '192.168.64.21:80'
        harborRepo = 'repo'
    }
    
    //主体。具体每个阶段的任务定义
    stages {
        stage('拉取gitlab仓库代码') {
            steps {
                checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.64.20:8929/root/test2.git']])
                echo '拉取gitlab仓库代码 - 成功'
            }
        }
    
        stage('maven构建项目') {
            steps {
                sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTests'
                echo 'maven构建项目 - 成功'
            }
        }
   
        stage('sonarqube代码检测') {
            steps {
                sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.java.binaries=./target/ -Dsonar.projectKey=${JOB_NAME} -Dsonar.login=sqa_8ad59a82479f82e3b9068e7bee530fc8e01f04e5'
                echo 'sonarqube代码检测 - 成功'
            }
        }
    
        stage('jenkins制作自定义镜像并推送到harbor') {
            steps {
                sh '''mv ./target/*.jar ./docker/
docker build -t ${JOB_NAME}:${tag} ./docker/
docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress}
docker tag ${JOB_NAME}:${tag} ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}
docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:${tag}'''
                echo 'jenkins制作自定义镜像并推送到harbor - 成功'
            }
        }
   
        stage('jenkins通知服务器拉取镜像并运行') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'node1', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "deploy.sh $harborAddress $harborRepo $JOB_NAME $tag $host_port $container_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo 'jenkins通知服务器拉取镜像并运行 - 成功'
            }
        }
    }
    post {
        success {
            dingtalk(
                robot: 'jenkins-ding',
                type: 'MARKDOWN',
                title: 'success: ${JOB_NAME}',
                text: [ "- 构建成功: ${JOB_NAME} \n- 版本号: ${tag} \n- 构建持续时间: ${currentBuild.durationString}" ]
            )
        }
        failure {
            dingtalk(
                robot: 'jenkins-ding',
                type: 'MARKDOWN',
                title: 'failure: ${JOB_NAME}',
                text: [ "- 构建失败: ${JOB_NAME} \n- 版本号: ${tag} \n- 构建持续时间: ${currentBuild.durationString}" ]
            )
        }

    }
}

  • 32
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
流水线3.0打造devops落地工具链.pdf》是一篇介绍流水线3.0技术在落地DevOps工具链方面的文章。文章从DevOps流程中的不同阶段出发,介绍了如何通过流水线3.0技术来实现DevOps的自动化、持续集成、持续交付、持续部署等流程。通过采用流水线3.0技术,提供了一套完整的DevOps工具链,提高了工作效率和质量。 文章介绍了流水线3.0技术与传统的流水线技术的差异。流水线3.0技术不但可以实现代码的自动化构建和测试,还提供了云端容器化部署的服务,可以使得DevOps流程更加灵活,同时也避免了传统的繁琐的部署流程。另外,流水线3.0技术还支持多个开发环境之间的切换,使得开发人员可以轻松地在不同环境中进行开发和测试,提高了开发人员的工作效率和工作质量。 文章还介绍了如何使用流水线3.0技术来实现DevOps的自动化运维。通过结合Kubernetes等容器编排工具,可以实现DevOps流程的全自动化。文章还介绍了如何使用Jenkins、GitLab等工具来实现代码的自动化构建和测试,以及如何使用Docker等容器技术来实现持续交付和持续部署。 总的来说,《流水线3.0打造devops落地工具链.pdf》这篇文章介绍了流水线3.0技术在DevOps工具链方面的应用,通过使用流水线3.0技术,使得DevOps流程更加高效、灵活、自动化,提高了开发人员的效率和工作质量,值得开发人员和企业关注和学习。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Doublew_w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值