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、最终部署示例图

相关推荐
deeper_wind3 小时前
Jenkins主机中安装ansible部署lnmp论坛(小白的”升级打怪“成长之路)
linux·ansible·jenkins
SH11HF3 小时前
Jenkins调用ansible部署lnmp平台
运维·ansible·jenkins
小薛博客3 小时前
23、Jenkins容器化部署Vue应用
运维·vue.js·jenkins
zzu123zsw3 小时前
第14章 Jenkins故障排除
jenkins
CHEN5_023 小时前
【CouponHub项目开发】EasyExcel解析Excel并使用线程池异步执行和延时队列兜底
java·数据库·excel
Metaphor6923 小时前
Java 如何在 Excel 中添加超链接?使用 Spire.XLS for Java 轻松实现
java·经验分享·excel
David爱编程3 小时前
锁升级机制全解析:偏向锁、轻量级锁、重量级锁的秘密
java·后端
技术小泽4 小时前
深度解析Netty架构工作原理
java·后端·性能优化·架构·系统架构
神云瑟瑟4 小时前
Spring Boot大文件分块上传(代码篇)
java·spring boot·大文件上传·分块上传