jenkins流水线(jenkinsfile)详解

在这里插入图片描述

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

在这里插入图片描述

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

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'
            }
        }
    }
}
pipelineagent stagesstagestepsecho

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

在这里插入图片描述

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

在这里插入图片描述

在下面我们可以看见执行了两个 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 '运行成功'
            }
        }
    }
}

连接到git

使用jenkins自带的脚本生成器

在这里插入图片描述

到了片段生成器

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

在这里插入图片描述

连接git

在这里插入图片描述

yum -y install git
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 '运行成功'
            }
        }
    }
}

连接maven

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

在这里插入图片描述

tools
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 '运行成功'
            }
        }
    }
}

sh "mvn clean package"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

使用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 '运行成功'
            }
        }
    }
}

通过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 '运行成功'
            }
        }
    }
}
下载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 '运行成功'
            }
        }
    }
}
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 '运行成功'
            }
        }
    }
}

之前的教程

我的学习途径