Jenkins持续集成 - 管道详解

CI/CD—Jenkins配置Poll SCM触发自动构建 在实际的开发环境中选择分支时最好是选择主分支,因为每个版本都需要合并代码,如果配置成主分支以外的分支可能会频繁的触发自动构建的条件,对系统资源造成浪费,同时也会导致测试环境的不稳定。勾选后会出现一个文本框,用于输入轮询的时间规则。登录 Jenkins 控制台,在项目列表中找到要配置的项目,点击项目名称进入项目主页。输入完轮询时间规则后,向下滚动页面,点击 “保存” 按钮,保存项目配置。在项目主页的左侧菜单中,点击 “配置” 选项,进入项目配置页面。在项目配置页面中,向下滚动找到 “构建触发器” 部分。 阅读详情

前面一篇介绍了Jenkins的入门安装和简单演示,这篇讲解最核心的Pipeline部分。

Jenkins Pipeline 就是一系列的插件集合,可通过组合它们来实现持续集成和交付的功能。 通过Pipeline DSL为我们提供了一个可扩展的工具集,将简单到复杂的逻辑通过代码实现。

通常,我们可以通过编写Jenkinsfile将管道代码化,并且纳入到版本管理系统中。比如:

// Declarative //
pipeline {
    agent any ①

    stages {
        stage('Build') { ②
            steps { ③
                sh 'make' ④
            }
        }
        stage('Test'){
            steps {
                sh 'make check'
                junit 'reports/**/*.xml' ⑤
            }
        }
        stage('Deploy') {
            steps {
                sh 'make publish'
            }
        }
    }
}

// Script //
node {
    stage('Build') {
        sh 'make'
    }
    stage('Test') {
        sh 'make check'
        junit 'reports/**/*.xml'
    }
    stage('Deploy') {
        sh 'make publish'
    }
}
  • ① agent 指示Jenkins分配一个执行器和工作空间来执行下面的Pipeline
  • ② stage 表示这个Pipeline的一个执行阶段
  • ③ steps 表示在这个stage中每一个步骤
  • ④ sh 执行指定的命令
  • ⑤ junit 是插件junit[JUnit plugin]提供的一个管道步骤,用来收集测试报告

管道名词

几个重要的名词,讲一下它们是什么意思:

  • Step 一个简单的执行步骤,比如执行一个sh脚本
  • Stage 将你的命令组织成一个更高一层的逻辑单元
  • Node 指定这些任务在哪执行

Stage和Step可以放到一个Node下面执行,不指定就默认在master节点上面执行。 另外Node和Step也能组合成一个Stage。

定义管道

有两种定义管道的方式,一种是通过Web UI来定义,一种是直接写Jenkinsfile。推荐后面一种,因为可以纳入版本管理系统。

Web UI方式

这里先介绍第一种方式,通过Web UI,首先点击“新建”:

填写一个名字,然后选择Pipeline

点击“OK”后,在Script中写一个简单的命令:

保存后,点击左侧的“立即构建”:

然后在“Build History”下面点击“#1”进入此次构建详情,再点击左侧的“Console Output”查看输出:

我们看到了打印出来的“hello world”说明成功运行。

上面的例子演示了通过Web UI创建的一个最基本的管道执行成功的案例。使用2个步骤:

// Script //
node { ①
    echo 'Hello World' ②
}
// Declarative not yet implemented //
  • ① node 在Jenkins环境中分配一个执行器和工作空间
  • ② echo 在控制台输出一个简单的字符串

Jenkinsfile方式

上面通过Web UI方式只适用于非常简单的任务,而大型复杂的任务最好采用Jenkinsfile方式并纳入SCM管理。 这次我选择从SCM中的Jenkinsfile来定义管道。

我这里配置了一个git仓库位置,然后我在该项目根目录放一个Jenkinsfile,其实就是我上一篇里演示的。

Poll SCM 触发器

选择Build Trigger为Poll SCM,定时检查是否有push操作,这里我设置每隔2分钟检查一次。

Push触发器

这个触发器我更加推荐,因为是实时的,但是需要先配置gitlab的Webhook。

选择

Build when a change is pushed to GitLab. GitLab CI Service URL: http://192.168.217.161:8080/project/scm-example

复制后面那个URL,然后登录gitlab项目打开项目配置Web Hook,如果没有配置SSL可以将证书检查取消:

增加后可点击下面的测试,上面显示:钩子执行成功:HTTP 200则表示没问题。

然后再来jenkins里面配置push触发器,还能选择你要过滤那些分支,比如我只响应master分支上面的push操作。可以这样:

push钩子的大致流程是这样的:

  1. push代码,Gitlab触发hook,访问Jenkins提供的api
  2. Jenkins Branch Filter系统判断自己需要处理的分支是否有改动,如果有开始构建
  3. 运行构建脚本

然后我再来测试下,修改代码,提交后push到远程仓库中,看到效果正常触发了:

Tips: 每个Jenkinsfile文件都应该以#!groovy为开头第一行

使用Jenkinsfile

接下来详细介绍一下怎样编写Jenkinsfile来完成各种复杂的任务。

Pipeline支持两种形式,一种是Declarative管道,一个是Scripted管道。

一个Jenkinsfile就是一个文本文件,里面定义了Jenkins Pipeline。 将这个文本文件放到项目的根目录下面,纳入版本系统。

部署三阶段

一般我们的持续交付都有三个部分:Build、Test、Deploy,典型写法:

// Declarative //
pipeline {
    agent any

    stages {
        stage('Build') {
            steps {
                echo 'Building..'
                sh 'make'
                archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
            }
        }
        stage('Test') {
            steps {
                echo 'Testing..'
                /* `make check` returns non-zero on test failures,
                 *  using `true` to allow the Pipeline to continue nonetheless
                 */
                sh 'make check || true' ①
                junit '**/target/*.xml' ②
            }
        }
        stage('Deploy') {
            when {
                expression {
                    /*如果测试失败,状态为UNSTABLE*/
                    currentBuild.result == null || currentBuild.result == 'SUCCESS' ①
                }
            }
            steps {
                echo 'Deploying..'
                sh 'make publish'
            }
        }
    }
}

环境变量

Jenkins定了很多内置的环境变量,可在文档localhost:8080/pipeline-syntax/globals#env找到, 通过env直接使用它们:

echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}"

设置环境变量:

// Declarative //
pipeline {
    agent any
    environment {
        CC = 'clang'
    }
    stages {
        stage('Example') {
            environment {
                DEBUG_FLAGS = '-g'
            }
            steps {
                sh 'printenv'
            }
        }
    }
}

使用多个agent

// Declarative //
pipeline {
    agent none
    stages {
        stage('Build') {
            agent any
            steps {
                checkout scm
                sh 'make'
                stash includes: '**/target/*.jar', name: 'app' ①
            }
        }
        stage('Test on Linux') {
            agent { ②
                label 'linux'
            }
            steps {
                unstash 'app' ③
                sh 'make check'
            }
            post {
                always {
                    junit '**/target/*.xml'
                }
            }
        }
        stage('Test on Windows') {
            agent {
                label 'windows'
            }
            steps {
                unstash 'app'
                bat 'make check' ④
            }
            post {
                always {
                    junit '**/target/*.xml'
                }
            }
        }
    }
}

上面的例子,在任一台机器上面做Build操作,并通过stash命令保存文件,然后分别在两台agent机器上面做测试。 注意这里所有步骤都是串行执行的。

Multibranch Pipeline

多分支管道可以让你在同一个项目中,对每个分支定义一个执行管道。Jenkins或自动发现、管理并执行包含Jenkinsfile文件的分支。

这个在前面一篇已经演示过怎样创建这样的Pipeline了,就不再多讲。

Pipeline语法

先讲Declarative Pipeline,所有声明式管道都必须包含在pipeline块中:

pipeline {
    /* insert Declarative Pipeline here */
}

块里面的语句和表达式都是Groovy语法,遵循以下规则:

  1. 最顶层规定就是pipeline { }
  2. 语句结束不需要分好,一行一条语句
  3. 块中只能包含Sections, Directives, Steps或者赋值语句
  4. 属性引用语句被当成是无参方法调用,比如input实际上就是方法input()调用

接下来我详细讲解下Sections, Directives, Steps这三个东西

Sections

Sections在声明式管道中包含一个或多个Directives, Steps

post

post section 定义了管道执行结束后要进行的操作。支持在里面定义很多Conditions块: always, changed, failure, success 和 unstable。 这些条件块会根据不同的返回结果来执行不同的逻辑。

  • always:不管返回什么状态都会执行
  • changed:如果当前管道返回值和上一次已经完成的管道返回值不同时候执行
  • failure:当前管道返回状态值为”failed”时候执行,在Web UI界面上面是红色的标志
  • success:当前管道返回状态值为”success”时候执行,在Web UI界面上面是绿色的标志
  • unstable:当前管道返回状态值为”unstable”时候执行,通常因为测试失败,代码不合法引起的。在Web UI界面上面是黄色的标志
// Declarative //
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post { ①
        always { ②
            echo 'I will always say Hello again!'
        }
    }
}
stages

由一个或多个stage指令组成,stages块也是核心逻辑的部分。 我们建议对于每个独立的交付部分(比如Build,Test,Deploy)都应该至少定义一个stage指令。比如:

// Declarative //
pipeline {
    agent any
    stages { ①
        stage('Example') {
        steps {
            echo 'Hello World'
        }
        }
    }
}
steps

在stage中定义一系列的step来执行命令。

// Declarative //
pipeline {
    agent any
    stages {
        stage('Example') {
            steps { ①
                echo 'Hello World'
            }
        }
    }
}

Directives

jenkins中的各种指令

agent

agent指令指定整个管道或某个特定的stage的执行环境。它的参数可用使用:

  1. any - 任意一个可用的agent
  2. none - 如果放在pipeline顶层,那么每一个stage都需要定义自己的agent指令
  3. label - 在jenkins环境中指定标签的agent上面执行,比如agent { label 'my-defined-label' }
  4. node - agent { node { label 'labelName' } } 和 label一样,但是可用定义更多可选项
  5. docker - 指定在docker容器中运行
  6. dockerfile - 使用源码根目录下面的Dockerfile构建容器来运行
environment

environment定义键值对的环境变量

// Declarative //
pipeline {
    agent any
    environment { ①
        CC = 'clang'
    }
    stages {
        stage('Example') {
            environment { ②
                AN_ACCESS_KEY = credentials('my-prefined-secret-text') ③
            }
            steps {
                sh 'printenv'
            }
        }
    }
}
options

还能定义一些管道特定的选项,介绍几个常用的:

  • skipDefaultCheckout - 在agent指令中忽略源码checkout这一步骤。
  • timeout - 超时设置options { timeout(time: 1, unit: 'HOURS') }
  • retry - 直到成功的重试次数options { retry(3) }
  • timestamps - 控制台输出前面加时间戳options { timestamps() }
parameters

参数指令,触发这个管道需要用户指定的参数,然后在step中通过params对象访问这些参数。

// Declarative //
pipeline {
    agent any
    parameters {
        string(name: 'PERSON', defaultValue: 'Mr Jenkins', description: 'Who should I say hello to?')
    }
    stages {
        stage('Example') {
            steps {
                echo "Hello ${params.PERSON}"
            }
        }
    }
}
triggers

触发器指令定义了这个管道何时该执行,一般我们会将管道和GitHub、GitLab、BitBucket关联, 然后使用它们的webhooks来触发,就不需要这个指令了。如果不适用webhooks,就可以定义两种cron和pollSCM

  • cron - linux的cron格式triggers { cron('H 4/* 0 0 1-5') }
  • pollSCM - jenkins的poll scm语法,比如triggers { pollSCM('H 4/* 0 0 1-5') }
// Declarative //
pipeline {
    agent any
    triggers {
        cron('H 4/* 0 0 1-5')
    }
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}
stage

stage指令定义在stages块中,里面必须至少包含一个steps指令,一个可选的agent指令,以及其他stage相关指令。

// Declarative //
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
}
tools

定义自动安装并自动放入PATH里面的工具集合

// Declarative //
pipeline {
    agent any
    tools {
        maven 'apache-maven-3.0.1' ①
    }
    stages {
        stage('Example') {
            steps {
                sh 'mvn --version'
            }
        }
    }
}

注:① 工具名称必须预先在Jenkins中配置好了 → Global Tool Configuration.

内置条件
  • branch - 分支匹配才执行 when { branch 'master' }
  • environment - 环境变量匹配才执行 when { environment name: 'DEPLOY_TO', value: 'production' }
  • expression - groovy表达式为真才执行 expression { return params.DEBUG_BUILD } }
// Declarative //
pipeline {
    agent any
    stages {
        stage('Example Build') {
            steps {
                echo 'Hello World'
            }
        }
        stage('Example Deploy') {
            when {
                branch 'production'
            }
            echo 'Deploying'
        }
    }
}

Steps

这里就是实实在在的执行步骤了,每个步骤step都具体干些什么东西, 前面的Sections、Directives算控制逻辑和环境准备,这里的就是真实执行步骤。

这部分内容最多不可能全部讲完,官方Step指南 包含所有的东西。

Declared Pipeline和Scripted Pipeline都能使用这些step,除了下面这个特殊的script。

一个特殊的step就是script,它可以让你在声明管道中执行脚本,使用groovy语法,这个非常有用:

// Declarative //
pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
                script {
                    def browsers = ['chrome', 'firefox']
                    for (int i = 0; i < browsers.size(); ++i) {
                        echo "Testing the ${browsers[i]} browser"
                    }
                }
                script {
                    // 一个优雅的退出pipeline的方法,这里可执行任意逻辑
                    if( $VALUE1 == $VALUE2 ) {
                       currentBuild.result = 'SUCCESS'
                       return
                    }
                }
            }
        }
    }
}

最后列出来一个典型的Scripted Pipeline:

node('master') {
    checkout scm

    stage('Build') {
        docker.image('maven:3.3.3').inside {
            sh 'mvn --version'
        }
    }

    stage('Deploy') {
        if (env.BRANCH_NAME == 'master') {
            echo 'I only execute on the master branch'
        } else {
            echo 'I execute elsewhere'
        }
    }
}

可以看到,Scripted Pipeline没那么多东西,就是定义一个node, 里面多个stage,里面就是使用Groovy语法执行各个step了,非常简单和清晰,也非常灵活。

两种Pipeline比较

Declarative Pipeline相对简单,而且不需要学习groovy语法,对于日常的一般任务完全够用, 而Scripted Pipeline可通过Groovy语言的强大特性做任何你想做的事情。

Blue Ocean

Jenkins最新整了个Blue Ocean出来,我觉得有必要用单独来介绍一下这个东西。

Blue Ocean重新设计了用户使用Jenkins的方式,给我们带来极大的方便,同时也兼容自由风格的任务定义。

安装

可以在当前Jenkins环境下面安装Blue Ocean插件,具体步骤:

  1. 登录Jenkins服务器
  2. 侧边栏点击”Manage Jenkins” -> “Manage Plugins”
  3. 选择”Available”然后使用搜索框查找”Blue Ocean”
  4. 在安装列点击checkbox
  5. 选择”不重启安装”或”下载并重启后安装”

启动

安装好后会出现一个”Open Blue Ocean”的按钮,点击即可进入蓝色海洋:

界面如下:

蓝色海洋果真是蓝色的,^_^

Pipeline编辑器

使用管道编辑器是最简单的方式,可以来创建多个并行执行的任务。 编辑完保存后会自动保存为Jenkinsfile并放到源码管理系统中。

这里我演示一个在github中没有定义过Jenkinsfile的仓库,创建pipeline会默认写入Jenkinsfile文件。

首先需要在GitHub上面生成你的Personal access tokens,然后创建一个关联GitHub的管道,可视化编辑任务。

编辑完pipeline后保存会执行一次commit和push操作

个人感觉这种可视化简单点的倒可以,复杂的还是手动写吧。

弄好后你想执行某个pipeline,就先点下那个五角星,上面就会出现执行按钮了。

FAQ

如果遇见for (item : items)报错NotSerializableException或者Unserializable iterator等等错误, 就将foreach循环改成传统C语言的循环:

for (int i = 0; i < cluster_nodes.size(); i++) {
    node = cluster_nodes[i]
}

转自:
https://www.xncoding.com/2017/03/22/fullstack/jenkins02.html

Jenkins的Poll SCM 假设你正在开发一个Web应用程序,使用Git进行版本控制,并且有一个Jenkins服务器用于持续集成。团队成员会频繁地将代码提交到Git仓库,你希望Jenkins能够自动检测到这些代码的更新,并及时构建和测试应用程序。 阅读详情

相关推荐

jenkins学习之Jenkins流水线之声明式管道与脚本式管道

Jenkins pipeline 最近由于项目需要,接触到了Jenkins 2.0版本,其中最重要的特性就是提供了对pipeline的支持。 简单的来说,就是把Jenkins1.0版本中,Project中的相关配置信息,如SVN/Git的配置,Parameter的配置等都变成Code,即Pipeline as Code。 这样的优势为可以通过写代码的形式配置Project,且Jenkins中内置了常用的steps。实现了构建步骤代码化、构建过程视图化。 声明性管道与脚本管道 声明式管道 和 脚本化管道 的主

马哥私房菜 1608

Jenkins 定时构建和Poll SCM的区别

场景描述: 之前看到别人在研究jenkins的时候,设置的是poll SCM这个选项,说是定时检查源码并更新,并没有怎么太在意,现有个需求,就是配置一个任务,设定某个日期进行执行,我就配置了Poll SCM不料没有执行,查找原因,是酱紫的 最近在做Jenkins的自动构建,这两个参数是有区别的: Poll SCM: 定时检查源码变更,如果有更新就checkout最新code下来,然后执行构建动作...

终将成为大牛 9086

Jenkins插件实战:List Git Branches如何帮你优雅管理Gitee/GitLab多分支项目?

本文详细介绍了Jenkins插件List Git Branches在多分支项目管理中的实战应用,特别针对Gitee/GitLab仓库。通过自动同步远程分支、支持正则过滤等功能,该插件显著提升了持续集成效率,解决了手动维护分支列表的痛点。文章包含安装配置指南、私有仓库安全接入方案以及高级分支管理策略,帮助团队实现优雅的CI/CD流程。

weixin_30279671的博客 321

Jenkins构建触发器Poll SCM

Poll SCM是Jenkins主动遍历git库,当发现git库代码发生改变会自动构建任务。使用cron表达式进行选择遍历属性的,可以参考。

秦子腾 2万+

使用jenkins pipeline实现golang项目的持续集成

Jenkins Pipeline是什么 Jenkins Pipeline(以下称“管道”)是一套插件,使jenkins支持建立持续交付工作流,将自由式的构建工作连接起来执行连续性任务。 为什么要管道? Jenkins从根本上说是一个支持多种自动化模式的自动化引擎。Pipeline在Jenkins上增加了一套强大的自动化工具,支持从简单的CI持续集成到全面的CD工作流的用例,使jenkin...

Tiny Home 8978

15、使用 Jenkins 实现持续集成

本文详细介绍了如何使用 Jenkins 实现持续集成(CI)流程,涵盖分支策略设计、CI管道构建、相关工具集成以及具体的 Jenkinsfile 编写步骤。通过自动化构建、测试和部署流程,帮助开发团队提升代码质量和协作效率。同时提供了常见问题的解决方案和未来优化方向,为搭建高效的持续集成环境提供指导。

water的专栏 72

Jenkins 详解,打造高效持续集成管道!

Jenkins是一个基于Java开发的开源工具,最初是Hudson的一部分。它通过构建和测试代码来实现持续集成,使得开发者能够更加频繁地集成新的变更,并及时发现潜在的问题。Jenkins可以与各种版本控制系统、构建工具和测试框架进行集成,提供了丰富的插件生态系统,可以满足不同项目的需求。Jenkins支持使用Groovy语言编写脚本来定义管道项目,提供了强大的可编程能力。你可以根据需求编写自定义的构建逻辑、条件判断和循环等,实现更灵活和复杂的流水线定义。

m0_72410588的博客 458

手把手教你用smarteye搭建免费GB28181监控平台(含海康设备接入避坑指南)

本文提供了一份基于SmartEye搭建免费GB28181视频监控平台的实战指南。详细介绍了从服务器部署、GB28181协议核心配置,到海康威视等主流设备接入的完整流程,并重点分享了设备注册失败、无法预览等常见问题的深度排错方法,旨在帮助中小企业及开发者低成本实现多品牌监控设备的统一管理。

pz89012345的博客 326

【工程实战】第九篇:持续集成 —— Jenkins 与 GitLab CI:构建无人值守的自动化流水线

专栏进度:09 / 10 (自动化实战专题)持续集成(Continuous Integration, CI) 的核心目标是:尽早发现集成错误。我们将实现“代码提交 -> 自动触发 -> 并行执行 -> 报告发布 -> 钉钉/邮件通知”的全闭环。

qq_45239623的博客 570

SAP EWM 内向交货流程(一)

本文介绍了SAP EWM系统中内向交货单的基本配置与操作流程。

huqinghai的专栏 2398

QCC308x/3095收发一体:TX/RX双模一拖二与多编码广播实战解析

本文深度解析高通QCC308x/3095蓝牙音频芯片的TX/RX双模功能与广播应用。芯片支持发射和接收模式下的“一拖二”连接,并能实现LE Audio多设备广播,显著提升多设备音频切换体验与商业广播能力,适用于健身、导览等丰富场景。

g9h0i1的博客 1004

Jenkins持续集成

Jenkins持续集成 1、介绍、环境搭建 什么是Jenkins? Jenkins是一款开源CI&CD软件,用于自动化各种任务,包括构建、测试和部署软件,支持自定义工具集、多种交付通道 CI:Continuous integration,持续集成,一种软件开发实践。每次集成(源代码变更后)都通过自动化的构建(包括编译、发布、自动化测试)来验证,从而尽快地发现集成错误,大大减少集成问题。持续集成过程:先把代码放入git,Jenkins从git获取代码进行构建、测试、生成结果再返回给客户端 CD:Con

weixin_42724501的博客 1万+

基于STM32与SimpleFOC实现直流无刷电机开环控制的实战指南

本文提供了一份基于STM32微控制器与SimpleFOC开源库实现直流无刷电机开环控制的详细实战指南。内容涵盖硬件连接、PlatformIO环境搭建、核心代码解析及上电测试,旨在帮助开发者快速验证硬件并理解开环控制的基本原理,为后续实现高性能的闭环FOC控制奠定基础。

xxx12的博客 960

Jenkins简介及安装配置详解:开启持续集成之旅

Jenkins是一个开源的、用Java编写的持续集成和持续交付(CI/CD)工具。它提供了一种简单易用的方式来自动化构建、测试和部署软件。Jenkins的主要目标是帮助开发团队加快软件开发过程,提高软件质量,并通过自动化流程减少手动操作和重复性工作。持续集成:Jenkins支持通过持续集成管道(Pipeline)来自动化构建、测试和部署。它能够检测代码的变更,并触发相应的构建和测试过程,确保及时地发现和解决问题。插件生态系统:Jenkins拥有丰富的插件生态系统,可以扩展各种功能和集成其他工具。

唯有努力,方可自信! 1万+

UltraScale+ FPGA中GTY收发器参考时钟的跨Bank共享机制解析

本文深入解析了UltraScale+ FPGA中GTY收发器参考时钟的跨Bank共享机制,详细介绍了时钟布线架构、SLR区域限制及Vivado工程配置要点。通过实际案例和优化建议,帮助工程师解决高速串行通信中的时钟共享问题,提升系统性能。

weixin_29280219的博客 632

【Unity Shader】Special Effects(十二)Glow 外发光(UI)

Properties_GlowColor ("外发光颜色", Color) = (0, 0, 0, 1)_GlowIntensity("外发光强度", Range(0, 1)) = 1参数详解:_GlowColor:外发光颜色,指定外发光的显示颜色。_GlowIntensity:外发光强度,指定外发光的显示强度,0为不可见,1为最强强度。

神码编程 934

[笔记] Jenkins 安装与配置全攻略:Ubuntu 从零开始搭建持续集成环境

本文详细介绍了如何在 Ubuntu 系统上安装和配置 Jenkins,涵盖从系统最低推荐配置、Java 环境搭建、Jenkins 安装、防火墙配置到 Jenkins 初始化设置的完整流程。特别针对在同一台服务器上同时运行 GitLab 和 Jenkins 的场景,提供了端口冲突解决方法。通过本文,读者可以轻松完成 Jenkins 的安装,并顺利解锁 Jenkins、安装插件、创建管理员账户,最终成功启动 Jenkins 实例。

LuChangQiu的博客 3431

LVGL实战 透视卡盘

八张卡立在一个圆柱面上,摄像机在柱心前方。每帧对屏幕上的每个像素发一条射线,与卡片所在平面求交,得到三维交点,再投影回卡片自己的二维坐标系取样。透视、倾斜、近大远小、相互遮挡 —— 全部是这一步的副产物。

摸鱼专家 55

jenkins ci/cd_使用Jenkins构建CI / CD管道

jenkins ci/cd 在我的文章“使用开源工具构建DevOps管道的初学者指南”中 ,我分享了一个有关从头开始构建DevOps管道的故事。 推动该计划发展的核心技术是Jenkins ,这是一种用于建立持续集成和持续交付(CI / CD)管道的开源工具。 在花旗,有一个单独的团队为专用的Jenkins管道提供稳定的主从节点设置,但是该环境仅用于质量保证(QA),暂存和生产环境。 开发环境...

cumj63710的博客 1273

GPU服务器维修全流程:从检测到解锁

《GPU服务器维修维保全流程指南》摘要:本文系统介绍GPU服务器从检测到解锁的完整维修流程。检测环节包含物理检查(氧化层、散热、PCB板)和电子诊断(ECC报错率、电源波动等);核心维修技术涵盖PCB板修复(微孔镀铜、BGA返修)和芯片级维修(成功率78-92%);解锁验证阶段包括性能解锁(VBIOS重写)和72小时稳定性测试。文末提供故障速查表及维保建议,强调定期除尘可降低38%故障率,推荐环境粉尘浓度控制在≤0.3mg/m³。

2401_89353317的博客 891

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Jenkins:持续集成与持续部署的利器

本文全面介绍了Jenkins这一开源自动化服务器,它在持续集成(CI)和持续部署(CD)领域扮演着重要角色。Jenkins以其灵活性和可扩展性著称,能够帮助开发团队自动化构建、测试和部署软件,从而提高开发效率和软件质量。 文章首先概述了Jenkins的基本概念,包括其起源、发展历程以及核心功能。Jenkins作为一个开源项目,拥有庞大的用户社区和丰富的插件生态系统,这使得它能够适应各种复杂的软件开发需求。 接着,文章深入探讨了Jenkins的架构设计和安装配置过程。Jenkins采用主从节点架构,支持分

博客虽小,世界尽在其中 4770

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Jenkins交付管道插件教程

Jenkins交付管道插件教程 项目介绍 Jenkins交付管道插件是一款专为 Jenkins 设计的可视化工具,旨在提供连续交付/持续集成(CI/CD)流程的视觉展示。该插件对于构建复杂部署流水线的团队尤为重要,它帮助团队成员直观地跟踪从代码提交到生产部署的每个阶段。通过在单一视图中显示一个或多个管道,甚至支持全屏模式,加速反馈循环并增强交付过程的透明度。插件的配置灵活性高,允许手动触发、自定...

gitblog_00376的博客 758

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

jenkins 面试题

1.jenkins是什么 Jenkins是一个开源的、可扩展的持续集成、交付、部署(软件/代码的编译、打包、部署)的基于web界面的平台。允许持续集成和持续交付项目,无论用的是什么平台,可以处理任何类型的构建或持续集成。 2.为什么使用jenkins Jenkins是一种使用Java编程语言编写的开源持续集成软件工具,用于实时测试和报告较大代码库中的孤立更改。 Jenkins软件使开发人员能够快速找到并解决代码库中的缺陷,并自动进行构建测试。 3.CI/CD是什么 CI(Continuous integra

麦迪康 2万+

使用Jenkins,GitHub和Docker的最先进的持续集成和部署管道

搭建舞台 在过去的两年中,我一直在从事Node.js项目。 我们使用GitHub进行源管理,使用Jenkins进行持续集成。 我们还有一个基于Docker和Terraform的部署工具。 在此期间,我们对配置进行了一些改进。 产生积极影响的更改之一是在分支上运行CI管道,并在GitHub上查看反馈。 在合并PR之前检查构建的结果可以防止由于微小错误而造成的大量损坏。 就像忘记运行lint或添...

cunfen8879的博客 186

持续集成——通过docker命令安装Jenkins

集成自动化测试,减少重复劳动尽早发现和解决缺陷,减少风险形成有机整体,明确阶段交付物。

python全栈 1222
上一篇: Jenkins持续集成 - 安装配置
下一篇: Jenkins持续集成 - 使用案例
mergerly
博客等级 码龄22年 953粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值