首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
拉勾
V2EX  ›  程序员

Jenkins 学习使用实践

  •  
  •   wsgzao · 32 天前 · 1191 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    Jenkins 就不用做多余的介绍了,作为 CI/CD 首选的开源解决方案,持续集成 (Continous Intergration)/ 持续交付 (Continous Delievery),本文只是用于记录使用 Jenkins 的一些基本操作,Jenkins 官方文档也率先支持中文,相信对大家的学习热情会有积极地促进作用。

    Jenkins 学习使用实践

    更新历史

    2019 年 02 月 12 日 - 初稿

    阅读原文 - https://wsgzao.github.io/post/jenkins/

    扩展阅读

    Jenkins - https://jenkins.io/zh/


    Jenkins 简介

    构建伟大,无所不能

    Jenkins 是开源 CI&CD 软件领导者, 提供超过 1000 个插件来支持构建、部署、自动化,满足任何项目的需要。

    Jenkins 用户手册 - https://jenkins.io/zh/doc/

    Jenkins 训练营之基础篇 - https://ke.qq.com/course/265167 Jenkins 训练营之带你玩转 Pipeline - https://ke.qq.com/course/252785

    https://ke.qq.com/webcourse/index.html#cid=265167&term_id=100312699&taid=1794918372871119&vid=p1423f5tn3g

    https://ke.qq.com/webcourse/index.html?cw_id=91852&ac_type=3#cid=252785&term_id=100298102&taid=1707945285114737&type=1024&vid=w1422iqh9q1

    Jenkins 安装

    Jenkins 项目产生两个发行线,长期支持版本 (LTS) 和每周更新版本。 根据你的组织需求,一个可能比另一个更受欢迎。 两个版本都以 .war 文件,原生包,安装程序,和 Docker 容器的形式分发。 https://jenkins.io/zh/download/

    这里推荐下载使用 LTS 长期支持版本,以 CentOS 7 作为演示环境

    # Java 8
    yum install java
    
    # Jenkins stable version
    sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo
    sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
    yum install jenkins
    
    # start jenkins
    service jenkins start
    
    # 初始化配置向导
    http://192.168.56.103:8080/
    
    cat /var/lib/jenkins/secrets/initialAdminPassword
    5224fc83b6d84cc2be69a18c53309ea4
    
    Install suggested plugins
    
    是否创建管理员账户或者跳过
    
    

    Jenkins 入门

    主要的 Job 类型

    Freestyle project 自由风格项目,Jenkins 最主要的项目类型

    Maven Project Maven 项目专用,类似 Freestyle,更简单

    Multi-configuration project 多配置项目,适合需要大量不同配置(环境,平台等)构建

    Pipeline 流水线项目,适合使用 pipeline(workflow)插件功能构建流水线任务,或者使用 Freestyle project 不容易实现的复杂任务

    Multibranch Pipeline 多分支流水线项目,根据 SCM 仓库中的分支创建多个 Pipeline 项目

    Freestyle 项目

    General 项目基本配置 项目名字,描述,参数,禁用项目,并发构建,限制构建默认 node 等等

    Source code Management 代码库信息,支持 Git,Subversion 等

    Build Triggers 构建触发方式 周期性构建,Poll SCM,远程脚本触发构建,其他项目构建结束后触发等

    Build Environment 构建环境相关设置 构建前删除 workspace,向 Console 输出添加时间戳,设置构建名称,插入环境变量等

    Build 项目构建任务 添加 1 个或者多个构建步骤

    Post-build Actions 构建后行为 Artifact 归档,邮件通知,发布单元测试报告,触发下游项目等等

    规范项目必要配置

    本规范尤其适用于较多项目共用同一 Jenkins 的场景

    • 项目命名规范
    • 设置项目描述
    • 设置历史构建清理规则
    • 设置构建节点 Label
    • 邮件通知

    常用插件

    注意 Jenkins 备份策略,建议结合 rsync 备份远端

    Jenkins 定时的备份:ThinBackup 邮件发送插件: Email Extension Plugin 空间清理扩展插件: Distributed Workspace Clean plugin

    Jenkins 常用插件 – https://vwin.github.io/2019/01/07/Jenkins%E9%AB%98%E6%95%88%E6%8F%92%E4%BB%B6%E6%95%B4%E7%90%86/

    创建第一个 Job

    安装 Timestamper 插件 系统管理-插件管理-可用插件,搜索到 timestamper 点击 Install without restart

    新建一个 Freestyle 类型的 Job

    • General 项目名称: My-first-freestyle-demo
    • Build Environment 构建环境:勾选 Add timestamps to the Console Output
    • Build 构建:屏幕打印出 "这是我的第一个 Jenkins Job, oops "
    • Post-build Actions 构建后操作:无
    • 点击立刻构建
    • 找到控制台输出
    Console Output
    14:40:59 Started by user admin
    14:40:59 Building in workspace /var/lib/jenkins/workspace/My-first-freestyle-demo
    14:41:00 [My-first-freestyle-demo] $ /bin/sh -xe /tmp/jenkins3737737887278720679.sh
    14:41:00 + echo '这是我的第一个 Jenkins Job, oops '
    14:41:00 这是我的第一个 Jenkins Job, oops 
    14:41:00 Finished: SUCCESS
    
    

    Jenkins Pipeline 介绍

    Pipeline,简而言之,就是一套运行于 Jenkins 上的工作流框架,将原本独立 运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。

    Pipeline 是 Jenkins2.X 最核心的特性,帮助 Jenkins 实现从 CI 到 CD 与 DevOps 的转变

    什么是 Jenkins Pipeline?

    Jenkins Pipeline 是一组插件,让 Jenkins 可以实现持续交付管道的落地和实施。持续交付管道(CD Pipeline)是将软件从版本控制阶段到交付给用户或客户的完 整过程的自动化表现。软件的每一次更改(提交到源代码管理系统)都要经过一个复杂的过程才能被发布。

    Pipeline 提供了一组可扩展的工具,通过 Pipeline Domain Specific Language(DSL) syntax 可以达到 Pipeline as Code 的目的

    Pipeline as Code:Jenkinsfile 存储在项目的源代码库

    Jenkins Pipeline 核心概念

    Stage – 阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,例如: "Build", "Test", "Deploy" 。 – 注意,Stage 是一个逻辑分组的概念,可以跨多个 Node。

    Node – 节点,一个 Node 就是一个 Jenkins 节点,或者是 Master,或者是 Agent,是执行 Step 的具体 运行环境。

    Step – 步骤,Step 是最基本的操作单元,小到创建一个目录,大到构建一个 Docker 镜像,由各类 Jenkins Plugin 提供,例如: sh 'make'

    为什么要用 Pipeline?

    • 代码:Pipeline 以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其 CD 流程。
    • 可持续性:Jenkins 重启或者中断后都不会影响 Pipeline Job。
    • 停顿:Pipeline 可以选择停止并等待人工输入或批准,然后再继续 Pipeline 运行。
    • 多功能:Pipeline 支持现实世界的复杂 CD 要求,包括 fork/join 子进程,循环和 并行执行工作的能力。
    • 可扩展:Pipeline 插件支持其 DSL 的自定义扩展以及与其他插件集成的多个选项。

    Pipeline 和 Freestyle 的区别

    Freestyle: – 上游 / 下游 Job 调度,如 BuildJob ->TestJob -> DeployJob – 在 DSL Job 里面调度多个子 Job(利用 Build Flow plugin)

    Pipeline: – 单个 Job 中完成所有的任务编排 – 全局视图

    Pipeline 会取代 Freestyle 么?

    • Pipeline 一定会取代 Build Flow 插件
    • 会,当你希望做到 Pipeline as code 的时候
    • 会,当你独立运行一组 Job 没有特殊价值或者意义的时候
    • 会,当你可以从 Multibranch Pipeline 受益的时候
    • 会,当你希望获取类似于 TravisCI 风格的工作流的时候

    Jenkins Pipeline 入门

    Pipeline 脚本是由 Groovy 语言实现 – 无需专门学习 Groovy

    Pipeline 支持两种语法 – Declarative 声明式(在 Pipeline plugin 2.5 中引入) – Scripted Pipeline 脚本式

    如何创建基本的 Pipeline – 直接在 Jenkins Web UI 网页界面中输入脚本 – 通过创建一个 Jenkinsfile 可以检入项目的源代码管理库

    最佳实践 – 通常推荐在 Jenkins 中直接从源代码控制(SCM)中载入 Jenkinsfile Pipeline

    快速创建一个简单的 Pipeline

    1. 新建 Job: Jenkins -> 新建 -> 输入 Job 名称: “ My-first-pipeline-demo ” -> 选择 Pipeline -> 点击 "OK"
    2. 配置: 在 Pipeline -> Script 文本输入框中输入下列语句,点击 ”保存”
    3. 立即构建
    pipeline {
        agent any
        stages {
            stage('Build') {
                steps {
                    echo 'Build'
                }
            }
            stage('Test') {
                steps {
                    echo 'Test'
                }
            }
            stage('Deploy') {
                steps {
                    echo 'Deploy'
                }
            }
        }
    }
    

    Jenkins 忘记密码怎么办

    如果权限设置错误,或者忘记密码,导致 admin 自己都无法登陆 Jenkins 怎么办?

    • 命令行停止 Jenkins;
    • 先备份$JENKINS_HOME 中的 config.xml;
    • 用编辑器打开$JENKINS_HOME 中的 config.xml;
    • 将<usesecurity>true</usesecurity>元素中的 true 改为 false;
    • 将<authorizationstrategy>和<securityrealm>元素的内容删掉;</securityrealm></authorizationstrategy>
    • 命令行启动 Jenkins。

    Ansible Jenkins API Token 使用技巧

    Jenkins REST API 提供了 API token,使得可以在程序中使用 API token 进行认证(而不是使用你真实的密码)。

    API token 可以在用户个人设置界面查看 到用户→用户 id→设置页面,在 API Token 区域点击 Show API token 按钮,便可查看 API token,同时还可以更改 API token 相应的 URL 是 http://<JENKINS_URL>/user/<userid>/configure</userid>

    Manage Jenkins jobs by using Jenkins REST API

    jenkins_job_facts – Get facts about Jenkins jobs https://docs.ansible.com/ansible/latest/modules/jenkins_job_facts_module.html

    jenkins_job – Manage jenkins jobs https://docs.ansible.com/ansible/latest/modules/jenkins_job_module.html

    # python-jenkins package
    pip install python-jenkins
    
    # ansble playbook example
    ---
    - hosts: all
      gather_facts: no
    
      tasks:
        - name: Get host info
          local_action:
            module: jenkins_job_facts
            url: https://xxx
            user: xxx
            token: xxx
            glob: '*mh_kg*'
          register: my_jenkins_job_facts
    
        - debug:
            msg: "{{my_jenkins_job_facts}}"
    

    参考内容

    官方手册永远是你的最佳参考内容

    Jenkins 用户手册 - https://jenkins.io/zh/doc/

    5 回复  |  直到 2019-02-15 00:06:23 +08:00
        1
    mafeifan   32 天前 via Android
    点个赞,最近也在看 Jenkins。 不过中文文档不是最近的,建议直接看官方英文的。
        2
    vclin   32 天前
    mark 一下,自己在 linux 搭建了一个空格,还没填充内容
        3
    ymj123   32 天前 via iPhone
    嗯,挺好的,我用 Jenkins 挺多的。来学习一下。
        4
    li27962278   32 天前
    有用过的经历 再深入一下
        5
    zhouyang1203   32 天前
    @mafeifan 哈哈,可以考虑加入中文本地化 sig,现在正缺人手
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3545 人在线   最高记录 4385   ·  
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 17ms · UTC 05:30 · PVG 13:30 · LAX 22:30 · JFK 01:30
    ♥ Do have faith in what you're doing.
    沪ICP备16043287号-1