侧边栏壁纸
博主头像
小周的知识站 博主等级

行动起来,活在当下

  • 累计撰写 80 篇文章
  • 累计创建 12 个标签
  • 累计收到 8 条评论

目 录CONTENT

文章目录

Pipeline 流水线

Administrator
2024-06-29 / 0 评论 / 0 点赞 / 9 阅读 / 0 字

Pipeline流水线

1 Pipeline概念介绍

Jenkins Pipeline(流水线) 是帮助 Jenkins 实现 CI 到 CD 转变的重要角色。

简单来说,就是一套运行于 Jenkins 上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。

Pipeline 的实现方式是 一套 Groovy DSL(Groovy DSL语言主要是用来编写Pipeline脚本)任何发布流程都可以表述为一段 Groovy 脚本,并且 Jenkins 支持从代码库直接读取脚本,从而实现了流水线管道的理念。


2 Pipeline的几个基本概念

  • Node(节点):一个 Node 就是一个 Jenkins 节点,可以是 Master,也可以是 Slave,是 Pipeline 中具体 Step(步骤)的运行环境。

  • Stage(阶段):一个 Pipeline 由多个 Stage 组成,每个 Stage(阶段) 包含一组 Step(步骤)。注意一个 Stage(阶段) 可以跨多个 Node(节点) 执行,即 Stage(阶段) 实际上是 Step(步骤)的逻辑分组。

  • Step(步骤):是最基本的运行单元,可以是创建一个目录、执行一个代码打包、执行 一个 shell 命令、构建 Docker 镜像、将服务发布到 Kubernetes 集群中。


3 Jenkinsfile语法

Jenkinsfile是用来编写 Pipeline 的脚本(本人觉得类似于Ansible的Playbook)Jenkinsfile支持两种语法:

  • Declarative Pipeline(声明式):声明式的 Pipeline 限制用户使用严格的预选定义的结构,是一种声明式的编程模型,对比脚本式的 Pipeline 学习起来更加简单;

  • Scripted Pipeline(脚本式):脚本式的 Pipeline 限制比较少, 结构和语法的限制由 Groovy 本身决定,是一种命令式的编程模型。

所以我们学习使用声明式的方式编写 jenkinsfile。一般来说 jenkinsfile 会被放在代码库的根目录下。当然也可 以在 Web 页面定义。下面是两种不同方式的 jenkinsfile 示例

Jenkinsfile(声明式)语法:

pipeline{
    agent any   
    stages{     
        stage("get code"){    
           steps{
               echo "get code from scm"
           }
        }
        stage("package"){
            steps{
                echo "packge code"
            }
        }
        stage("deploy"){
            steps{
                echo "deploy packge to node1"
            }
        }
    }
}

pipeline { :开头声明此脚本是 Declarative(声明式)式脚本

agent any :模块一,此处填写构建所需的环境,代理,docker环境,kubernetes环境、 maven、jdk工具等等

stages:模块二,阶段记录所有步骤,代表构建项目的阶段开头

stage:阶段步骤,一个 stages 中包含多个 stage,对应 拉取代码、编译打包、部署发布等等

steps:步骤实现,具体实现该步骤的命令,如何通过编写来实现步骤


Jenkinsfile(脚本式)语法:

node {
 def mvnHome
 stage('pull code') {            //步骤一,拉取代码
  echo "pull code"
 }
 stage('Build project') {        //步骤二,构建打包
  echo "build project"
 }
 stage('publish project') {      //步骤三,部署上线
  echo "publish project"
 }
}

node:声明此脚本是Scripted Pipeline

def mvnHome:指定脚本运行所需要的各种环境、工具等

stage:指定不同的构建步骤,如拉取代码,编译打包,部署上线等,可以有多个stage

接下来我们创建一个声明式的pipeline简单熟悉一下具体功能。

4 Pipeline Job 示例

通过Web页面创建一个Pipeline(流水线)项目,点击 新建Item 后如下图:

General(一般)配置项还是勾选 Discard old builds (丢弃旧的构建):

高级项目选项可以执行pipeline的脚本,具体配置如下图:

保存后点击任务的Build Now(立即构建):

构建执行完成后,在页面的右侧以图形的形式显示 pipeline 的结构,点击对应的位 置可以查看构建执行的情况,

小结:通过上述演示可以了解到Pipeline就是将整个项目通过流水线自动化实现。

下边来看一个Pipeline(声明式)实操的例子:

进入pipeline-job任务中,通过设置→流水线进行配置,具体如下图:

① 定义 域中选择 Pipeline script from SCM(此选项指示Jenkins从源代码管理(SCM)仓库获取流水线脚本, 这里的仓库地址应该指向GitLab中你想拉取代码的仓库地址)。

② SCM(源代码管理) 域中选择Git方式拉取脚本。

③ Repository URL(仓库URL) 域中填写GitLab仓库的路径。
其他默认即可,点击保存。接下来在 GitLab 的choujiang仓库创建一个 Jenkins脚本文件。

回到GitLab的choujiang仓库点击 加号 选择 新建文件 后具体配置如下图:

粘贴下方的代码到文件中:

提示:注意代码中的仓库地址还有具体发布路径要根据自己环境修改:

pipeline{
    agent any
    stages{
        stage("get code"){
           steps{
                echo 'get code'
           }
        }
        stage("package"){
            steps{
                sh 'cd /var/lib/jenkins/workspace/pipeline-job && tar czf /opt/web-$(date +%F).tar.gz .'
            }
        }
        stage("deploy"){
            steps{
                sh 'scp /opt/web-$(date +%F).tar.gz 192.168.0.12:/usr/local/nginx/html'
                sh 'ssh 192.168.0.12 "cd /usr/local/nginx/html/&&tar xf web-$(date +%F).tar.gz"'
            }
        }
    }
}

回到Jenkins进行构建Pipeline,构建结果如下图:

0
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区