Docker中部署Jenkins+Pipline流水线基础语法入门

场景

DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射):

DockerCompose中部署Jenkins(Docker Desktop在windows上数据卷映射)-CSDN博客

DockerCompose+Jenkins+Pipeline流水线打包SpringBoot项目(解压安装配置JDK、Maven等)入门:

DockerCompose+Jenkins+Pipeline流水线打包Vue项目(解压安装配置Node)入门-CSDN博客

DockerCompose+Jenkins+Pipeline流水线打包Vue项目(解压安装配置Node)入门:

DockerCompose+Jenkins+Pipeline流水线打包Vue项目(解压安装配置Node)入门-CSDN博客

上面在对前后端项目进行打包时分别用到了Jenkinsfile流水线项目,下面对jenkins的Pipeline流水线的

语法进行简单入门介绍。

注:

博客:
霸道流氓气质-CSDN博客

实现

1、简介

流水线语法官方文档教程

Pipeline Syntax

流水线语法

Jenkins Pipeline(或简称为 "Pipeline")是一套插件,将持续交付的实现和实施集成到 Jenkins 中。

持续交付 Pipeline 自动化的表达了这样一种流程:

将基于版本控制管理的软件持续的交付到您的用户和消费者手中。

Jenkins Pipeline 提供了一套可扩展的工具,用于将“简单到复杂”的交付流程实现为“持续交付即代码”。

Jenkins Pipeline 的定义通常被写入到一个文本文件(称为 Jenkinsfile )中,该文件可以被放入项目的源代码控制库中。

2、环境搭建

参考上面博客搭建jenkins,然后安装pipeline插件

如果需要看到流水线Pipeline执行的可视化界面,可以安装Pipeline:StageView插件。

2、新建流水线项目

安装完插件就可新建任务时选择流水线项目

上面博客中定义流水线时使用的是Pipeline script from SCM的方式,即使用git管理Jenkinsfile文件。

下面直接在jenkins页面上定义流水线的配置文件

定义选择Pipeline script ,然后会提供有Hello World的模板。

根据Hello World模板,修改其内容为

pipeline {
    agent any

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

然后点击立即构建

注意脚本保存或修改后保存执行时需要申请执行同意

系统管理-In-process Script Approval

点击进去,点击Approve同意方可执行。

3、Pipeline常用脚本语法

node/agent(节点)

节点是一个机器,可以是Jenkins的master节点也可以是slave节点。

通过node指定当前job运行的机器(这个是脚本式语法)

stage(阶段)

stage定义了在整个流水线的执行任务的概念性的不同的阶段。

step(步骤)

step是每个阶段中要执行的每个步骤。

比如上面

pipeline {
    agent any

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

post

post 部分定义一个或多个steps ,这些阶段根据流水线或阶段的完成情况而 运行(取决于流水线中 post 部分的位置).

post 支持以下 post-condition 块中的其中之一:

always, changed, failure, success, unstable, 和 aborted。

这些条件块允许在 post 部分的步骤的执行取决于流水线或阶段的完成状态。

always

无论构建结果如何都会去执行
 
changed

流水线或阶段的完成状态与它之前的运行不同时执行
 
failure

流水线失败后执行
 
success

流水线成功后执行
 
unstable

流水线构建不稳定时执行, 通常由于测试失败,代码违规等造成。
 
aborted

流水线取消后执行

示例:

pipeline {
    agent any

    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码'
            }
        }
  stage('编译构建') {
            steps {
                echo '编译构建'
            }
        }
  stage('项目部署') {
            steps {
                echo '项目部署'
            }
        }
    }
 post {
        always {
            echo '构建结束,结果:'
        }
  success {
            echo '构建成功'
        }
  failure {
            echo '构建失败'
        } 
    }
}

环境变量environment

定义流水线环境变量,可以定义在全局变量或者步骤中的局部变量。

这取决于 environment 指令在流水线内的位置。

该指令支持一个特殊的助手方法 credentials() ,该方法可用于在Jenkins环境中通过标识符访问预定义的凭证。

对于类型为 "Secret Text"的凭证, credentials() 将确保指定的环境变量包含秘密文本内容。

对于类型为 "SStandard username and password"的凭证, 指定的环境变量指定为 username:password ,

并且两个额外的环境变量将被自动定义 :分别为 MYVARNAME_USR 和 MYVARNAME_PSW

系统管理-凭证-系统-全局凭证,新建Username wirh password环境变量,变量名为badao

则可以这样使用

pipeline {
    agent any
 environment {
  SERVICE_CREDS = credentials('badao')
 }
    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码'
    sh 'echo "Service user is ${SERVICE_CREDS_USR}"'
    sh 'echo "Service password  is ${SERVICE_CREDS_PSW}"'
            }
        }
  stage('编译构建') {
            environment {             
              VERSION = "1.1.20"
            }
            steps {
    sh 'echo "版本号:${VERSION}"'
                echo '编译构建'
            }
        }
  stage('项目部署') {
            steps {
                echo '项目部署'
            }
        }
    }
 post {
        always {
            echo '构建结束,结果:'
        }
  success {
            echo '构建成功'
        }
  failure {
            echo '构建失败'
        } 
    }
}

options运行选项

options 指令允许从流水线内部配置特定于流水线的选项。

 流水线提供了许多这样的选项, 比如 buildDiscarder,但也可以由插件提供, 比如 timestamps

可用选项

buildDiscarder

为最近的流水线运行的特定数量保存组件和控制台输出。例如: options { buildDiscarder(logRotator(numToKeepStr: '1')) }
 
disableConcurrentBuilds

不允许同时执行流水线。 可被用来防止同时访问共享资源等。 例如: options { disableConcurrentBuilds() }
 
overrideIndexTriggers

允许覆盖分支索引触发器的默认处理。 如果分支索引触发器在多分支或组织标签中禁用,

options { overrideIndexTriggers(true) } 将只允许它们用于促工作。

否则, options { overrideIndexTriggers(false) } 只会禁用改作业的分支索引触发器。
 
skipDefaultCheckout

在`agent` 指令中,跳过从源代码控制中检出代码的默认情况。例如: options { skipDefaultCheckout() }
 
skipStagesAfterUnstable

一旦构建状态变得UNSTABLE,跳过该阶段。例如: options { skipStagesAfterUnstable() }
 
checkoutToSubdirectory

在工作空间的子目录中自动地执行源代码控制检出。例如: options { checkoutToSubdirectory('foo') }
 
timeout

设置流水线运行的超时时间, 在此之后,Jenkins将中止流水线。例如: options { timeout(time: 1, unit: 'HOURS') }
 
retry

在失败时, 重新尝试整个流水线的指定次数。 For example: options { retry(3) }
 
timestamps

预谋所有由流水线生成的控制台输出,与该流水线发出的时间一致。 例如: options { timestamps() } 

示例:

pipeline {
    agent any
 environment {
  SERVICE_CREDS = credentials('badao')
 }
 options {
        buildDiscarder(logRotator(numToKeepStr: '1'))
        disableConcurrentBuilds()
        skipDefaultCheckout()
        timeout(time: 1, unit: 'HOURS')
        retry(3)
        timestamps()
    }
    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码'
    sh 'echo "Service user is ${SERVICE_CREDS_USR}"'
    sh 'echo "Service password  is ${SERVICE_CREDS_PSW}"'
            }
        }
  stage('编译构建') {
            environment {             
              VERSION = "1.1.20"
            }
            steps {
    sh 'echo "版本号:${VERSION}"'
                echo '编译构建'
            }
        }
  stage('项目部署') {
            steps {
                echo '项目部署'
            }
        }
    }
 post {
        always {
            echo '构建结束,结果:'
        }
  success {
            echo '构建成功'
        }
  failure {
            echo '构建失败'
        } 
    }
}

parameters参数

parameters 指令提供了一个用户在触发流水线时应该提供的参数列表。

这些用户指定参数的值可通过 params 对象提供给流水线步骤。

可用options

string

字符串类型的参数,例如:parameters { string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '') }
 
text

一个文本参数,可以包含多行,例如:parameters { text(name: 'DEPLOY_TEXT', defaultValue: 'One\nTwo\nThree\n', description: '') }
 
booleanParam

布尔参数,例如:parameters { booleanParam(name: 'DEBUG_BUILD', defaultValue: true, description: '') }
 
choice

一个选择参数,例如:parameters { choice(name: 'CHOICES', choices: ['one', 'two', 'three'], description: '') }
 
password

密码参数,例如:parameters { password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'A secret password') }

示例:

pipeline {
    agent any
 environment {
  SERVICE_CREDS = credentials('badao')
 }
 options {
        buildDiscarder(logRotator(numToKeepStr: '1'))
        disableConcurrentBuilds()
        skipDefaultCheckout()
        timeout(time: 1, unit: 'HOURS')
        retry(3)
        timestamps()
    }
 parameters {
        string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
        text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')
        booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')
        choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
        password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')
    }
    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码'
    sh 'echo "Service user is ${SERVICE_CREDS_USR}"'
    sh 'echo "Service password  is ${SERVICE_CREDS_PSW}"'
            }
        }
  stage('编译构建') {
            environment {             
              VERSION = "1.1.20"
            }
            steps {
    sh 'echo "版本号:${VERSION}"'
                echo '编译构建'
            }
        }
  stage('项目部署') {
            steps {
                echo '项目部署'
    echo "Hello ${params.PERSON}"
                echo "Biography: ${params.BIOGRAPHY}"
                echo "Toggle: ${params.TOGGLE}"
                echo "Choice: ${params.CHOICE}"
                echo "Password: ${params.PASSWORD}"
            }
        }
    }
 post {
        always {
            echo '构建结束,结果:'
        }
  success {
            echo '构建成功'
        }
  failure {
            echo '构建失败'
        } 
    }
}

triggers触发器

triggers 指令定义了流水线被重新触发的自动化方法。

对于集成了源( 比如 GitHub 或 BitBucket)的流水线, 可能不需要 triggers ,因为基于 web 的集成很肯能已经存在。

 当前可用的触发器是 cron, pollSCM 和 upstream。

cron

接收 cron 样式的字符串来定义要重新触发流水线的常规间隔 ,比如: triggers { cron('H */4 * * 1-5') }
 
pollSCM

接收 cron 样式的字符串来定义一个固定的间隔,在这个间隔中,Jenkins 会检查新的源代码更新。

如果存在更改, 流水线就会被重新触发。例如: triggers { pollSCM('H */4 * * 1-5') }
 
upstream

接受逗号分隔的工作字符串和阈值。 当字符串中的任何作业以最小阈值结束时,流水线被重新触发。

例如: triggers { upstream(upstreamProjects: 'job1,job2', threshold: hudson.model.Result.SUCCESS) }

示例:

pipeline {
    agent any
    triggers {
        cron('H */4 * * 1-5')
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

tools构建工具

构建工具maven、ant、gradle,获取通过自动安装或手动放置工具的环境变量。

工具的名称必须在系统设置->全局工具配置中定义。

示例:

pipeline {
    agent any
 
 tools {
        maven 'maven'
        jdk   'jdk'
    }
 
 environment {
  SERVICE_CREDS = credentials('badao')
 }
 options {
        buildDiscarder(logRotator(numToKeepStr: '1'))
        disableConcurrentBuilds()
        skipDefaultCheckout()
        timeout(time: 1, unit: 'HOURS')
        retry(3)
        timestamps()
    }
 parameters {
        string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
        text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')
        booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')
        choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
        password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')
    }
    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码'
    sh 'echo "Service user is ${SERVICE_CREDS_USR}"'
    sh 'echo "Service password  is ${SERVICE_CREDS_PSW}"'
            }
        }
  stage('编译构建') {
            environment {             
              VERSION = "1.1.20"
            }
            steps {
    sh 'echo "版本号:${VERSION}"'
                echo '编译构建'
    echo 'mvnversion:'
    sh 'mvn --version'
    echo 'javaversion:'
    sh 'java --version'
            }
        }
  stage('项目部署') {
            steps {
                echo '项目部署'
    echo "Hello ${params.PERSON}"
                echo "Biography: ${params.BIOGRAPHY}"
                echo "Toggle: ${params.TOGGLE}"
                echo "Choice: ${params.CHOICE}"
                echo "Password: ${params.PASSWORD}"
            }
        }
    }
 post {
        always {
            echo '构建结束,结果:'
        }
  success {
            echo '构建成功'
        }
  failure {
            echo '构建失败'
        } 
    }
}

input交互输入

input用户在执行各个阶段的时候,由人工确认是否继续进行。

message呈现给用户的提示信息。

id可选,默认为stage名称。

ok默认表单上的ok文本。

submitter可选的,以逗号分隔的用户列表或允许提交的外部组名。默认允许任何用户submitterParameter环境变量的可选名称。

如果存在,用submitter名称设置。

parameters提示提交者提供的一个可选的参数列表。

示例:

pipeline {
    agent any
 
 tools {
        maven 'maven'
        jdk   'jdk'
    }
 
 environment {
  SERVICE_CREDS = credentials('badao')
 }
 options {
        buildDiscarder(logRotator(numToKeepStr: '1'))
        disableConcurrentBuilds()
        skipDefaultCheckout()
        timeout(time: 1, unit: 'HOURS')
        retry(3)
        timestamps()
    }
 parameters {
        string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
        text(name: 'BIOGRAPHY', defaultValue: '', description: 'Enter some information about the person')
        booleanParam(name: 'TOGGLE', defaultValue: true, description: 'Toggle this value')
        choice(name: 'CHOICE', choices: ['One', 'Two', 'Three'], description: 'Pick something')
        password(name: 'PASSWORD', defaultValue: 'SECRET', description: 'Enter a password')
    }
    stages {
        stage('拉取代码') {
            steps {
                echo '拉取代码'
    sh 'echo "Service user is ${SERVICE_CREDS_USR}"'
    sh 'echo "Service password  is ${SERVICE_CREDS_PSW}"'
            }
        }
  stage('Example') {
   input {
    message "请选择"
    ok "确定"
    submitter "badao"
    parameters {
     choice(choices: ['1', '2', '3'], name: 'diff')
    }
   }
   steps {
    echo "Hello, ${PERSON}, nice to meet you."
   }
  }
  stage('编译构建') {
            environment {             
              VERSION = "1.1.20"
            }
            steps {
    sh 'echo "版本号:${VERSION}"'
                echo '编译构建'
    echo 'mvnversion:'
    sh 'mvn --version'
    echo 'javaversion:'
    sh 'java --version'
            }
        }
  stage('项目部署') {
            steps {
                echo '项目部署'
    echo "Hello ${params.PERSON}"
                echo "Biography: ${params.BIOGRAPHY}"
                echo "Toggle: ${params.TOGGLE}"
                echo "Choice: ${params.CHOICE}"
                echo "Password: ${params.PASSWORD}"
            }
        }
    }
 post {
        always {
            echo '构建结束,结果:'
        }
  success {
            echo '构建成功'
        }
  failure {
            echo '构建失败'
        } 
    }
}

运行测试

如果安装了Stage View 可视化插件

其它常见语法以及命令参考官方文档说明

创建您的第一个Pipeline

4、Pipeline脚本语法生成器

点击新建的流水线项目-流水线语法

Declarative Directive Generator中会有语法生成器,比如上面的生成options选项

比如上面的input脚本的生成

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/709948.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AlmaLinux 8.10 x86_64 OVF (sysin) - VMware 虚拟机模板

AlmaLinux 8.10 x86_64 OVF (sysin) - VMware 虚拟机模板 AlmaLinux release 8.10 请访问原文链接:https://sysin.org/blog/almalinux-8-ovf/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023.03.08 更新&…

EasyExcel:如何快速生成一个只含有表头的模板Excel

🍁 作者:知识浅谈,CSDN签约讲师,CSDN博客专家,华为云云享专家,阿里云专家博主 📌 擅长领域:全栈工程师、爬虫、ACM算法,大数据,深度学习 💒 公众号…

PAT B1016. 部分A+B

题目描述 正整数A的“D(为1位整数)部分”定义为由A中所有DA组成的新整数Px。例如:给定A3862767,DA6,则A的“6部分”PA是66,因为A中有2个6。 现给定A、D、B、DB,请编写程序计算PAPB。 输入格式 在一行中依次输入A、DA、B、DB,中间以空格分隔,…

秋招突击——6/14——复习{(树形DP)树的最长路径}——新作{非递归求二叉树的深度、重复区间合并}

文章目录 引言复习树形DP——树的最长路径 新作使用dfs非递归计算二叉树的深度多个区间合并删除问题实现思路实现代码参考思路 总结 引言 这两天可能有点波动,但是算法题还是尽量保证复习和新作一块弄,数量上可能有所差别。 复习 树形DP——树的最长路…

弹幕逆向signature、a_bogus

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许可禁止转载&a…

qmt量化交易策略小白学习笔记第32期【qmt编程之获取行业概念数据--如何获取迅投行业成分股数据】

qmt编程之获取迅投行业成分股数据 qmt更加详细的教程方法,会持续慢慢梳理。 也可找寻博主的历史文章,搜索关键词查看解决方案 ! 感谢关注,咨询免费开通量化回测与获取实盘权限,欢迎和博主联系! 获取迅投…

LeetCode | 387.字符串中的第一个唯一字符

这道题可以用字典解决,只需要2次遍历字符串,第一次遍历字符串,记录每个字符出现的次数,第二次返回第一个出现次数为1的字符的下标,若找不到则返回-1 class Solution(object):def firstUniqChar(self, s):""…

[大模型]Qwen2-7B-Instruct 接入 LangChain 搭建知识库助手

环境准备 在 autodl 平台中租赁一个 3090 等 24G 显存的显卡机器,如下图所示镜像选择 PyTorch–>2.1.0–>3.10(ubuntu20.04)–>12.1 接下来打开刚刚租用服务器的 JupyterLab,并且打开其中的终端开始环境配置、模型下载和运行 demo。 pip 换源…

2024 年最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)

OpenAi 环境安装 首先确保您的计算机上已经安装了 Python。您可以从 Python 官方网站下载并安装最新版本 Python。安装时,请确保勾选 “Add Python to PATH” (添加环境变量)选项,以便在 cmd 命令行中直接使用 Python。 安装 Op…

window上搭建open DHCP server踩坑记录

参考类似的安装说明 window10上搭建open DHCP server_opendhcpserver-CSDN博客 到安装目录里面 OpenDHCPServer.ini 这个是配置文件。 http://127.0.0.1:6789/ 是访问地址,这个地址只是显示结果,不能配置。 需要注意的是:必须要有一个静…

DockerHub无法访问,国内镜像拉取迂回解决方案

无法访问后,主要存在以下几个问题: 无法进行镜像的搜索无法查看镜像相关的使用说明无法直接拉取镜像 对于第二点,目前没啥解决思路,主要针对第一点和第三点。 解决无法搜索镜像 目前仅可以解决部分问题,在知道镜像名…

读AI新生:破解人机共存密码笔记01以史为鉴

1. 科学突破是很难预测的 1.1. 20世纪初,也许没有哪位核物理学家比质子的发现者、“分裂原子的人”欧内斯特卢瑟福[Ernest Rutherford]更为杰出 1.1.1. 卢瑟福早就意识到原子核储存了巨大的能量,然而,主流观点认为开…

Redis和Docker

Redis 和 Docker 是两种不同的技术,它们各自解决不同的问题,但有时会一起使用以提供更高效和灵活的解决方案。 Redis 是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息代理。它设计为解决MySQL等关系型数据库在处理大量读写访问…

针对k8s集群已经加入集群的服务器进行驱逐

例如k8s 已经有很多服务器,现在由于服务器资源过剩,需要剥离一些服务器出来 查找节点名称: kubectl get nodes设置为不可调度: kubectl cordon k8s-node13恢复可调度 kubectl uncordon k8s-node13在驱逐之前先把需要剥离驱逐的节…

[Java基本语法] 数组及其应用

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀线程与…

AI绘画入门教程(非常详细)从零基础入门到精通Midjourney提示词,咒语

Microorganisms infiltrating through brain-machine interfaces --v 6.0 Microorganisms infiltrating through brain-machine interfaces ,redpupil --v 6.0 Microorganisms infiltrating through brain-machine interfaces,billion girls dream --v 6.0 --niji 6 “动漫风”…

【Redis】String的常用命令及图解String使用场景

本文将详细介绍 Redis String 类型的常见命令及其使用场景,包括缓存、计数器、共享会话、手机验证码、分布式锁等场景,并且配图和伪代码进一步方便理解和使用。 命令执行效果时间复杂度set key value [key value…]设置key的值是valueO(k),k是键个数get…

论文中引用网页链接的简单操作

一、参考资料 中文论文或者申请书中网页新闻引用格式 自制网页:在论文中快速引用网页链接 二、相关介绍 1. 常用文献类型用单字母标识 学术论文参考文献中文献类型字母标识 常用文献类型用单字母标识,具体如下: (1&#xf…

react 0至1 案例

/*** 导航 Tab 的渲染和操作** 1. 渲染导航 Tab 和高亮* 2. 评论列表排序* 最热 > 喜欢数量降序* 最新 > 创建时间降序* 1.点击记录当前type* 2.通过记录type和当前list中的type 匹配*/ import ./App.scss import avatar from ./images/bozai.png import {useState} …

【YOLOv8改进[注意力]】在YOLOv8中添加GAM注意力 + 含全部代码和详细修改方式 + 手撕结构图

本文将进行在YOLOv8中添加GAM注意力的实践,助力YOLOv8目标检测效果的实践,文中含全部代码、详细修改方式以及手撕结构图。助您轻松理解改进的方法,实现有效涨点。 改进前和改进后的参数对比: 目录 一 GAM 二 在YOLOv8中添加GAM注意力 1 整体修改 2 配置文件