{
  "schemaVersion": "0.11.0",
  "canonical": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/",
  "atlas": "https://www.pystone.net/?node=jenkins-pipeline-install-basics#knowledge-atlas",
  "markdown": "https://www.pystone.net/notes/jenkins-pipeline-install-basics.md",
  "context": "https://www.pystone.net/notes/jenkins-pipeline-install-basics.context.json",
  "knowledgeVersion": "224c990773de.5fa8af6e39fa",
  "build": {
    "siteCommit": "224c990773de166d23a886306577dd90379529ce",
    "notesCommit": "5fa8af6e39fa3891d1b9b4832bfa6c4e0ecaaf0a",
    "builtAt": "1970-01-01T00:00:00.000Z",
    "version": "224c990773de.5fa8af6e39fa"
  },
  "id": "note:jenkins-pipeline-install-basics",
  "slug": "jenkins-pipeline-install-basics",
  "title": "【Jenkins Pipeline】安装与基本使用",
  "type": "note",
  "visibility": "public",
  "idStability": "rename-stable",
  "author": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "publisher": {
    "name": "Perrin Yong",
    "profile": "https://www.pystone.net/profile/"
  },
  "aliases": [],
  "summary": "【Jenkins Pipeline】安装与基本使用",
  "contentRole": "unspecified",
  "isMoc": false,
  "mocRecognition": "none",
  "generated": false,
  "attribution": "unspecified",
  "domain": "10-计算机、信息技术与工程",
  "tags": [],
  "mocs": [],
  "contentHash": "9d372c00d678a344422b5b75ebd0e16a0602e900285a6576cee18ffe6c79ce59",
  "assets": [],
  "headings": [
    {
      "depth": 1,
      "text": "【Jenkins Pipeline】安装与基本使用",
      "anchor": "jenkins-pipeline安装与基本使用",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#jenkins-pipeline%E5%AE%89%E8%A3%85%E4%B8%8E%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8"
    },
    {
      "depth": 2,
      "text": "相关概念",
      "anchor": "相关概念",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E7%9B%B8%E5%85%B3%E6%A6%82%E5%BF%B5"
    },
    {
      "depth": 3,
      "text": "软件配置管理 （Software Configuration Management, SCM）",
      "anchor": "软件配置管理-software-configuration-management-scm",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E8%BD%AF%E4%BB%B6%E9%85%8D%E7%BD%AE%E7%AE%A1%E7%90%86-software-configuration-management-scm"
    },
    {
      "depth": 3,
      "text": "CI（Continuous integration, 持续集成）",
      "anchor": "cicontinuous-integration-持续集成",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#cicontinuous-integration-%E6%8C%81%E7%BB%AD%E9%9B%86%E6%88%90"
    },
    {
      "depth": 2,
      "text": "Jenkins",
      "anchor": "jenkins",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#jenkins"
    },
    {
      "depth": 3,
      "text": "安装配置",
      "anchor": "安装配置",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE"
    },
    {
      "depth": 4,
      "text": "下载",
      "anchor": "下载",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E4%B8%8B%E8%BD%BD"
    },
    {
      "depth": 4,
      "text": "运行",
      "anchor": "运行",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E8%BF%90%E8%A1%8C"
    },
    {
      "depth": 2,
      "text": "Pipeline",
      "anchor": "pipeline",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#pipeline"
    },
    {
      "depth": 3,
      "text": "Jenkinsfile",
      "anchor": "jenkinsfile",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#jenkinsfile"
    },
    {
      "depth": 3,
      "text": "语法",
      "anchor": "语法",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E8%AF%AD%E6%B3%95"
    },
    {
      "depth": 4,
      "text": "agent 分配节点",
      "anchor": "agent-分配节点",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#agent-%E5%88%86%E9%85%8D%E8%8A%82%E7%82%B9"
    },
    {
      "depth": 4,
      "text": "stage",
      "anchor": "stage",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#stage"
    },
    {
      "depth": 4,
      "text": "post",
      "anchor": "post",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#post"
    },
    {
      "depth": 4,
      "text": "parameters",
      "anchor": "parameters",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#parameters"
    },
    {
      "depth": 4,
      "text": "options",
      "anchor": "options",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#options"
    },
    {
      "depth": 4,
      "text": "environment",
      "anchor": "environment",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#environment"
    },
    {
      "depth": 3,
      "text": "使用步骤",
      "anchor": "使用步骤",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E4%BD%BF%E7%94%A8%E6%AD%A5%E9%AA%A4"
    },
    {
      "depth": 3,
      "text": "其他操作",
      "anchor": "其他操作",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E5%85%B6%E4%BB%96%E6%93%8D%E4%BD%9C"
    },
    {
      "depth": 3,
      "text": "遇到的坑",
      "anchor": "遇到的坑",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E9%81%87%E5%88%B0%E7%9A%84%E5%9D%91"
    },
    {
      "depth": 3,
      "text": "时间配置",
      "anchor": "时间配置",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E6%97%B6%E9%97%B4%E9%85%8D%E7%BD%AE"
    },
    {
      "depth": 3,
      "text": "脚本示例",
      "anchor": "脚本示例",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#%E8%84%9A%E6%9C%AC%E7%A4%BA%E4%BE%8B"
    },
    {
      "depth": 2,
      "text": "Ref",
      "anchor": "ref",
      "citation": "https://www.pystone.net/notes/jenkins-pipeline-install-basics/#ref"
    }
  ],
  "claims": [],
  "outgoing": [],
  "incoming": [
    {
      "id": "note:software-engineering-and-quality",
      "title": "软件工程与质量保障",
      "url": "https://www.pystone.net/notes/software-engineering-and-quality/",
      "atlas": "https://www.pystone.net/?node=software-engineering-and-quality#knowledge-atlas",
      "label": "软件工程与质量保障",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "CI-CD与质量保障/CI-CD工具链中的“【Jenkins Pipeline】安装与基本使用”导航项",
      "citation": "https://www.pystone.net/notes/software-engineering-and-quality/#ci-cd%E4%B8%8E%E8%B4%A8%E9%87%8F%E4%BF%9D%E9%9A%9Cci-cd%E5%B7%A5%E5%85%B7%E9%93%BE"
    },
    {
      "id": "note:agent-era-ci-tool-selection",
      "title": "Agent 时代 CI 工具选型",
      "url": "https://www.pystone.net/notes/agent-era-ci-tool-selection/",
      "atlas": "https://www.pystone.net/?node=agent-era-ci-tool-selection#knowledge-atlas",
      "label": "Agent 时代 CI 工具选型",
      "origin": "explicit",
      "humanReviewed": true,
      "context": "Jenkins 的优势不是概念新，而是多年积累的跨平台节点、插件生态、故障处理经验和复杂工程兼容性。现有的 Jenkins 分布式构建 与 Jenkins Pipeline 笔记记录了这一底座的实际使用经验。",
      "citation": "https://www.pystone.net/notes/agent-era-ci-tool-selection/#%E7%AC%AC%E4%BA%8C%E6%96%B9%E6%A1%88jenkins"
    }
  ],
  "contentMarkdown": "# 【Jenkins Pipeline】安装与基本使用\n\n> 创建时间：2020/9/16 17:02\n\n  * 【Jenkins Pipeline】安装与基本使用\n    * 相关概念\n      * 软件配置管理 （Software Configuration Management, SCM）\n      * CI（Continuous integration, 持续集成）\n    * Jenkins\n      * 安装配置\n        * 下载\n        * 运行\n    * Pipeline\n      * Jenkinsfile\n      * 语法\n        * agent 分配节点\n        * stage\n        * post\n        * parameters\n        * options\n        * environment\n      * 使用步骤\n      * 其他操作\n      * 遇到的坑\n      * 时间配置\n      * 脚本示例\n    * Ref\n\n## 相关概念\n\n### 软件配置管理 （Software Configuration Management, SCM）\n\n参考[立师兄Linty的博文](https://www.jianshu.com/p/f8d81680a7cf)\n\n> **IEEE定义** A discipline applying technical and administrative direction and surveillance to identify and document the functional and physical characteristics of a configuration item, control changes to those characteristics, record and report change processing and implementation status, and verify compliance with specified requirements.\n>\n> 软件配置管理，是关于软件资产的管理。\n>  软件 = 源代码 + 文档。\n>  源代码、设计文档、可以运行的程序等在软件研发过程中产生的有价值的东西，都是软件资产。\n\n是一种应用于整个软件工程过程的标识、组织和控制修改的围绕软件资产的管理技术。\n\n软件配置管理，又称软件形态管理、或软件建构管理，简称软件形管。界定软件的组成项目，对每个项目的变更进行管控（版本控制），并维护不同项目之间的版本关联，以使软件在开发过程中任一时间的内容都可以被追溯，包括某几个具有重要意义的数个组合。\n\n特点：\n\n  * 软件也是配置起来的。各个源文件、源代码和正确的文档搭配起来，编译产生正确的可以运行的程序。\n\n  * 软件更容易发生变化，是向前演进的。\n\n  * 软件的相关性（耦合）更高，一旦需要改动，通常不是只更改一个文件。\n\ngit就是一种SCM工具\n\n### CI（Continuous integration, 持续集成）\n\n指的是，频繁地（一天多次）将代码集成到主干。\n持续集成工具让产品可以快速迭代，同时还能保持高质量，可以快速的发现错误，防止分支大幅偏离主干。\n\n## Jenkins\n\n### 安装配置\n\n#### 下载\n\n<http://updates.jenkins-ci.org/latest/jenkins.war>\n\n#### 运行\n\n两种运行方式：一种是基于tomcat、Jdk启动，一种是基于Docker启动\n\n基本的java启动jenkins:\n\n```csharp\nstring a = &quot;test&quot;;\nstring tmp = &quot;est&quot;;\nstring b = &quot;t&quot; + tmp;\nConsole.WriteLine(string .ReferenceEquals(str1, str2));\n\n```\n\njenkins启动默认8080端口\n\n* * *\n\n关闭终端也不挂起：\n\n```csharp\nstring a = &quot;test&quot;;\nstring tmp = &quot;est&quot;;\nstring b = &quot;t&quot; + tmp;\nConsole.WriteLine(string .ReferenceEquals(str1, str2));\n\n```\n\n> nohup 英文全称 no hang up（不挂起），用于在系统后台不挂断地运行命令，退出终端不会影响程序的运行。\n>  nohup 命令，在默认情况下（非重定向时），会输出一个名叫 nohup.out 的文件到当前目录下，如果当前目录的 nohup.out 文件不可写，输出重定向到 $HOME/nohup.out 文件中。\n>  via. <https://www.runoob.com/linux/linux-comm-nohup.html>\n\n* * *\n\nStart Jenkins and Installing Jenkins as a Windows service\n<https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins+as+a+Windows+service>\n\n* * *\n\nUse the Jenkins Windows installer\n\n> That program will install Jenkins as a service using a 64 bit JVM chosen by the user. Keep in mind that to run Jenkins as a service, the account that runs Jenkins must have permission to login as a service.\n\n<https://www.jenkins.io/doc/book/installing/windows/>\n\n* * *\n\n基于Tomcat启动：<https://www.cnblogs.com/jimmyshan-study/p/11982415.html>\n将jenkins.war放到Tomcat\\webapps目录下，当启动tomcat的时候，Jenkins会随着服务器一起启动 ；\n\n## Pipeline\n\npipeline 是一个Jenkins插件\n作用：作用：将独立运行于单个或者多个（节点的）任务连接起来，实现\n单个任务难以完成的复杂流程编排与可视化。\n\n### Jenkinsfile\n\nJenkinsfile是Jenkins2.x核心特性Pipeline的脚本，由Groovy语言实现。\n\n内部记录的内容是一套Jenkins 执行的流程，支持并行执行，Jenkinsfile 文件一般存放于代码仓库的根目录，即使Jenkins 需要重装或者安装Jenkins 的机器出了问题，Jenkinsfile 所记录的流程也可以很迅速的重新部署。\n\nJenkinsfile 有2 种写法\n\n  * Declarative 通常Declarative 的写法可以满足大部分场景的需要，相对来说学习成本更低\n\n  * Groovy 写法更灵活，比如Jenkins 的Shared Library 模式就需要用到Groovy\n\n### 语法\n\n#### agent 分配节点\n\nany 在任何可用的节点上执行Pipeline， 默认master\nnone 没有分配，子stage当中分配\nlabel 指定节点\n\n#### stage\n\n一旦某个stage执行失败，所有的stage都会停止。post语句照常执行\n\n#### post\n\n和stages平级，构建状态的，预设的语句块\n数据清理、发送邮件等\n\n  * always: 不管构建状态怎么样，始终会运行\n\n  * aborted { … } 当构建状态“中止”时运行（手动强行x掉）\n\n  * success { … } 如果构建状态为“成功”或尚未设置，则运行\n\n  * failure { … } 如果构建状态为“失败”，则运行\n\n#### parameters\n\n全局唯一，定义参数，在BuildWithParameters选项卡当中设置参数值。\n\n文本参数支持换行\n\n```csharp\nstring a = &quot;test&quot;;\nstring tmp = &quot;est&quot;;\nstring b = &quot;t&quot; + tmp;\nConsole.WriteLine(string .ReferenceEquals(str1, str2));\n\n```\n\n#### options\n\n指令允许从流水线内部配置特定于流水线的选项，全局唯一\n\n  * disableConcurrentBuilds() 禁止并发\n\n  * timestamps() 打印时间戳\n\n  * timeout(time:5, unit:’SECONDS’)\n\n> timeout(5) == timeout(time:5, unit:’MINUTES’)\n>  timeout(activity:true, time:5, unit:’SECONDS’)\n>  activity: 此块的日志中没有活动之后的超时，而不是绝对持续时间。\n\n#### environment\n\nenvironment 指令制定一个 键-值对序列，该序列将被定义为所有步\n骤的环境变量，或者是特定于阶段的步骤， 这取决于 environment\n指令在流水线内的位置。\n\n### 使用步骤\n\n  1. 新建流水线\n\n  2. 写Pipeline脚本\n\n> Pipeline脚本书写位置\n>\n>   * 在pipeline 的配置界面中，写下pipeline语法\n>\n>   * 仓库中的Jenkinsfile 文件（一般放在根目录中）\n>\n>\n\n>\n> 将脚本写在码云或Github上的Jenkinsfile中\n\n选择 Pipeline script from SCM, 填写仓库地址，\n\n  3. 点击立即构建，就会执行pipeline\n\n> Jenkins执行的步骤\n>  在给定的代码仓库中检出jenkinsfile文件，读取文件并执行\n>  有+号的行，代标要执行的语句\n\n### 其他操作\n\n启动Jenkins\njava -jar jenkins.war 启动jenkins服务器\n\n重启Jenkins\n<http://localhost:8080/restart>\n\n重载Jenkins配置信息\n<http://localhost:8080/reload>\n\n停止Jenkins服务器\n方法1： Terminal and Kill Process\n`bash\n$ps -e | grep jenkins\n56 ?? 1:22.88 /usr/bin/java -Dfile.encoding=UTF-8 -XX:PermSize=256m -XX:MaxPermSize=512m -Xms256m -Xmx512m -Djava.io.tmpdir=/Users/[redacted-user]/Jenkins/tmp -jar /Applications/Jenkins/jenkins.war --httpPort=8080\n4981 ttys001 0:00.00 grep jenkins\n$sudo kill 56\n`\n方法2：通过URL\n<http://localhost:8080/exit>\n\n### 遇到的坑\n\n  1. 找不到sh、nopub等命令\n\n在本地环境变量中配置git程序的地址\n重启jenkins，才能更新配置信息。\n\n### 时间配置\n\nJenkins采用了著名的UNIX任务调度工具CRON所使用的配置方式。用5个字段代表5个不同的时间单位（中间用空格隔开）：\n\n分 时 日 月 星期几\n\n实例1：每1分钟执行一次myCommand\n\n  *     *       *         *           * myCommand\n实例2：每小时的第3和第15分钟执行\n3,15 * * * * myCommand\n实例3：在上午8点到11点的第3和第15分钟执行\n3,15 8-11 * * * myCommand\n实例4：每隔两天的上午8点到11点的第3和第15分钟执行\n3,15 8-11 _/2_ * myCommand\n实例5：每周一上午8点到11点的第3和第15分钟执行\n3,15 8-11 * * 1 myCommand\n实例6：每晚的21:30重启smb\n30 21 * * * /etc/init.d/smb restart\n实例7：每月1、10、22日的4 : 45重启smb\n45 4 1,10,22 * * /etc/init.d/smb restart\n实例8：每周六、周日的1 : 10重启smb\n10 1 * * 6,0 /etc/init.d/smb restart\n实例9：每天18 : 00至23 : 00之间每隔30分钟重启smb\n0,30 18-23 * * * /etc/init.d/smb restart\n实例10：每星期六的晚上11 : 00 pm重启smb\n0 23 * * 6 /etc/init.d/smb restart\n实例11：每一小时重启smb\n\n  * _/1_ * * /etc/init.d/smb restart\n实例12：晚上11点到早上7点之间，每隔一小时重启smb\n0 23-7 * * * /etc/init.d/smb restart\n\n### 脚本示例\n\n```csharp\nstring a = &quot;test&quot;;\nstring tmp = &quot;est&quot;;\nstring b = &quot;t&quot; + tmp;\nConsole.WriteLine(string .ReferenceEquals(str1, str2));\n\n```\n\n## Ref\n\n<https://www.jianshu.com/p/f8d81680a7cf>\n"
}
