26、Jenkins流水线

26、Jenkins流水线

1、Hello World

https://www.jenkins.io/zh/doc/book/pipeline/jenkinsfile/

agent指令是必需的,它指示 Jenkins 为流水线分配一个执行器和工作区。没有 agent 指令的话,声明式流水线不仅无效,它也不可能完成任何工作!默认情况下,agent 指令确保源代码仓库被检出并在后续阶段的步骤中可被使用。

一个合法的声明式流水线还需要 stages 指令和 steps 指令,因为它们指示 Jenkins 要执行什么,在哪个阶段执行。

2、新建流水线构建任务

pipeline-test

groovy 复制代码
pipeline {
    agent any

    stages {
      stage('拉取代码') {
            steps {
                echo '拉取代码..'
            }
        }
      
        stage('Maven打包') {
            steps {
                echo 'Maven打包..'
            }
        }
        stage('制作镜像') {
            steps {
                echo '制作镜像..'
            }
        }
        stage('部署') {
            steps {
                echo '部署....'
            }
        }
    }
}

3、构建一次

4、拉取代码

1、生成脚本

2、流水线

groovy 复制代码
pipeline {
    agent any

    stages {
      stage('拉取代码') {
            steps {
                echo '拉取代码..'
              checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/xiaoxueblog/xx-springboot.git']])
              sh 'ls'
            }
        }
      
        stage('Maven打包') {
            steps {
                echo 'Maven打包..'
            }
        }
        stage('制作镜像') {
            steps {
                echo '制作镜像..'
            }
        }
        stage('部署') {
            steps {
                echo '部署....'
            }
        }
    }
}

5、Maven构建

可以直接定义工具

groovy 复制代码
pipeline {
    agent any
  
  	tools { 
        maven "maven3.9.11"
    }

    stages {
      stage('拉取代码') {
            steps {
                echo '拉取代码..'
              checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/xiaoxueblog/xx-springboot.git']])
              sh 'ls'
            }
        }
      
        stage('Maven打包') {
            steps {
                echo 'Maven打包..'
                sh 'mvn clean package'
            }
        }
        stage('制作镜像') {
            steps {
                echo '制作镜像..'
            }
        }
        stage('部署') {
            steps {
                echo '部署....'
            }
        }
    }
}

6、制作镜像

groovy 复制代码
pipeline {
    agent any
  
  	tools { 
        maven "maven3.9.11"
    }

    stages {
      stage('拉取代码') {
            steps {
                echo '拉取代码..'
              checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/xiaoxueblog/xx-springboot.git']])
              sh 'ls'
            }
        }
      
        stage('Maven打包') {
            steps {
                echo 'Maven打包..'
                sh 'mvn clean package'
            }
        }
        stage('制作镜像') {
            steps {
                echo '制作镜像..'
              sh "docker build -t xx-springboot:v$BUILD_NUMBER ."
            }
        }
        stage('部署') {
            steps {
                echo '部署....'
            }
        }
    }
}

7、部署

sh 复制代码
pipeline {
    agent any
  
  	tools { 
        maven "maven3.9.11"
    }

    stages {
      stage('拉取代码') {
            steps {
                echo '拉取代码..'
              checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/xiaoxueblog/xx-springboot.git']])
              sh 'ls'
            }
        }
      
        stage('Maven打包') {
            steps {
                echo 'Maven打包..'
                sh 'mvn clean package'
            }
        }
        stage('制作镜像') {
            steps {
                echo '制作镜像..'
              sh "docker build -t xx-springboot:v$BUILD_NUMBER ."
            }
        }
        stage('部署') {
            steps {
                echo '部署....'
                
                sh "docker run -d -p 8001:8001 --name=xx-springboot xx-springboot:v$BUILD_NUMBER"
            }
        }
    }
}

8、部署优化 - 停止服务

groovy 复制代码
pipeline {
    agent any
  
  	tools { 
        maven "maven3.9.11"
    }

    stages {
      stage('拉取代码') {
            steps {
                echo '拉取代码..'
              checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: 'gitee', url: 'https://gitee.com/xiaoxueblog/xx-springboot.git']])
              sh 'ls'
            }
        }
      
        stage('Maven打包') {
            steps {
                echo 'Maven打包..'
                sh 'mvn clean package'
            }
        }
        stage('制作镜像') {
            steps {
                echo '制作镜像..'
              sh "docker build -t xx-springboot:v$BUILD_NUMBER ."
            }
        }
      
        stage('停止服务') {
            steps {
            sh "chmod 777 stop_container.sh && bash stop_container.sh xx-springboot $BUILD_NUMBER"
            }
        }
      
        stage('部署') {
            steps {
                echo '部署....'
                
                sh "docker run -d -p 8001:8001 --name=xx-springboot xx-springboot:v$BUILD_NUMBER"
            }
        }
    }
}

中间可以加上传镜像仓库

9、最终部署示例图

相关推荐
渡我白衣40 分钟前
并查集:基础认识与模拟实现
android·java·javascript·数据结构·c++·算法·并查集
电商API_1800790524744 分钟前
电商商品价格监控工具淘宝京东商品价格抓取API项目实操分享
java·大数据·开发语言·前端·数据挖掘
zzzll11111 小时前
深度剖析:HashMap 并发死循环与 ConcurrentHashMap 两代演进全解
java·开发语言
秋名RG1 小时前
2026/5/27 生产事故复盘与整改方案
java
血小板要健康2 小时前
链表 阶段算法总结
java·数据结构·笔记·算法·leetcode·链表
坐吃山猪2 小时前
【多线程】CompletableFuture使用
java·开发语言·多线程
m0_587383002 小时前
点餐预约核销系统的架构脉络
java·架构·系统架构·需求分析
代码方舟2 小时前
O2O二手车交易平台B端车商管理后台:基于天远车信盟出险构建自动化车况评估网关
java·运维·人工智能·自动化
爱学堂IT分享2 小时前
图灵Java互联网架构师六期
java·开发语言
坐吃山猪2 小时前
【多线程】Semaphore使用
java·数据库·oracle·多线程