2.1 开始编写Jenkinsfile

本文深入解析Jenkins流水线的概念与应用,介绍流水线作为代码(pipeline as code)的实践方式,强调其代码化、耐用性、可暂停性和解决复杂发布流程的能力。通过示例展示Jenkinsfile的编写,包括agent、options、stages和post等关键部分的配置与作用。

您好,还在疑惑什么是流水线吗? 本章我们将告诉您如何运行一条流水线 赶快学习吧! 😀

 

为什么使用pipeline?

本质上,jenkins是一个自动化引擎,它支持许多自动模式。流水线向Jenkins添加了一组强大的工具,支持用例、简单的持续集成到全面的持续交付流水线。 通过对一系列的发布任务建立标准的模板,用户可以利用更多流水线的特性,比如:

  • 代码化: 流水线是在代码中实现的,通常会存放到源代码控制,使团队具有编辑、审查和更新他们项目的交付流水线的能力。

  • 耐用性:流水线可以从Jenkins的master节点重启后继续运行。

  • 可暂停的:流水线可以由人功输入或批准继续执行流水线。

  • 解决复杂发布: 支持复杂的交付流程。例如循环、并行执行。

  • 可扩展性: 支持扩展DSL和其他插件集成。

构建一个可扩展是Jenkins的核心价值,流水线可以通过ShareLibrary的方式来扩展。

pipeline定义

关于Jenkins流水线的运行我们可以抽象一下,例如:可以把流水线(pipeline)想象成13号线地铁,把流水线的阶段(stage)想象成地铁的每一个站点,把流水线脚本(jenkinsfile)想象成地铁线路图。这就是流水线的多样性,每条线路都有不同的站点。


现在地铁(Jenkins)已经有了,我们需要设计地铁的运行线路图(Jenkinsfile),在线路图中指定要经过的站点(stages)。这下你是否已经知道我们要运行一条流水线,需要先做什么呢? –编写jenkinsfile

Pipeline

  • Jenkins的Pipeline通过Jenkinsfile进行描述(类似于Dockerfile)
  • Jenkinsfile是Jenkins的特性(pipeline as code)
  • Pipeline是Jenkins的核心功能,提供一组可扩展的工具。
  • 通过Pipeline 的DSL语法可以完成从简单到复杂的交付流水线实现。

Jenkinsfile

  • Jenkinsfile使用两种语法进行编写,分别是声明式和脚本式。
  • 声明式和脚本式的流水线从根本上是不同的。
  • 声明式是jenkins流水线更友好的特性。
  • 脚本式的流水线语法,提供更丰富的语法特性。
  • 声明式流水线使编写和读取流水线代码更容易设计。

pipeline演示

来我们一起看下这里的配置,看下Jenkinsfile的组成及每个部分的功能含义。

  • 使用agent{},指定node节点/workspace(定义好此流水线在某节点运行)
  • 指定options{}运行选项(定义好此流水线运行时的一些选项,例如输出日志的时间)
  • 指定stages{}(stages包含多个stage,stage包含steps。是流水线的每个步骤)
  • 指定post{}(定义好此流水线运行成功或者失败后,根据状态做一些任务)

    pipeline{
    //指定运行此流水线的节点
    agent { node { label "build"}}
        
    
    //流水线的阶段
    stages{
    
        //阶段1 获取代码
        stage("CheckOut"){
            steps{
                script{
                    println("获取代码")
                }
            }
        }
        stage("Build"){
            steps{
                script{
                    println("运行构建")
                }
            }
        }
    }
    post {
        always{
            script{
                println("流水线结束后,经常做的事情")
            }
        }
            
        success{
            script{
                println("流水线成功后,要做的事情")
            }
            
        }
        failure{
            script{
                println("流水线失败后,要做的事情")
            }
        }
            
        aborted{
            script{
                println("流水线取消后,要做的事情")
            }
            
        }
    }
    }
    

验证流水线效果

查看Jenkins构建日志(正确效果)

images

通过BlueOcean查看(如果没有BlueOcean图标,需要自行在插件中心安装插件)images

到此一个简单的Jenkinfile完成了! 后面我们来详细分析每个步骤的作用。

 扫码关注,获取课程:

### Jenkins 和 GitLab 自动化部署教程 Jenkins 和 GitLab 的自动化部署流程可以通过配置插件和编写脚本来实现。以下是详细的说明,涵盖从环境准备到具体步骤的完整过程。 #### 1. 环境准备 在开始之前,确保安装了以下工具并完成基础配置: - **Java**:Jenkins 需要 Java 环境支持。例如,可以将 Java 安装在 `/opt/module/jdk1.8.0_271`[^2]。 - **Maven**:用于构建 Spring Boot 项目。Maven 可以安装在 `/opt/module/apache-maven-3.6.3`。 - **Git**:版本控制工具,路径为 `/usr/bin/git`。 - **Docker**:如果使用 Docker 部署 Jenkins 或 GitLab,需要安装 Docker 并启动服务[^3]。 #### 2. 启动 Jenkins 和 GitLab ##### 2.1 使用 Docker 启动 GitLab 通过 Docker 部署 GitLab 是一种常见的方法。运行以下命令启动 GitLab: ```bash sudo docker run --detach --hostname <your-hostname> \ --publish 9443:443 --publish 9980:80 --publish 9922:22 \ --name gitlab --restart always \ --volume /home/srv/gitlab/config:/etc/gitlab \ --volume /home/srv/gitlab/logs:/var/log/gitlab \ --volume /home/srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce ``` 此命令会将 GitLab 的数据存储在主机的指定目录中,并绑定端口[^3]。 ##### 2.2 使用 Docker 启动 Jenkins 同样可以通过 Docker 部署 Jenkins。运行以下命令: ```bash docker run -p 8090:8080 -p 50000:5000 --name jenkins \ -u root --restart=always \ -v /mydata/jenkins_home:/var/jenkins_home \ -d jenkins/jenkins:lts ``` 访问 `http://<your-host>:8090` 登录 Jenkins,首次登录时需要输入管理员密码[^4]。 #### 3. Jenkins 插件配置 为了实现与 GitLab 的集成,需要安装以下插件: - **Git Plugin**:用于连接 GitLab 仓库。 - **Pipeline Plugin**:用于定义 CI/CD 流程。 - **Publish Over SSH Plugin**:用于将构建结果推送到远程服务器。 - **Qy Wechat Notification Plugin**(可选):用于企业微信通知[^1]。 安装插件后,在 Jenkins 的全局工具配置中设置 Maven 和 JDK 的路径。 #### 4. 创建 Jenkins Pipeline ##### 4.1 配置源码管理 在 Jenkins 中创建一个新的 Pipeline 任务,选择 GitLab 作为源码管理工具。填写 GitLab 仓库地址和分支信息。 ##### 4.2 编写 Jenkinsfile 在项目的根目录下创建一个 `Jenkinsfile` 文件,定义 CI/CD 流程。以下是一个简单的示例: ```groovy pipeline { agent any stages { stage('Checkout') { steps { git branch: 'main', url: 'http://gitlab.example.com/user/repo.git' } } stage('Build') { steps { sh 'mvn clean package -DskipTests' } } stage('Deploy') { steps { sshPublisher( publishers: [ sshPublisherDesc( configName: 'remote-server', transfers: [ sshTransfer( sourceFiles: '**/target/*.jar', removePrefix: 'target/', remoteDirectory: '/app/deploy' ) ], usePromotionTimestamp: false, verbose: true ) ] ) } } } } ``` 此脚本定义了代码拉取、构建和部署三个阶段。部署阶段使用 `sshPublisher` 将生成的 JAR 包推送到远程服务器[^1]。 #### 5. 并行部署与容器化部署 如果需要并行部署多个服务器,可以在 Pipeline 中使用 `parallel` 关键字。例如: ```groovy stage('Parallel Deploy') { steps { script { parallel server1: { sshPublisher(publishers: [sshPublisherDesc(configName: 'server1')]) }, server2: { sshPublisher(publishers: [sshPublisherDesc(configName: 'server2')]) } } } } ``` 对于基于 Docker 或 Kubernetes 的部署,可以将构建后的镜像推送到 Harbor 或其他镜像仓库,并通过远程 Shell 脚本或 Kubernetes API 完成部署[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huainian

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值