创建jenkins Pipeline流水线

Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy

Pipeline 支持两种语法:Declarative(声明式)和 Scripted Pipeline(脚本式)语法

Pipeline 也有两种创建方法:可以直接在 Jenkins 的 Web UI 界面中输入脚本;也可以通过创建一
个 Jenkinsfile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制(SCM)
中直接载入 Jenkinsfile Pipeline 这种方法)。

1.安装Pipeline插件

在“插件管理”中的选择“可选插件”输入“Pipeline”,点击安装。

image-20220209094450213

安装插件后,创建项目多了“流水线”类型

image-20220209094539397

Pipeline快速开始

1.Declarative声明式-Pipeline

创建项目

image-20220209094821362

流水线->选择HelloWorld模板

生成内容如下:

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

**stages:**代表整个流水线的所有执行阶段,通常stages只有1个,里面包含多个stage。

**stage:**代表流水线中的某个阶段,可能出现n个,一般分为拉取代码,编译构建,部署等阶段。

**steps:**代表一个阶段内需要执行的逻辑,steps里面是shell脚本,git拉取代码,ssh远程发布等人以内容。

编写一个简单声明式Pipeline:

pipeline {
    agent any

    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码'
            }
        }
        stage('编译构建') {
            steps {
                echo '编译构建'
            }
        }
        stage('项目部署') {
            steps {
                echo '项目部署'
            }
        }
    }
}

点击“保存”,“应用”,点击构建,可以看到整个构建过程

image-20220209095729498

2.Scripted Pipeline脚本式-Pipeline

创建项目

image-20220209095944243

选择“Scripted Pipeline ”

image-20220209100023039

node {
    def mvnHome
    stage('Preparation') { // for display purposes
       
    }
    stage('Build') {
       
    }
    stage('Results') {
       
    }
}

**Node:**节点,一个Node就是一个jenkins节点,Master或者Agent,是执行step的具体运行环境,后续讲到jenkins的Master-Slave架构的时候用到。

**stage:**阶段,一个Pipeline可以换份为若干个stage,每个stage代表一组操作,比如:Build,Test,Deploy,Stage是一个逻辑分组的概念。

**Step:**步骤,Step是最基本的操作单元,可以是打印一句话,也可以是构建一个Docker镜像,由各类jenkins插件提供,比如命令:sh ’make‘,就相当于我们平时shell终端中执行make命令一样。

编写一个简单的脚本式Pipeline

node {
    def mvnHome
    stage('拉取代码') { // for display purposes
       echo '拉取代码'
    }
    stage('编译构建') {
       echo '编译构建'
    }
    stage('项目部署') {
       echo '项目部署'
    }
}

点击保存应用,点击立即构建。

image-20220209101016245

3.使用流水线代码生成器

使用Declarative声明式-Pipeline演示

点击流水线语法

image-20220209101505003

点击片段生成器

image-20220209101737100

输入仓库URL,和凭证,选择指定分支后,点击生成流水线语法

image-20220209101928937

将生成的流水线脚本放到拉取代码中

image-20220209102142820

选择片段生成器,选择sh:shell Script脚本,输入“mvn clean package”构建命令,点击生成流水线脚本。

image-20220209102423621

将生成的编译脚本放到编译构建步骤中

image-20220209102608042

再根据此步骤,生成一个运行jar包的脚本

image-20220209151606981

pipeline {
    agent any

    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码'
                checkout([$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '9cc8889a-154c-4f46-8547-456070c985ad', url: 'http://101.35.161.133:8010/dev-group/web_demo.git']]])
            }
        }
        stage('编译构建') {
            steps {
                echo '编译构建'
                sh 'mvn clean package'
            }
        }
        stage('项目部署') {
            steps {
    
                echo '项目部署'
          
                sh 'JENKINS_NODE_COOKIE=dontKillMe nohup java -jar ./target/*.jar --server.port=8080 -> d.log 2>&1 &'
                echo '部署成功'
            }
        }
    }
}

**注意:**有时需要将某个命令放到后台执行,然后并行或者异步执行其他命令,但在jenkins上很容易遇到无法真正将命令放到后台运行的问题,原因是Pipeline在推出node的时候,会默认清理自己发出的每个shell命令,即使使用了nohub,可以在命令执行的时候加上“JENKINS_NODE_COOKIE=dontKillMe”将不会清除命令。

点击“保存应用”,点击立即构建。

image-20220209152605852

去服务器查看进程是否存在。

image-20220209152641626

可以看到进程存在。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐