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

相关推荐
小梁努力敲代码21 小时前
java数据结构--List的介绍
java·开发语言·数据结构
摸鱼的老谭1 天前
构建Agent该选Python还是Java ?
java·python·agent
lang201509281 天前
Spring Boot 官方文档精解:构建与依赖管理
java·spring boot·后端
夫唯不争,故无尤也1 天前
Tomcat 启动后只显示 index.jsp,没有进入你的 Servlet 逻辑
java·servlet·tomcat
zz-zjx1 天前
Tomcat核心组件全解析
java·tomcat
Deschen1 天前
设计模式-外观模式
java·设计模式·外观模式
why技术1 天前
从18w到1600w播放量,我的一点思考。
java·前端·后端
夫唯不争,故无尤也1 天前
JavaWeb流式传输速查宝典
java·流式传输
苏小瀚1 天前
算法---位运算
java·算法
Camel卡蒙1 天前
数据结构——二叉搜索树Binary Search Tree(介绍、Java实现增删查改、中序遍历等)
java·开发语言·数据结构