当前位置:   article > 正文

jenkins流水线(jenkinsfile)部署详解

jenkinsfile

安装5个插件
Pipeline: Stage View
在这里插入图片描述
Pipeline
在这里插入图片描述
git
在这里插入图片描述
ssh
在这里插入图片描述
Maven Integration
在这里插入图片描述

新建一个任务,选择流水线
在这里插入图片描述

编写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 写一个简单的字符串到控制台输出。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

保存测试一下(保存以后点立即构建)
在这里插入图片描述

我们来看一下日志
在下面我们可以看见执行了两个 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

1、从git中拉取

使用jenkins自带的脚本生成器
在这里插入图片描述
到了片段生成器
首先我们需要从git中拉取,就选git
在这里插入图片描述
填写gitlab信息
在这里插入图片描述

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

pipeline {
    agent any
    stages {
        stage('拉取代码') {
            steps {
                git branch: 'main', credentialsId: 'be664517-d218-42b3-8c49-9b333fac3796', url: 'http://172.24.3.182/root/test.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

2、maven打包

全局工具配置里面配置maven,之前教程讲了的,我就不详细讲了
在这里插入图片描述

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

pipeline {
    agent any
	// 看这里,导入maven,名字就是在全局工作配置中配置了的
    tools{
        maven 'maven_3.9.6'
    }
    stages {
        stage('拉取代码') {
            steps {
                git branch: 'main', credentialsId: 'be664517-d218-42b3-8c49-9b333fac3796', url: 'http://172.24.3.182/root/test.git'
                echo '拉取成功'
            }
        }
        
        stage('执行构建') {
            steps {
            // 看这里哈,先运行一下maven版本,看看maven是否配置好了, sh 是指 执行shell脚本
                sh "mvn --version"
            // 如果maven可以运行,那么执行以下代码,这里需要注意一下,pom.xml文件是否在你创建的任务目录下
                sh "mvn package -Dmaven.test.skip=true"
                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文件是否在lijia(这是我取的任务名,至于名字为啥不是Demo,我爱咋取咋取,管的着吗)的目录下,我这个就是在任务目录下的,所以执行sh "mvn package -Dmaven.test.skip=true"就行如果还有多一层目录才有pom.xml,那你举一反三啊,在使用sh "mvn clean package"命令打包之前执行sh "cd 目录"不就可以了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

gitlab代码拉取到jenkins目录里并编译出target目录

$ cd /var/jenkins_home/workspace/lijia
$ ls
Dockerfile  pom.xml  src  target

  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

3、docker生成镜像并运行

通过ssh在其他服务器上运行
1、使用jenkins自带的脚本生成器
在这里插入图片描述
传jar包
在这里插入图片描述

传dockerfile
在这里插入图片描述

点击生成脚本
在这里插入图片描述

把生成的脚本加入pipeline

pipeline {
    agent any
	// 看这里,导入maven,名字就是在全局工作配置中配置了的
    tools{
        maven 'maven_3.9.6'
    }
    stages {
        stage('拉取代码') {
            steps {
                git branch: 'main', credentialsId: 'be664517-d218-42b3-8c49-9b333fac3796', url: 'http://172.24.3.182/root/test.git'
                echo '拉取成功'
            }
        }
        
        stage('执行构建') {
            steps {
            // 看这里哈,先运行一下maven版本,看看maven是否配置好了, sh 是指 执行shell脚本
                sh "mvn --version"
            // 如果maven可以运行,那么执行以下代码,这里需要注意一下,pom.xml文件是否在你创建的任务目录下
                sh "mvn package -Dmaven.test.skip=true"
                echo '构建完成'
            }
        }
        
        stage('把jar包构建为docker镜像并运行') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: '172.16.3.134', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''mv /opt/lijia/maven-0.0.1-SNAPSHOT.jar /opt/lijia/`date +%F_%T`_maven-0.0.1-SNAPSHOT.jar             #备份jar包
mv /opt/lijia/testmaven-0.0.1-SNAPSHOT.jar /opt/lijia/maven-0.0.1-SNAPSHOT.jar                                 #新jar包改名                        ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/opt/lijia', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/testmaven-0.0.1-SNAPSHOT.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false), sshPublisherDesc(configName: '172.16.3.134', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''docker rm -f lijia_java                                                          #删除容器
docker rmi lijia:v1                                                                #删除镜像
cd /opt/lijia && docker build -t lijia:v1 .                             #构建新镜像
docker run --name lijia_java -d -p 80:8080  lijia:v1             #构建新容器''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/opt/lijia', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
}
  • 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

构建流水线并测试
在这里插入图片描述
在这里插入图片描述
成功
在这里插入图片描述
在这里插入图片描述

配置参数化构建过程(字符参数)通过加变量自定义版本号

在这里插入图片描述

这个代码和上面的大同小异,就是我简化了一下,加上了字符参数

$test:$tag  变量
  • 1

在这里插入图片描述

pipeline {
    agent any
	// 看这里,导入maven,名字就是在全局工作配置中配置了的
    tools{
        maven 'maven_3.9.6'
    }
    stages {
        stage('拉取代码') {
            steps {
                git branch: 'main', credentialsId: 'be664517-d218-42b3-8c49-9b333fac3796', url: 'http://172.24.3.182/root/test.git'
                echo '拉取成功'
            }
        }
        
        stage('执行构建') {
            steps {
            // 看这里哈,先运行一下maven版本,看看maven是否配置好了, sh 是指 执行shell脚本
                sh "mvn --version"
            // 如果maven可以运行,那么执行以下代码,这里需要注意一下,pom.xml文件是否在你创建的任务目录下
                sh "mvn package -Dmaven.test.skip=true"
                echo '构建完成'
            }
        }
        
        stage('把jar包构建为docker镜像并运行') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: '172.16.3.134', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''mv /opt/lijia/maven-0.0.1-SNAPSHOT.jar /opt/lijia/`date +%F_%T`_maven-0.0.1-SNAPSHOT.jar             #备份jar包
mv /opt/lijia/testmaven-0.0.1-SNAPSHOT.jar /opt/lijia/maven-0.0.1-SNAPSHOT.jar                                 #新jar包改名                        ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/opt/lijia', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/testmaven-0.0.1-SNAPSHOT.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false), sshPublisherDesc(configName: '172.16.3.134', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''docker rm -f lijia_java                                                          #删除容器
docker rmi lijia:v1                                                                #删除镜像
cd /opt/lijia && docker build -t $test:$tag .                             #构建新镜像
docker run --name lijia_java -d -p 80:8080  $test:$tag             #构建新容器''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/opt/lijia', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'Dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
            }
        }
    }
}
  • 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

构建流水线并测试

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/492220
推荐阅读
相关标签
  

闽ICP备14008679号