Jenkins用户手册官网地址:点击打开

  1. 开源 CI&CD 软件
  2. 自动化各种任务, build test deploy
  3. 支持各种运行方式

Jenkins入门

入门指南

  1. 需要java和docker

  2. 安装命令

    java -jar jenkins.war --httpPort=8080

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

创建 Hello World 流水线

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

  2. pipline的定义通常被写入到一个文本文件中:Jenkinsfile

  3. New Item -> Pipeline(一般)/Multibranch Pipeline(基于scm仓库)

  4. SCM: Source Code Management

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

  6. 文本示例

    // java
    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent { docker 'maven:3.3.3' }
        stages {
            stage('build') {
                steps {
                    sh 'mvn --version'
                }
            }
    # python
    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent { docker 'python:3.5.1' }
        stages {
            stage('build') {
                steps {
                    sh 'python --version'
                }
            }
        }
    }

执行多个步骤

  1. 在 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
                    '''
                }
            }
        }
    }
  2. 基于 Windows 的系统使用 bat 步骤表示执行批处理命令

    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    bat 'set'
                }
            }
        }
    }
  3. pipline的步骤支持重试、超时等

    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'
                    }
                }
            }
        }
    }
    // 重试部署任务 5 次,但是总共花费的时间不能超过 3 分钟
    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent any
        stages {
            stage('Deploy') {
                steps {
                    timeout(time: 3, unit: 'MINUTES') {
                        retry(5) {
                            sh './flakey-deploy.sh'
                        }
                    }
                }
            }
        }
    }

定义执行环境

  1. 所有的Pipeline都需要 agent 指令

    agent {
        docker { image 'node:7-alpine' }
    }
  2. 当执行Pipeline时,Jenkins将会自动运行指定的容器

  3. 在Pipeline中,混合和搭配不同的容器或者其他代理可以获得更大的灵活性

使用环境变量

  1. 全局变量和stage变量

    Jenkinsfile (Declarative Pipeline)
    pipeline {
        agent any
    
        environment {
            DISABLE_AUTH = 'true'
            DB_ENGINE    = 'sqlite'
        }
    
        stages {
            stage('Build') {
                steps {
                    sh 'printenv'
                }
            }
        }
    }
  2. 环境变量的另一个常见用途是设置或者覆盖构建或测试脚本中的凭证

记录测试和构建结果

  1. Jenkins 通常与 junit 步骤捆绑在一起
  2. Jenkins 会持续跟踪并计算测试的趋势和结果
  3. 如果存在失败的测试用例,Pipeline 会被标记为 “UNSTABLE”,在网页上用黄色表示
  4. Jenkins 内置支持存储构建结果报告,在 Pipeline 执行期间生成记录文件

清理和通知

  1. post 部分保证在 Pipeline 结束的时候运行

  2. 发邮件

    post {
        failure {
            mail to: 'team@example.com',
                 subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
                 body: "Something is wrong with ${env.BUILD_URL}"
        }
    }

部署

  1. 大多数最基本的持续交付 Pipeline 至少会有三个阶段:构建、测试和部署
  2. 使用 input 步骤,支持人工确认是否可以继续运行

教程

  1. 持续集成(CI) / 持续交付 (CD)

  2. 在Docker中运行Jenkins。将Jenkins作为 Docker 容器并从 jenkinsci/blueocean Docker 镜像中运行

  3. docker run 添加--name jenkins-tutorials,可以通过docker exec -it jenkins-tutorials bash来访问Jenkins/Blue Ocean 容器

  4. 安装步骤:解锁 Jenkins -> 使用插件自定义 Jenkins -> 创建第一个管理员用户 -> Start using Jenkins

  5. 停止ctrl+c,重启docker run

  6. 创建好pipline后,就会生成Jenkinsfile,这些文件会被添加到你的本地仓库

  7. pipline会使用Jenkins中的Maven自动构建你的Java应用程序

  8. "Pipeline-as-Code",将持续交付流水线作为应用程序的一部分,与其他代码一样进行版本控制和审查

  9. Maven容器

  10. Docker主机的文件系统在每次重启Docker时都会被清除

  11. Build 阶段,Maven会下载构建你的Java应用所需的工件, 这些工件最终会被保存在Jenkins的本地Maven仓库中(Docker的主机文件系统)

  12. 一般的原则是,尽量保持你的流水线代码(即 Jenkinsfile)越简洁越好,将更复杂的构建步骤放在多个独立的shell脚本中 (尤其对于那些包含2个以上steps的stage)

  13. 使用npm构建Node.js和React应用,使用PyInstaller构建Python应用,类似

  14. Where do you store your code? GitHub

  15. 通过Blue Ocean创建的流水线项目实际上是 "多分支流水线"

  16. 使用Blue Ocean生成Pipeline更多的是UI层面的操作

  17. git checkout master

  18. 多分支pipline Where do you store your code?,点击 Git (not GitHub)

  19. when 指令 (和它们的branch 条件一起)决定是否 stages (包括这些 when 指令) 会被执行。 如果 branch 条件的值(即模式) 与Jenkins运行构建的分支名匹配, 包含 whenbranch 概念的stage 就会被执行

    stage('Deliver for development') {
                when {
                    branch 'development'
                }
                steps {
                    sh './jenkins/scripts/deliver-for-development.sh'
                    input message: 'Finished using the web site? (Click "Proceed" to continue)'
                    sh './jenkins/scripts/kill.sh'
                }
            }
            stage('Deploy for production') {
                when {
                    branch 'production'
                }
                steps {
                    sh './jenkins/scripts/deploy-for-production.sh'
                    input message: 'Finished using the web site? (Click "Proceed" to continue)'
                    sh './jenkins/scripts/kill.sh'
                }
            }
  20. 每个分支都会在Jenkins的主目录中有他自己的工作区目录,意味着资源需要重新下载

  21. Chrome: chrome://serviceworker-internals/
    Firefox: about:serviceworkers

用户手册

  1. Docker容器实际上是Docker镜像的“运行实例”,镜像永久存储(只要镜像更新发布),而容器暂时存储

  2. 建议使用的Docker镜像是jenkinsci/blueocean image(来自 the Docker Hub repository)

  3. Jenkins控制台日志 docker logs <docker-container-name> 可以使用docker ps 命令获得docker-container-name

  4. Jenkins主目录docker exec -it <docker-container-name> bash

  5. credentials用于访问控制

  6. 为了最大限度地提高安全性,在Jenins中配置的 credentials 以加密形式存储在Jenkins 主节点上(用Jenkins ID加密),并且只能通过 credentials ID在Pipeline项目中获取

  7. 创建 Jenkinsfile并提交它到源代码控制中提供了一些即时的好处:
    • 自动地为所有分支创建流水线构建过程并拉取请求。
    • 在流水线上代码复查/迭代 (以及剩余的源代码)。
    • 对流水线进行审计跟踪。
    • 该流水线的真正的源代码 [3], 可以被项目的多个成员查看和编辑。
  8. 本质上,Jenkins 是一个自动化引擎

  9. pipline流水线

  10. 声明式流水线语法脚本化流水线语法

  11. DSL domain-specific language 领域特定语言

  12. 创建pipline的方式:Blue Ocean、UI、Jenkinsfile

  13. 通过UI创建pipline,Jenkinsfile是存储在Jenkins主目录的,而其他2种方式是存储在源代码目录的

  14. Pipeline script from SCM

  15. 当你更新指定的仓库时,只要流水线配置了版本管理系统的轮询触发器,就会触发一个新的构建

  16. 全局变量 env params currentBuild

  17. Directive Generator指令生成器

  18. Groovy

  19. Jenkinsfile 文件不能替代现有的构建工具,如 GNU/Make、Maven、Gradle 等,而应视其为一个将项目的开发生命周期的多个阶段(构建、测试、部署等)绑定在一起的粘合层

  20. currentBuild.result 变量确定是否有任何测试的失败 currentBuild.result == null || currentBuild.result == 'SUCCESS'

  21. 如果任务试图从流水线中显示这些凭据变量的值(如 echo $AWS_SECRET_ACCESS_KEY),Jenkins 只会返回 “****” 来降低机密信息被写到控制台输出和任何日志中的风险

  22. 不要允许不受信任的流水线任务使用受信任的凭据

  23. 通过 post节段 支持强大的故障处理

  24. SSH https://jenkins.io/zh/doc/book/pipeline/jenkinsfile/

  25. Multibranch Pipeline

  26. 周期性地重新索引有助于配置多分支流水线

  27. docker args设置缓存

    docker {
                image 'maven:3-alpine'
                args '-v $HOME/.m2:/root/.m2'
            }
  28. Docker Label是一个全局选项,用来指定运行基于Docker的流水线的代理

  29. Docker注册表

  30. 共享库,在多个项目之间共享流水线有助于减少冗余并保持代码 "DRY"

  31. Blue Ocean Pipeline Editor

  32. "replay" Pipeline Runs with Modifications

  33. 流水线的主要瓶颈之一是它经常将临时数据写入磁盘,以便于运行流水线能够处理意外的Jenkins重启或系统崩溃。对于许多用户来说,这种持久性是有用,但是它的性能成本是一个问题

  34. Blue Ocean 这个名字来自书籍 Blue Ocean Strategy

  35. Blue Ocean 旨在为pipeline 提供绝佳的体验

  36. Dashboard

  37. Health icon

  38. JNLP

  39. 文件访问规则可用于验证从代理到主服务器的文件访问请求

  40. Jenkins CLI

  41. 大多数脚本默认在Groovy沙箱运行,包括所有的Jenkins流水线

  42. Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言

  43. 两个轴是正交的

  44. servlet容器

  45. 禁用安全

  46. 结束,这玩意感觉是english直接通过google translate过来的!

版权申明:本文为博主原创文章,转载请保留原文链接及作者。

点读系列《Jenkins用户文档》的更多相关文章

  1. 读《流畅的python》第一天

    1.跟运算符无关的特殊方法了解: 2.跟运算符相关的特殊方法了解: 3.内置的序列类型分类: 容器序列 list.tuple 和 collections.deque 这些序列能存放不同类型的数据. 扁 ...

  2. [读书笔记]流畅的Python(Fluent Python)

    <流畅的Python>这本书是图灵科技翻译出版的一本书,作者Luciano Ramalho. 作者从Python的特性角度出发,以Python的数据模型和特殊方法为主线,主要介绍了pyth ...

  3. 流畅的python(笔记)

    流畅的python中有很多奇技淫巧,整本书都在强调如何最大限度地利用Python 标准库.介绍了很多python的不常用的数据类型.操作.库等,对于入门python后想要提升对python的认识应该有 ...

  4. 流畅的python 对象引用 可变性和垃圾回收

    对象引用.可变性和垃圾回收 变量不是盒子 人们经常使用“变量是盒子”这样的比喻,但是这有碍于理解面向对象语言中的引用式变量.Python 变量类似于 Java 中的引用式变量,因此最好把它们理解为附加 ...

  5. 一篇夯实一个知识点系列--python生成

    写在前面 本系列目的:一篇文章,不求鞭辟入里,但使得心应手. 迭代是数据处理的基石,在扫描内存无法装载的数据集时,我们需要一种惰性获取数据的能力(即一次获取一部分数据到内存).在Python中,具有这 ...

  6. 《流畅的python》读书笔记

    流畅的python 第1章 python数据模型 ---1.1 一摞Python风格的纸牌 特殊方法,即__method__,又被称为魔术方法(magic method)或者双下方法(dunder-m ...

  7. python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学

    首发于:python人工智能爬虫系列:怎么查看python版本_电脑计算机编程入门教程自学 http://jianma123.com/viewthread.aardio?threadid=431 本文 ...

  8. 《流畅的Python》一副扑克牌中的难点

    1.现在在看<流畅的Python>这本书,看了三页就发现,这本书果然不是让新手来入门的,一些很常见的知识点能被这个作者玩出花来, 唉,我就在想,下面要分析的这些的代码,就算我费劲巴拉的看懂 ...

  9. 《流畅的Python》Object References, Mutability, and Recycling--第8章

    Object References, Mutability, and Recycling 本章章节: Variables Are Not Boxes identity , Equality ,  Al ...

  10. 《流畅的Python》 第一部分 序章 【数据模型】

    流畅的Python 致Marta,用我全心全意的爱 第一部分 序幕 第一章 Python数据模型 特殊方法 定义: Python解释器碰到特殊句法时,使用特殊方法激活对象的基本操作,例如python语 ...

随机推荐

  1. latex的资料ftp

    ftp://ftp.tex.ac.uk/ctan/tex-archive/ ftp ftp.tex.ac.uk anonymous ls

  2. PAT甲级【2019年9月考题】——A1160 Forever【20】

    7-1 Forever (20 分) "Forever number" is a positive integer A with K digits, satisfying the ...

  3. leetcode.双指针.524通过删除字母匹配到字典里最长单词-Java

    1. 具体题目 给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到.如果答案不止一个,返回长度最长且字典顺序最小的字符串.如果答案不存在,则返回空 ...

  4. docker--shell和Exec格式

    shell格式 RUN apt-get install -y vim CMD echo "docker so easy" ENTRYPOINT echo "docker ...

  5. C#简单的文件依赖缓存的使用

    一,FileCache.aspx页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=& ...

  6. Resultset获取行数和列数

    在Java中,获得ResultSet的总行数的方法有以下几种. 第一种:利用ResultSet的getRow方法来获得ResultSet的总行数 Statement stmt = con.create ...

  7. 获取模糊匹配的div id属性

    html中有一批id,以数字+固定字符结尾,前台需要把这一批id组成数组传递给后台 假设固定结尾字符为“pic”,使用 var pidlist=$("[id$='pic']");将 ...

  8. MongoDB--副本集基本信息

    副本集的概念 副本集是一组服务器,其中有一个是主服务器(primary),用于处理客户端请求:还有多个备份服务器(secondary),用于保存主服务器的数据副本.如果主服务器崩溃了,备份服务器会自动 ...

  9. sqlite3 C语言 API 函数

    int sqlite3_open(char *path, sqlite3 **db): 功能:打开sqlite数据库 参数:   path: 数据库文件路径 db: 指向sqlite句柄的指针 返回值 ...

  10. 在脚本中使用set命令调试脚本

    当脚本文件较长时,可以使用set命令指定调试一段脚本.在脚本中使用set -x命令开启调式模式:使用set +x命令关闭调式模式. 例如: #!/bin/bash #Scriptname: greet ...