Jenkins集群下的pipeline实战

简介: 在Jenkins集群环境中创建pipeline任务,体验Jenkins集群下的并行任务,并通过标签将任务调度到指定节点执行

欢迎访问我的GitHub

这里分类和汇总了欣宸的全部原创(含配套源码): https://github.com/zq2599/blog_demos

关于Jenkins集群

  • 《快速搭建Jenkins集群》一文中,我们借助docker快速搭建了Jenkins集群,今天就在这个集群环境中创建pipeline任务,体验Jenkins集群下的并行任务;

环境信息

  • 整个集群环境一共有三台电脑,信息如下:
主机名 IP地址 作用
master 192.168.133.131 Jenkins集群的master节点,提供web服务
agent1 192.168.133.132 Jenkins集群的一号工作接节点,标签是maven
agent2 192.168.133.133 Jenkins集群的二号工作接节点,标签是gradle

实战内容

  • 本次实战要体验Jenkins集群同时执行两个任务,都是编译构建GitHub上的热门开源项目:
  • 在agent1上编译和构建spring-cloud-alibaba,再通过scp命令将构建结果传输到master电脑的/usr/local/build_result目录下;
  • 在agent2编译和构建spring-framework,再通过scp命令将构建结果传输到master电脑的/usr/local/build_result目录下;

准备工作

  • 要做以下准备工作才能顺利执行后续的任务:
  • 在master电脑上创建文件夹/usr/local/build_result
  • 配置maven,在Jenkins网页上选择Global Tool Configuration,如下图红框所示:

在这里插入图片描述

  • 新增一个maven配置,名为mvn-3.6.2,然后点击“保存”按钮,如下图:

在这里插入图片描述

  • agent1和agent2上用scp命令传输文件到master上的时候,第一次ssh要在控制台输入"yes",为了避免执行任务的时候出现这个等待输入的操作,我们去手动执行一遍,后面就再也不用了,ssh登录agent1之后,执行以下命令进入容器:
docker exec -it agent /bin/bash
  • 执行命令ssh root@192.168.133.131,这时候控制台提示输入yes或者no,请您输入yes,再根据提示输入master的密码,此时登录master成功:
[root@agent1 16]# docker exec -it agent /bin/bash
root@82eb8cfec0a6:/# ssh root@192.168.133.131
The authenticity of host '192.168.133.131 (192.168.133.131)' can't be established.
ECDSA key fingerprint is SHA256:DPE2nldWHiOhC4DB9doy7jPWNZVup6XFZ+sR2i1gqz8.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.133.131' (ECDSA) to the list of known hosts.
root@192.168.133.131's password:
Last login: Sat Nov 16 19:59:42 2019 from 192.168.133.132
  • 此时您是在agent1的容器中ssh登录了master,所以要连续输入两次exit命令才能返回到agent1的控制台;
  • 在agent2电脑上也执行相同的操作;
  • 至此,准备完毕,可以创建任务了;

编译构建spring-cloud-alibaba的任务

  • spring-cloud-alibaba是个maven工程,要用maven来编译构建:
  • 在Jenkins网页上,点击下图红框位置,创建一个任务:

在这里插入图片描述

  • 如下图,创建名为spring-clolud-alibaba的pipeline任务:

在这里插入图片描述

  • 下图红框位置就是输入pipeline脚本的地方:

在这里插入图片描述

  • 在上图红框位置输入以下内容:
pipeline {
    agent {
        label 'maven'
    }
    tools {
        maven 'mvn-3.6.2'
    }
    stages {
        stage('Checkout') {
            steps {
                echo '从GitHub下载spring-cloud-alibaba工程的源码(2.1.1.RELEASE归档包)'
                sh 'wget https://github.com/alibaba/spring-cloud-alibaba/archive/v2.1.1.RELEASE.tar.gz'
                echo '下载结束,解压归档包'
                sh 'tar -zxf v2.1.1.RELEASE.tar.gz'
            }
        }        
        stage('Build') {
            steps {
                echo '开始编译构建'
                sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean package -U -DskipTests'
            }
        }
        stage('Save') {
            steps {
                echo '将构建结果传送到存储服务器'
                sh 'cd spring-cloud-alibaba-2.1.1.RELEASE/spring-cloud-alibaba-nacos-discovery/target && sshpass -p 888888 scp ./*.jar root@192.168.133.131:/usr/local/build_result'
                echo '传送完毕'
            }
        }
        stage('Clean') {
            steps {
                echo '清理Maven工程'
                sh 'cd spring-cloud-alibaba-2.1.1.RELEASE && mvn clean'
                echo '清理完毕'
            }
        }
    }
}
  • 点击底部的"保存"按钮后,点击下图红框中的"立即构建"即可开始任务:

在这里插入图片描述

  • 点击下图红框中的红色圆球,即可跳转到实时输出任务信息的页面:

在这里插入图片描述

  • 页面实时输出构建信息:

在这里插入图片描述

  • 主页面可以看到是agent1在执行任务,如下图红框所示,可见pipeline脚本中的标签已经生效了,将任务调度到标签为maven的节点去执行:

在这里插入图片描述

  • 编译构建spring-cloud-alibaba工程是个费时的操作,我们现在去创建另一个任务:编译构建spring-framework

编译构建spring-framework的任务

  • spring-framework是个gradle工程,不需要准备gradle环境,在执行编译命令时会自动下载gradle工具:
  • 创建名为spring-framework的pipeline任务:
  • pipeline脚本如下:
pipeline {
    agent {
        label 'gradle'
    }

    stages {
        stage('Checkout') {
            steps {
                echo '从GitHub下载spring-framework工程的源码(master分支)'
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/spring-projects/spring-framework.git']]])
            }
        }        
        stage('Build') {
            steps {
                echo '开始编译构建'
                sh './gradlew build'
            }
        }
        stage('传送构建结果') {
            steps {
                echo '将构建结果传送到存储服务器'
                sh 'cd spring-core/build/libs && sshpass -p 888888 scp ./*.jar root@192.168.133.131:/usr/local/build_result && cd ../../..'
                echo '传送完毕'
            }
        }
        stage('Clean') {
            steps {
                echo '清理gradle工程'
                sh './gradlew clean'
                echo '清理完毕'
            }
        }
    }
}
  • 立即执行此任务,可见任务已经被调度到agent2上去执行了,此时的agent1和agent2正在同时执行任务,如下图:

在这里插入图片描述

查看构建结果

  • 上述两个任务在构建成功后,都会通过scp命令将构建结果传送到master的/usr/local/build_result目录下:
[root@master build_result]# ls
agent.jar                      spring-cloud-alibaba-nacos-discovery-2.1.1.RELEASE.jar          spring-cloud-alibaba-nacos-discovery-2.1.1.RELEASE-sources.jar  spring-objenesis-repack-3.1.jar
spring-cglib-repack-3.3.0.jar  spring-cloud-alibaba-nacos-discovery-2.1.1.RELEASE-javadoc.jar  spring-core-5.2.2.BUILD-SNAPSHOT.jar
  • 至此,Jenkins集群下的pipeline实战就完成了,借助pipeline的标签参数,可以控制任务的调度节点,实现多任务同时在多节点执行;

欢迎关注阿里云开发者社区博客:程序员欣宸

学习路上,你不孤单,欣宸原创一路相伴...
相关文章
|
15天前
|
jenkins Java 持续交付
Gitee+Jenkins+SonarQube代码上线的实战操作
通过以上步骤,就可以实现基于Gitee、Jenkins和SonarQube的代码上线流程,确保代码的质量和上线过程的自动化和可控性。在实际操作中,可以根据项目的具体需求和环境进行适当的调整和优化。
|
30天前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
3月前
|
Kubernetes jenkins 持续交付
在K8S中,Jenkins如何集成K8S集群?
在K8S中,Jenkins如何集成K8S集群?
|
3月前
|
Java jenkins 持续交付
Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包
Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包
142 0
Jenkins Pipeline 流水线 - 拉代码(SVN) + Maven 编译打包
|
3月前
|
jenkins Java 持续交付
【一键搞定!】Jenkins 自动发布 Java 代码的神奇之旅 —— 从零到英雄的持续集成/部署实战秘籍!
【8月更文挑战第9天】随着软件开发自动化的发展,持续集成(CI)与持续部署(CD)已成为现代流程的核心。Jenkins 作为一款灵活且功能丰富的开源 CI/CD 工具,在业界应用广泛。以一家电商公司的 Java 后端服务为例,通过搭建 Jenkins 自动化发布流程,包括创建 Jenkins 项目、配置 Git 仓库、设置构建触发器以及编写构建脚本等步骤,可以实现代码的快速可靠部署。
146 2
|
3月前
|
前端开发 jenkins 持续交付
jenkins学习笔记之二十:docker in docker运行pipeline
jenkins学习笔记之二十:docker in docker运行pipeline
|
3月前
|
jenkins 持续交付 网络安全
Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
Jenkins Pipeline SSH Publisher 环境变量、参数引用 要用双引号
117 0
|
3月前
|
jenkins 持续交付 Windows
Jenkins Pipeline 多分支流水线 Input length = 1
Jenkins Pipeline 多分支流水线 Input length = 1
35 0
|
3月前
|
jenkins 持续交付
Jenkins Pipeline 流水线 - Parameters 参数化构建
Jenkins Pipeline 流水线 - Parameters 参数化构建
120 0
|
3月前
|
jenkins 持续交付 网络安全
Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
Jenkins Pipeline 流水线 - 完整构建 Pipeline Script 脚本
69 0
下一篇
无影云桌面