Jenkins入门教程

news2024/10/5 21:20:12

一、开始使用 Jenkins 

本导读将向您介绍使用 Jenkins、Jenkins 的主要特性和 Jenkins Pipeline 的基本知识。 本导读使用“独立”的 Jenkins 发行版,它可以在您自己本地的机器上运行。

准备工作

第一次使用 Jenkins,您需要:

  • 机器要求:

    • 256 MB 内存,建议大于 512 MB

    • 10 GB 的硬盘空间(用于 Jenkins 和 Docker 镜像)

  • 需要安装以下软件:

    • Java 8 ( JRE 或者 JDK 都可以)

    • Docker (导航到网站顶部的Get Docker链接以访问适合您平台的Docker下载)

下载并运行 Jenkins

  1. 下载 Jenkins.

  2. 打开终端进入到下载目录.

  3. 运行命令 java -jar jenkins.war --httpPort=8080.

  4. 打开浏览器进入链接 http://localhost:8080.

  5. 按照说明完成安装.

安装完成后,您可以开始使用 Jenkins!

二、创建您的第一个Pipeline 

什么是 Jenkins Pipeline?

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

持续交付 Pipeline 自动化的表达了这样一种流程:将基于版本控制管理的软件持续的交付到您的用户和消费者手中。

Jenkins Pipeline 提供了一套可扩展的工具,用于将“简单到复杂”的交付流程实现为“持续交付即代码”。Jenkins Pipeline 的定义通常被写入到一个文本文件(称为 Jenkinsfile )中,该文件可以被放入项目的源代码控制库中。 [1]]

Pipeline 和 Jenkinsfile 的更多相关信息,请参考用户手册中的相关链接 PipelinePipelinePipeline 和 使用 Jenkinsfile

快速开始使用 Pipeline:

  1. 将以下示例 复制到您的仓库中并命名为 Jenkinsfile

  2. 单击Jenkins中的 New Item 菜单 

  1. 为您的新工程起一个名字 (例如 My Pipeline) ,选择 Multibranch Pipeline

  2. 单击 Add Source 按钮,选择您想要使用的仓库类型并填写详细信息.

  3. 单击 Save 按钮,观察您的第一个Pipeline运行!

您可能需要修改 Jenkinsfile 以便应用在您自己的项目中。尝试修改 sh 命令,使其与您本地运行的命令相同。

在配置好 Pipeline 之后,Jenkins 会自动检测您仓库中创建的任何新的分支或合并请求, 并开始为它们运行 Pipelines。

快速开始示例

下面是一个简单的 Pipeline 各种语言的复制和粘贴示例。

Java

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent { docker 'maven:3.3.3' }
    stages {
        stage('build') {
            steps {
                sh 'mvn --version'
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

Node.js / JavaScript

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent { docker 'node:6.3' }
    stages {
        stage('build') {
            steps {
                sh 'npm --version'
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

Ruby

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent { docker 'ruby' }
    stages {
        stage('build') {
            steps {
                sh 'ruby --version'
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

Python

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent { docker 'python:3.5.1' }
    stages {
        stage('build') {
            steps {
                sh 'python --version'
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

PHP

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent { docker 'php' }
    stages {
        stage('build') {
            steps {
                sh 'php --version'
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

三、执行多个步骤(step) 

Pipelines 由多个步骤(step)组成,允许你构建、测试和部署应用。 Jenkins Pipeline 允许您使用一种简单的方式组合多个步骤, 以帮助您实现多种类型的自动化构建过程。

可以把“步骤(step)”看作一个执行单一动作的单一的命令。 当一个步骤运行成功时继续运行下一个步骤。 当任何一个步骤执行失败时,Pipeline 的执行结果也为失败。

当所有的步骤都执行完成并且为成功时,Pipeline 的执行结果为成功。

Linux、BSD 和 Mac OS

在 Linux、BSD 和 Mac OS(类 Unix ) 系统中的 shell 命令, 对应于 Pipeline 中的一个 sh 步骤(step)。

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'echo "Hello World"'
                sh '''
                    echo "Multiline shell steps works too"
                    ls -lah
                '''
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

Windows

基于 Windows 的系统使用 bat 步骤表示执行批处理命令。

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                bat 'set'
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

超时、重试和更多

Jenkins Pipeline 提供了很多的步骤(step),这些步骤可以相互组合嵌套,方便地解决像重复执行步骤直到成功(重试)和如果一个步骤执行花费的时间太长则退出(超时)等问题。

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                retry(3) {
                    sh './flakey-deploy.sh'
                }

                timeout(time: 3, unit: 'MINUTES') {
                    sh './health-check.sh'
                }
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

“Deploy”阶段(stage)重复执行 flakey-deploy.sh 脚本3次,然后等待 health-check.sh 脚本最长执行3分钟。 如果 health-check.sh 脚本在 3 分钟内没有完成,Pipeline 将会标记在“Deploy”阶段失败。

内嵌类型的步骤,例如 timeout 和 retry 可以包含其他的步骤,包括 timeout 和 retry 。

我们也可以组合这些步骤。例如,如果我们想要重试部署任务 5 次,但是总共花费的时间不能超过 3 分钟。

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent any
    stages {
        stage('Deploy') {
            steps {
                timeout(time: 3, unit: 'MINUTES') {
                    retry(5) {
                        sh './flakey-deploy.sh'
                    }
                }
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

完成时动作

当 Pipeline 运行完成时,你可能需要做一些清理工作或者基于 Pipeline 的运行结果执行不同的操作, 这些操作可以放在 post 部分。

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent any
    stages {
        stage('Test') {
            steps {
                sh 'echo "Fail!"; exit 1'
            }
        }
    }
    post {
        always {
            echo 'This will always run'
        }
        success {
            echo 'This will run only if successful'
        }
        failure {
            echo 'This will run only if failed'
        }
        unstable {
            echo 'This will run only if the run was marked as unstable'
        }
        changed {
            echo 'This will run only if the state of the Pipeline has changed'
            echo 'For example, if the Pipeline was previously failing but is now successful'
        }
    }
}

Toggle Scripted Pipeline (Advanced)

四、定义执行环境 

在上一节中您可能已经注意到每个示例中的 agent 指令。 agent 指令告诉Jenkins在哪里以及如何执行Pipeline或者Pipeline子集。 正如您所预料的,所有的Pipeline都需要 agent 指令。

在执行引擎中,agent 指令会引起以下操作的执行:

  • 所有在块block中的步骤steps会被Jenkins保存在一个执行队列中。 一旦一个执行器 executor 是可以利用的,这些步骤将会开始执行。

  • 一个工作空间 workspace 将会被分配, 工作空间中会包含来自远程仓库的文件和一些用于Pipeline的工作文件

在Pipeline中可以使用这几种 定义代理的方式 在本导读中,我们仅使用Docker容器的代理方式。

在Pipeline中可以很容易的运行 Docker 镜像和容器。 Pipeline可以定义命令或者应用运行需要的环境和工具, 不需要在执行代理中手动去配置各种各样的系统工具和依赖。 这种方式可以让你使用 Docker容器工具包 中的任何工具。

agent 指令更多选项和相关信息,可以查看 语法参考 。

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent {
        docker { image 'node:7-alpine' }
    }
    stages {
        stage('Test') {
            steps {
                sh 'node --version'
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

当执行Pipeline时,Jenkins将会自动运行指定的容器,并执行Pipeline中已经定义好的步骤steps:

[Pipeline] stage
[Pipeline] { (Test)
[Pipeline] sh
[guided-tour] Running shell script
+ node --version
v7.4.0
[Pipeline] }
[Pipeline] // stage
[Pipeline] }

五、使用环境变量 

环境变量可以像下面的示例设置为全局的,也可以是阶段(stage)级别的。 如你所想,阶段(stage)级别的环境变量只能在定义变量的阶段(stage)使用。

Jenkinsfile (Declarative Pipeline)

pipeline {
    agent any

    environment {
        DISABLE_AUTH = 'true'
        DB_ENGINE    = 'sqlite'
    }

    stages {
        stage('Build') {
            steps {
                sh 'printenv'
            }
        }
    }
}

Toggle Scripted Pipeline (Advanced)

这种在 Jenkinsfile 中定义环境变量的方法对于指令性的脚本定义非常有用方便, 比如 Makefile 文件,可以在 Pipeline 中配置构建或者测试的环境,然后在 Jenkins 中运行。

环境变量的另一个常见用途是设置或者覆盖构建或测试脚本中的凭证。 因为把凭证信息直接写入 Jenkinsfile 很显然是一个坏主意, Jenkins Pipeline 允许用户快速安全地访问在 Jenkinsfile 中预定义的凭证信息,并且无需知道它们的值。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从入门到实践:计算机视觉图像分类完全指南

计算机视觉图像分类是计算机视觉领域的一个重要分支,它的目标是让计算机能够识别并分类不同的图像。在本文中,我们将介绍计算机视觉图像分类的基本概念、流程和常用算法。 一、图像分类的基本概念 图像分类是指将输入的图像自动分类到预定义的一组类别中…

量子计算+真实材料模拟!美国埃姆斯国家实验室科学家获得新突破

​ 噪声量子比特ADAPT仿真(图片来源:网络) 量子计算机的潜在功能远远超出当今的经典计算机,来自美国能源部埃姆斯国家实验室的科学家们展示了一种在材料研究中利用量子计算的新方法,通过模拟材料的自适应算法&#xf…

自参考和对比学习正则化的Few-shot医学图像分割

文章目录 Few-shot Medical Image Segmentation Regularized with Self-reference and Contrastive Learning摘要本文方法Local Prototype-Based SegmentationSelf-reference RegularizationContrastive LearningSuperpixel-Based Self-supervised Learning 实验结果 Few-shot …

分布式搜索引擎2——深入elasticsearch

数据聚合 聚合的分类 聚合(aggregations)可以实现对文档数据的统计、分析、运算。聚合常见的有三类: 桶(Bucket)聚合:用来对文档做分组 TermAggregation:按照文档字段值分组Date Histogram:按照日期阶梯分组,例如一周为一组,或者一月为一组 度量&…

第10章:数据处理增删改

一、插入数据 CREATE TABLE emp1 (id int(11) ,name varchar(15) ,hire_date date ,salary double(10,2) )1.添加一条数据 ①没有指明添加的字段,一定按照顺序添加 insert into emp1 values(1,wang,2000-4-4,5900)②指明添加的字段(推荐)…

【 图像水印 2019 CVPR】 StegaStamp 论文翻译

【 图像水印 2019 CVPR】 StegaStamp 论文翻译 论文题目:StegaStamp: Invisible Hyperlinks in Physical Photographs 中文题目:物理照片中不可见的超链接 论文链接:https://arxiv.org/abs/1904.05343 论文代码:https://github.co…

QxRibbon 知:openEuler 23.03 搭建 Qt5 开发环境

文章目录 安装 openEuler 23.03 虚拟机安装 GNOME 桌面环境安装 Qt5 开发环境构建 QxRibbon参考资料 安装 openEuler 23.03 虚拟机 VMware 安装 openEuler 23.03 虚拟机 平台:x86_64 虚拟机配置:4核、4G内存、100G磁盘 ISO 镜像:https://mir…

FT2000+ qemu kvm 红旗 crash 分析 频繁设置CPU online导致进程卡死、不调度故障

测试程序 /** tcti.cpp参考&#xff1a; https://www.cnblogs.com/organic/p/17321523.htmlg -stdc11 -lpthread trigger_cgroup_timer_inactive.cpp -o inactive_timer ./inactive_timer 100000 10000 */#include <errno.h> #include <iostream> #include <pt…

Redis进阶(集群,雪崩,击穿,穿透.......)

Redis进阶 Redis事务_事务的概念与ACID特性 Redis的事物不保证原子性 数据库层面事务 在数据库层面&#xff0c;事务是指一组操作&#xff0c;这些操作要么全都被成功执行&#xff0c;要么全都不执行。 数据库事务的四大特性 A&#xff1a;Atomic&#xff0c;原子性&#xf…

Docker笔记5 | 容器的基本操作

5 | 容器的基本操作 1 启动容器1.1 启动方式1.2 新建容器并启动1.3 docker run时的运行过程1.4 启动已终止容器1.5 后台运行1.6 查看容器信息 2 终止容器3 进入容器3.1 docker attach3.2 docker exec 4 导入导出容器4.1 导出容器4.2 导入容器 5 删除容器 1 启动容器 1.1 启动方…

Linux内核主要组成部分有哪些?

Linux 内核由几大子系统构成&#xff0c;分别为进程调度、进程间通信&#xff08;IPC&#xff09; 、内存管理、虚拟 文件系统和网络接口。这几大子系统既相互独立又有非常紧密的关联。图 3-5 展示了内核的 几大子系统之间以及这些子系统和计算机系统的其他模块之间的关系。 接…

ADS-B教学实验方案

ADS-B教学系统是为了让学生学习ADS-B原理、ADS-B系统组成、ADS-B信号处理技术。可以通过ADS-B教学系统进一步研究分析ADS-B位置的精度、准确性、稳定性、实时性&#xff0c;设计基于ADS-B的空中碰撞告警系统&#xff0c;混合空域的空中交通管理系统(UTM)设计。也可以研究ADS-B报…

《花雕学AI》你不知道的AI 机器人:29个让你大开眼界的事实

AI 机器人是人工智能技术的最具代表性的应用之一&#xff0c;它们可以模仿人类的行为和思维&#xff0c;完成各种复杂的任务&#xff0c;如识别图像、语音和文字&#xff0c;进行对话、翻译和推理&#xff0c;控制机械臂、汽车和飞机等。AI 机器人的发展速度令人惊叹&#xff0…

Windows命令提示行使用指南二(批处理)

命令提示行使用指南 前言四、批处理简介五、如何编写批处理1、Hello world2、做加法3、查找文件&#xff0c;并输出到文本。4、批量重命名5、自动记录开机时间 前言 cmd 是 Windows 操作系统中的命令行界面&#xff08;CLI&#xff09;&#xff0c;也称为命令提示符&#xff0…

Linux shell编程 数组排序算法

冒泡排序 循环对比相邻的元素&#xff0c;交换较大元素到后面的位置 大循环根据列表中存在的元素数量循环n-1次&#xff0c;保证所有元素都能被排序完成 小循环从前向后遍历&#xff0c;循环一次循环范围减少一位&#xff08;由于后面的已经排列完成无需再比较&#xff09;小循…

【halcon知识】应用仿射变换

一、说明 无论什么样的变换&#xff0c;都离不开齐次变换矩阵。一般地&#xff0c;先准备一个空的齐次变换矩阵&#xff0c;这个矩阵随便填写&#xff1a;1&#xff09;填入旋转类参数就是旋转矩阵&#xff0c;2——填入仿射参数就可进行仿射变换&#xff0c;3&#xff09;填入…

Kali-linux攻击WordPress和其他应用程序

今天越来越多的企业利用SAAS&#xff08;Software as a Service&#xff09;工具应用在他们的业务中。例如&#xff0c;他们经常使用WordPress作为他们网站的内容管理系统&#xff0c;或者在局域网中使用Drupal框架。从这些应用程序中找到漏洞&#xff0c;是非常有价值的。 为…

[JAVA数据结构]堆

目录 1.堆的概念 2.堆的创建 3.堆的插入与删除 3.1堆的插入 3.2堆的删除 1.堆的概念 如果有一个关键码的集合K {k0&#xff0c;k1&#xff0c; k2&#xff0c;…&#xff0c;kn-1}&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;…

【Linux】远程桌面连接服务器报错:未启用对服务器的远程访问......

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 前述操作环境说明&#xff1a;远程报…

<数据结构>NO4.带头双向循环链表

文章目录 前言1. 头文件2. 函数实现1&#xff09;创建哨兵位节点2&#xff09;新增一个节点3&#xff09;打印链表4&#xff09;头插5&#xff09;尾插6&#xff09;头删7&#xff09;尾删8&#xff09;查找9&#xff09;pos前插入10&#xff09;删除pos处节点11&#xff09;销…