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

相关推荐
断剑zou天涯21 小时前
【算法笔记】窗口内最大值或最小值的更新结构
java·笔记·算法
m***66731 天前
SQL 实战—递归 SQL:层级结构查询与处理树形数据
java·数据库·sql
小安同学iter1 天前
三台服务器,一套流水线:如何实现无缝自动化部署?
gitlab·jenkins
鲸沉梦落1 天前
Java中的Stream
java
yihuiComeOn1 天前
[源码系列:手写Spring] AOP第二节:JDK动态代理 - 当AOP遇见动态代理的浪漫邂逅
java·后端·spring
Porunarufu1 天前
Java·关于List
java·开发语言
靠沿1 天前
Java数据结构初阶——Collection、List的介绍与ArrayList
java·数据结构·list
程序猿小蒜1 天前
基于springboot的的学生干部管理系统开发与设计
java·前端·spring boot·后端·spring
q***56381 天前
Spring容器初始化扩展点:ApplicationContextInitializer
java·后端·spring
q***51891 天前
SpringCloud系列教程:微服务的未来(十四)网关登录校验、自定义过滤器GlobalFilter、GatawayFilter
java·spring cloud·微服务