Jenkins教程——从安装到部署Docker服务(二)声明式流水线HelloWorld

前言

本文通过一个声明式流水线的HelloWorld程序做一下流水线基础入门,对常用的流水线参数进行简要说明

什么是流水线

现实中的流水线

流水线比较好理解,类比于现实生活中的生产流水线,每个流程只做一件事,通过传送带把这些流程连接在一起,一个流程完成后的结果交由后续流程继续操作。

Jenkins的流水线简单认知

Jenkins的流水线也是这样工作的,最简单的认知是它可以把若干可通用的Shell脚本像胶水一样连接起来,虽然这个比喻比较形象,但这只是流水线的冰山一角。

Jenkins流水线的两种形式

在Jenkins升级2.x版本之前,流水线只有一种脚本式流水线(Script Pipeline),当升级2.x版本后,新增了声明式流水线(Declarative Pipeline)

什么是Jenkinsfile

无论是哪种流水线,都需要为流水线定义流水线脚本,称之为Jenkinsfile ,使用Groovy语法写成

脚本式流水线

在说明声明式流水线前,有必要了解一下脚本式流水线的基本概念,这样有利于我们知道声明式流水线的好处与脚本式流水线的限制

特征

在脚本化流水线语法中, 一个或多个 node 块在整个流水线中执行核心工作。

限制

虽然这不是脚本化流水线语法的强制性要求, 但它限制了你的流水线的在node块内的只能做两件事:

  1. 需要通过在Jenkins队列中添加一个项来调度块中包含的步骤。 节点上的执行器一空闲, 该步骤就会运行。
  2. 创建一个工作区(特定为特定流水间建立的目录),其中工作可以在从源代码控制检出的文件上完成。

基本语法

Jenkinsfile (Scripted Pipeline)

node { //需要有一个或多个node节点表示一系列操作
    stage('Build') { //每个stage表示一个步骤
        // Build步骤内容
    }
    stage('Test') {
        //  Test步骤内容
    }
    stage('Deploy') {
        //  Deploy步骤内容
    }
}

声明式流水线的基本语法类似于脚本式流水线,但是其功能更加强大

声明式流水线基础

特征

声明式流水线最外层Jenkinsfile脚本节点是pipeline

与脚本式流水线不同点

声明式和脚本化的流水线从根本上是不同的。 声明式流水线的是 Jenkins 流水线更近的特性:

  • 相比脚本化的流水线语法,它提供更丰富的语法特性,
  • 是为了使编写和读取流水线代码更容易而设计的。

基础语法

Jenkinsfile (Declarative Pipeline)

pipeline { // pipeline是声明式流水线的一种特定语法,在块内定义了整个流水线的所有内容
    agent any //    agent是声明式流水线的一种特定语法,它指示 Jenkins 为整个流水线分配一个执行器 (在节点上)和工作区,等效于脚本式流水线node块
    stages { // 所有流程(状态)的外层块,仅有一个
        stage('Build') { //每个stage为一流程,与脚本式基本一致,每个stage可以定义名称
            steps {  //步骤块,内部包含具体操作
                sh 'make'  // sh操作,其引号间的文字会当成shell直接执行
            }
        }
        stage('Test'){
            steps {
                sh 'make check'
                junit 'reports/**/*.xml'  //junit使用匹配的定义测试xml进行单元测试
            }
        }
        stage('Deploy') {
            steps {
                sh 'make publish'
            }
        }
    }
}

声明式流水线HelloWorld

有了上边的基础,我们来写一个最简单的HelloWorld声明式流水线吧!

创建项目

点击左上角的新建项目(new item)

我们这里选择流水线,输入工程名称Hello Pipeline , 确定

第一次用Gimp截的图,有别的好用的截图并编辑工具请大家推荐波

这里的流水线与多分支流水线的区别我认为有两个,一个是流水线只能指定一个分支的Jenkinsfile,还可以把脚本直接写到工程中,而多分支流水线可以指定多个分支的Jenkinsfile,但是不能把脚本写在工程中;SCM插件也支持多分支流水线,而单分支流水线没有

填写描述,勾选This project is parameterized

添加参数,选择String parameter

这里我们加一个参数,一个字符串参数,这样我们在Jenkinsfile中就可以取到这个值了

添加这个参数是为了让大家先有个参数化构建的准备

往下滑动,找到流水线定义处可选直接写脚本还是走版本控制,这里直接使用脚本

脚本处输入如下内容

pipeline {
    agent any;
    environment { //环境变量
        GREETING="Hello";
    }
    stages{
        stage('打招呼') {
            steps{
                sh 'echo "$GREETING $TITLE"'
            }
        }
   }
   post { //构建完成后置操作
        aborted { //如果构建中断,则执行
            echo '构建被中止!'
        }
        success { //构建成功执行
            echo '构建成功!'
        }
       failure { //构建失败执行
           echo '构建失败!'
       }
    }
}

语法不会写怎么办?上边的图中有流水线语法(Pipeline-Syntax),通过这个语法功能就可以生成部分脚本

点保存,我们去准备构建这个工程

点击Build with Parameters

这里我们看到刚才定义的参数值是可以修改的,有兴趣可以改下试试,然后开始构建

输出如下

把鼠标放在打招呼下边的绿色框上,点出现的logs

我们可以看到输出了预期的值

查看下Post Actions的日志

我们可以通过左下角的构建版本号,如当前是#1,点进去,选择Console Output查看详细的执行日志

细心会发现构建的工作空间在我们指定的Jenkins家目录/workspace/当前工程名

声明式流水线HelloWorld工程就先写这些

后记

在家里的笔记本装的Debian用了一年了快,这次写文章截图用的Gimp??感觉好奇怪,有没有什么好用的Linux平台的截图工具推荐下啊,能直接选区截图再编辑的?

不写不知道,原来流水线里的知识点这么多,下篇打算写下基本环境的配置与拉取Git代码

引文

Jenkins官方文档创建您的第一个Pipeline

本文系Hellxz学习与实践文章,禁止布布扣、码迷、爱码网等第三方爬虫网站爬取,转载请在醒目位置注明出处:https://www.cnblogs.com/hellxz/p/jenkins_pipeline_helloworld.html

原文地址:https://www.cnblogs.com/hellxz/p/jenkins_pipeline_helloworld.html

时间: 2024-10-06 08:24:43

Jenkins教程——从安装到部署Docker服务(二)声明式流水线HelloWorld的相关文章

轻轻松松在centos上部署docker服务

首先,因为docker的运行需要linux本身某些组件和内核特性的支持,所以要确保centos的版本大于6,并且内核版本大于2.6.32-431.可以简单的升级centos6到最新版本. sudo yum upgrade 然后安装cgroup sudo yum install libcgroup service cgconfig start #启动croup服务 lssubsys -am 如果安装成功,最后一个命令lssubsys -am会显示所有子系统的挂载点 源码方式安装lxc sudo y

OSGI传统注册式服务与声明式服务

上一篇博文中我们编写了第二个简单的osgi的example,并编写了一个接口DictionaryService,并在Activator这个Bundle中实现了这个interface,并在start启动方法中进行了osgi服务的注册,但并没有使用这个服务,这一篇文章中并不讲解怎么使用这个已经注册的服务,但是会讲解服务的使用方式,一种为声明式服务,一种为传统注册式服务,以下就是开始讲解何为osgi的注册式服务与声明式服务. 传统注册式服务 传统方式下,我们注册服务都是在bundle的激活器(Acti

Gitlab+Harbor+Jenkins pipeline实现利用tag部署docker容器

环境 测试部署主机IP:192.168.1.1 Jenkins主机IP:192.168.1.2 Harbor主机IP:192.168.1.3 Gitlab主机IP:192.168.0.10 系统信息: 系统:CentOS 7.5 内核:4.18.7-1.el7.elrepo.x86_64 Docker版本:18.09 docker-compose版本:1.23.1 有道笔记原文,为了防止复制粘贴出来的代码格式有误~~~~ 所有主机的Docker安装方式 wget -O /etc/yum.repo

Docker Compose部署GitLab服务,搭建自己的代码托管平台(图文教程)

场景 Docker-Compose简介与Ubuntu Server 上安装Compose: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100902301 Docker Compose基本使用-使用Compose启动Tomcat为例: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/100904080 Docker Compose部署项目到容器-基于Tomc

jenkins实现自动化部署及服务重启-初级

jenkins实现自动化部署及服务重启-初级 一.说明 部署jenkins 主要用于web界面化的代码上传.生产服务重启.还未涉及到svn中的代码打包,后期会配合开发同事一起完成此功能.使用jenkins而不是脚本执行主要作用是为了方便版本控制.减少人为失误导致.而jenkins主要是作为可视化的一个框架使用,核心还是各类脚本的执行.而此篇内容主要是讲解如果搭建jenkins,脚本内容将在后续逐个展示,因为作者运用jenkins比较粗浅,也在不断摸索中,此篇文章也是为菜鸟朋友们准备的,希望借鉴此

Docker在Ubuntu16.04上安装和部署Apache Storm

Docker在Ubuntu16.04上安装和部署Apache Storm 1.添加Docker源 sudo apt-get update 2.增加CA证书 sudo apt-get install apt-transport-https ca-certificates 3.添加GPG Key(一种加密手段) sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897

CentOS7 部署Docker&搭建OwnCloud私人云盘服务

Docker简介: Docker 是个进程级的轻量化虚拟机,从狭义上来讲就是一个进程,从广义上来讲是一个虚拟容器,或者叫应用容器( Application Container ) Docker 中有三个核心概念:Image.Container.Repository. Image:和 Windows 的那种 ISO 镜像相比,Docker 中的镜像是分层的,可复用的,而非简单的一堆文件迭在一起(类似于一个压缩包的源码和一个 Git 仓库的区别). Container: 容器的存在离不开镜像的支持,

Prometheus+Grafana部署监控docker服务

1.环境192.168.244.128 Prometheus 监控服务器192.168.244.129 docker 服务(被监控端)注:都是centos7.5系统 2.下载安装包https://prometheus.io/download/ (需要的安装包都可以下载)wget https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.linux-amd64.tar.gz 服务端(监控se

微服务架构 - CentOS7离线部署docker

原文:微服务架构 - CentOS7离线部署docker 1.环境准备 系统环境为: CentOS Linux release 7.5.1804 (Core) 安装docker版本为: 17.12.0-ce 2.准备部署文件 在http://mirrors.163.com/centos/7/os/x86_64/Packages/中下载如下rpm安装包: audit-2.8.4-4.el7.x86_64.rpm audit-libs-2.8.4-4.el7.x86_64.rpm libselinu