• jenkins流水线(jenkinsfile)详解,保姆式教程


    jenkins流水线(jenkinsfile)详解

    在学习本篇文章的时候,可以去看看jenkins官网的文档,jenkins官网支持中文,观看十分便捷

    此教程使用的是gitee+docker+jenkins的部署方式,gitlab与github异曲同工,还有就是我目前写jenkins的教程已经更新了两期,关于插件啥的安装都不多详细的讲解了,但用到的旧知识点我也会简单讲解一下,新的知识点我也都会讲到,只是需要pipeline代码的小伙伴,直接拉到教程的最后

    jenkins使用docker安装保姆级教程(面向小白教程,最新最全,全图文)2022-8-1,不会docker也没关系

    使用jenkins+gitee创建docker镜像并运行

    在这里插入图片描述

    新建一个任务,选择流水线

    在这里插入图片描述

    可以看见啊,比起自由风格的软件项目,这个项目是非常的简单

    webhook钩子(使用git工具时执行相应步骤,比如说拉取,推送,会触发钩子函数,jenkins接收到钩子然后开始执行打包部署等工作,这里不配置也是可以的,如果是新手,可以看看我之前的教程,从基础学起)

    我在之前的教程中已经详细的讲解了,这里都不多加赘述了

    在这里插入图片描述

    配置一个密码

    在这里插入图片描述

    在gitee中连接

    写pipeline

    在这里插入图片描述

    然后我从最基础的讲起

    首先选择wello world,不是说只能选这个,就是我需要一步一步讲所以选个最原始的

    在这里插入图片描述

    讲解一下这个hello world

    pipeline {
        agent any  	
    
        stages {
            stage('Hello') {
                steps {
                    echo 'Hello World'
                }
            }
            // 这里的hello2 是我加的,就是说明,这是stages下的第二个任务 ,就是在pipeline中加单行注释 用 // 就行
            stage('Hello2') {
                steps {
                    echo 'Hello World'
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    pipeline 定义一个流水线脚本

    agent 指示 Jenkins 为整个流水线分配一个执行器(在 Jenkins 环境中的任何可用代理/节点上)和工作区。

    stages 全部的工作都在这里执行

    stage 每个工作开始

    steps jenkinsfile 声明式脚本往这里面写

    echo 写一个简单的字符串到控制台输出。

    保存测试一下(保存以后点立即构建)

    在这里插入图片描述

    我们来看一下日志,以后我都不放图片了,这里只是给新来的朋友说明一下在哪看日志

    在这里插入图片描述

    在下面我们可以看见执行了两个 hello world ,这就是我们执行脚本得到的结果

    在这里插入图片描述

    返回项目点击配置

    在这里插入图片描述

    开始使用pipeline

    首先我们要了解一下,我们的项目要经历几个步骤,1、从git中拉取;2、maven打包;3、docker生成镜像并运行,好了,我们了解到普通的项目只需要这几个步骤,我们就来规划一下pipeline代码部分

    pipeline {
        agent any
        stages {
            stage('拉取代码') {
                steps {
                    echo '拉取成功'
                }
            }
            stage('执行构建') {
                steps {
                    echo '构建完成'
                }
            }
            stage('把jar包构建为docker镜像并运行') {
                steps {
                    echo '运行成功'
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    连接到git

    使用jenkins自带的脚本生成器

    在这里插入图片描述

    到了片段生成器

    首先我们需要从git中拉取,就选git

    在这里插入图片描述

    连接git

    在这里插入图片描述

    复制粘贴(自己去测试一下有用没有,如果你不是用的docker镜像,并且报错,原因:1、压根没连接上,去看看你账号密码和git链接到底连的通不;2、没用docker安装jenkins,缺少了git环境,使用yum -y install git安装;3、我也想不出来了,自己去搜搜)

    pipeline {
        agent any
        stages {
            stage('拉取代码') {
                steps {
                    git credentialsId: '93f024b8-6456-4c98-a131-9a5ee9f42027', url: 'https://gitee.com/i-dont-recognize-you/school-page.git'
                    echo '拉取成功'
                }
            }
            
            stage('执行构建') {
                steps {
                    echo '构建完成'
                }
            }
            
            stage('把jar包构建为docker镜像并运行') {
                steps {
                    echo '运行成功'
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    连接maven

    全局工具配置里面配置maven,之前教程讲了的,我就不详细讲了

    在这里插入图片描述

    maven需要引用使用tools就行,注意不要直接cope运行,看看代码中的注解,而且git是我的,你也跑不通

    pipeline {
        agent any
    	// 看这里,导入maven,名字就是在全局工作配置中配置了的
        tools{
            maven 'maven_3.8.4'
        }
        stages {
            stage('拉取代码') {
                steps {
                    git credentialsId: '93f024b8-6456-4c98-a131-9a5ee9f42027', url: 'https://gitee.com/i-dont-recognize-you/school-page.git'
                    echo '拉取成功'
                }
            }
            
            stage('执行构建') {
                steps {
                // 看这里哈,先运行一下maven版本,看看maven是否配置好了, sh 是指 执行shell脚本
                    sh "mvn --version"
                // 如果maven可以运行,那么执行以下代码,这里需要注意一下,pom.xml文件是否在你创建的任务目录下
                //  sh "mvn clean package"
                    echo '构建完成'
                }
            }
            
            stage('把jar包构建为docker镜像并运行') {
                steps {
                    echo '运行成功'
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    如果打印了maven的版本信息,但打包报错看看是否pom.xml文件是否在test2(这是我取的任务名,至于名字为啥不是Demo,我爱咋取咋取,管的着吗)的目录下,我这个就是在任务目录下的,所以方向执行sh "mvn clean package"就行如果还有多一层目录才有pom.xml,那你举一反三啊,在使用sh "mvn clean package"命令打包之前执行sh "cd 目录"不就可以了

    [root@instance-3806mxkl ~]# cd /data/jenkins_home/workspace/test2
    [root@instance-3806mxkl test2]# ls
    Dockerfile  LICENSE  pom.xml  src  target
    
    • 1
    • 2
    • 3

    使用docker本地打包(完整代码),这里没什么讲事,就是执行了上个教程的shell脚本,之前的教程中我有关于这个shell脚本完整的讲解

    pipeline {
        agent any
    
        tools{
            maven 'maven_3.8.4'
        }
        stages {
            stage('拉取代码') {
                steps {
                    git credentialsId: '93f024b8-6456-4c98-a131-9a5ee9f42027', url: 'https://gitee.com/i-dont-recognize-you/school-page.git'
                    echo '拉取成功'
                }
            }
            
            stage('执行构建') {
                steps {
                //    sh "mvn --version"
                    sh "mvn clean package"
                    echo '构建完成'
                }
            }
            
            stage('把jar包构建为docker镜像并运行') {
                steps {
                    sh '''#!/bin/bash
                            # 服务名称
                            SERVER_NAME=test2
                            
                            # 源jar名称,mvn打包之后,target目录下的jar包名称
                            JAR_NAME= "School-0.0.1-SNAPSHOT"
                            
                            # jenkins下的目录
                            JENKINS_HOME= "/var/jenkins_home/workspace/test2"
                            
                            # 等待三秒
                            echo sleep 3s
                            sleep 1
                            echo sleep 2s
                            sleep 1
                            echo sleep 1s
                            sleep 1
                                  
                            echo "结束进程完成"
                            
                            # JENKINS_HOME
                            cd /var/jenkins_home/workspace/test2/target
                            
                            # JENKINS_HOME
                            cp /var/jenkins_home/workspace/test2/Dockerfile /var/jenkins_home/workspace/test2/target
                            
                            # 修改文件权限  JAR_NAME
                            chmod 755 School-0.0.1-SNAPSHOT.jar
                            
                            echo "看看docker能不能用"
                            docker -v
                            
                            echo "停止容器"
                            # 停止容器
                            docker stop test2
                            
                            echo "删除容器"
                            # 删除容器
                            docker rm test2
                            echo "删除镜像"
                            # 删除镜像
                            docker rmi test2
                            echo "打包镜像"
                            # 打包镜像
                            docker build -t test2 -f Dockerfile .
                            echo "运行镜像"
                            # 运行镜像
                            docker run -d -p 9999:9600 --name test2 test2
                    '''
                    echo '运行成功'
                }
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79

    通过ssh在其他服务器上打包(这里因为小编只需要在本机中运行使用小编没有测试,但流程就是这么个流程)

    下载Publish over SSH插件,在体统配置中配置ssh连接,拉到最下面

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    点击保存

    在代码生成器上选择这个

    在这里插入图片描述

    传jar包

    在这里插入图片描述

    传dockerfile

    在这里插入图片描述

    传Dockerfile文件,并执行shell脚本

    在这里插入图片描述

    点击生成脚本,放在之前打包那就行,比如

    pipeline {
        agent any
    
        tools{
            maven 'maven_3.8.4'
        }
        stages {
            stage('拉取代码') {
                steps {
                    git credentialsId: '93f024b8-6456-4c98-a131-9a5ee9f42027', url: 'https://gitee.com/i-dont-recognize-you/school-page.git'
                    echo '拉取成功'
                }
            }
            
            stage('执行构建') {
                steps {
                //    sh "mvn --version"
                    sh "mvn clean package"
                    echo '构建完成'
                }
            }
            
            stage('把jar包构建为docker镜像并运行') {
                steps {
                	sshPublisher(publishers: [sshPublisherDesc(configName: 'test', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '**/*.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''docker stop test2
    docker rm test2
    docker rmi test2
    docker build -t test2 -f Dockerfile .
    docker run -d -p 9999:9600 --name test2 test2''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'test2/Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                    echo '运行成功'
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    下载Blue Ocean插件,会得到这样的图标

    在这里插入图片描述

    点击这个图标后会得到一个崭新的UI页面,以后的流水线工作就可以在这里面操作

    在这里插入图片描述

    完整代码(我可能以后要翻着看,所以放在最后)

    pipeline {
        agent any
    
        tools{
            maven 'maven_3.8.4'
        }
        stages {
            stage('拉取代码') {
                steps {
                    git credentialsId: '93f024b8-6456-4c98-a131-9a5ee9f42027', url: 'https://gitee.com/i-dont-recognize-you/school-page.git'
                    echo '拉取成功'
                }
            }
            
            stage('执行构建') {
                steps {
                //    sh "mvn --version"
                    sh "mvn clean package"
                    echo '构建完成'
                }
            }
            
            stage('把jar包构建为docker镜像并运行') {
                steps {
                    sh '''#!/bin/bash
                            # 服务名称
                            SERVER_NAME=test2
                            
                            # 源jar名称,mvn打包之后,target目录下的jar包名称
                            JAR_NAME= "School-0.0.1-SNAPSHOT"
                            
                            # jenkins下的目录
                            JENKINS_HOME= "/var/jenkins_home/workspace/test2"
                            
                            # 等待三秒
                            echo sleep 3s
                            sleep 1
                            echo sleep 2s
                            sleep 1
                            echo sleep 1s
                            sleep 1
                                  
                            echo "结束进程完成"
                            
                            # JENKINS_HOME
                            cd /var/jenkins_home/workspace/test2/target
                            
                            # JENKINS_HOME
                            cp /var/jenkins_home/workspace/test2/Dockerfile /var/jenkins_home/workspace/test2/target
                            
                            # 修改文件权限  JAR_NAME
                            chmod 755 School-0.0.1-SNAPSHOT.jar
                            
                            echo "看看docker能不能用"
                            docker -v
                            
                            echo "停止容器"
                            # 停止容器
                            docker stop test2
                            
                            echo "删除容器"
                            # 删除容器
                            docker rm test2
                            echo "删除镜像"
                            # 删除镜像
                            docker rmi test2
                            echo "打包镜像"
                            # 打包镜像
                            docker build -t test2 -f Dockerfile .
                            echo "运行镜像"
                            # 运行镜像
                            docker run -d -p 9999:9600 --name test2 test2
                    '''
                    echo '运行成功'
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78

    8月12日新增 通过 Pipline script from SCM 执行 Jenkinsfile

    配置参数化构建过程(字符参数)

    在这里插入图片描述

    效果是这样(这样打包镜像的时候可以根据版本号和项目名做变动)

    在这里插入图片描述

    流水线这里像这样

    在这里插入图片描述

    在项目中添加Jenkinsfile文件

    在这里插入图片描述
    这个代码和上面的大同小异,就是我简化了一下,加上了字符参数

    pipeline {
        agent any
    
        tools{
            maven 'maven_3.8.4'
        }
        stages {
            stage('拉取代码') {
                steps {
                  git credentialsId: '93f024b8-6456-4c98-a131-9a5ee9f42027', url: 'https://gitee.com/i-dont-recognize-you/school-page.git'
                    echo '拉取成功'
                }
            }
            
            stage('执行构建') {
                steps {
                //    sh "mvn --version"
                  sh "mvn clean package"
                    echo '构建完成'
                }
            }
            
            stage('把jar包构建为docker镜像并运行') {
                steps {
                    sh '''#!/bin/bash
                            
                            # 源jar名称,mvn打包之后,target目录下的jar包名称
                            JAR_NAME=School*
                            
                            # jenkins下的目录
                            JENKINS_HOME=/var/jenkins_home/workspace/test2
                            
                            
                            cd $JENKINS_HOME/target
                            
                            cp $JENKINS_HOME/Dockerfile $JENKINS_HOME/target
                            
                            # 修改文件权限  JAR_NAME
                            chmod 755 $JAR_NAME.jar
                            
                            
                            echo "停止容器"
                            docker stop $test2
                            
                            echo "删除容器"
                            docker rm $test2
                            
                            echo "删除镜像"
                            docker rmi $test2
                            
                            echo "打包镜像"
                            docker build -t $test2:$tag .
                            
                            echo "运行镜像"
                            docker run -d -p 9999:9600 --name $test2 $test2:$tag
                    '''
                    echo '运行成功'
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    之前的教程

    CICD与DevOps

    jenkins使用docker安装保姆级教程(面向小白教程,最新最全,全图文)2022-8-1,不会docker也没关系

    使用jenkins+gitee创建docker镜像并运行

    我的学习途径

    27-使用pipeline自动打包Docker镜像_哔哩哔哩_bilibili

    DevOps最新教程2022版 目前最好的DevOps课程

    jenkins中文文档

  • 相关阅读:
    (成功最详细版本,自定义传参失败,跳转出现空白页面,校验文件失败)微信小程序扫码跳转小程序指定页面保姆级教程
    【1. 操作系统—概述】
    wifi c++源代码解析之一:速率调整minstrel HT之一
    SpringCloud微服务实践之七 网关(Gateway)
    【前后端交互与HTTP协议】(HTTP协议、本地存储、Ajax&Fetch 与跨域请求)
    大数据docker部署
    ES6中新增加的Proxy对象及其使用方式
    自然语言处理(NLP)—— 信息提取与文档分类
    【k8s】(一) 使用kubeadm快速部署一个K8s集群
    新版TCGA不同癌种数据合并
  • 原文地址:https://blog.csdn.net/qq_57581439/article/details/126281020