
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 是开源 CI&CD 软件领导者, 提供超过 1000 个插件来支持构建、部署、自动化,满足任何项目的需要。
Jenkins 用户手册 - https://jenkins.io/zh/doc/
Jenkins 训练营之基础篇 - https://ke.qq.com/course/265167 Jenkins 训练营之带你玩转 Pipeline - https://ke.qq.com/course/252785
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 是否创建管理员账户或者跳过 Freestyle project 自由风格项目,Jenkins 最主要的项目类型
Maven Project Maven 项目专用,类似 Freestyle,更简单
Multi-configuration project 多配置项目,适合需要大量不同配置(环境,平台等)构建
Pipeline 流水线项目,适合使用 pipeline(workflow)插件功能构建流水线任务,或者使用 Freestyle project 不容易实现的复杂任务
Multibranch Pipeline 多分支流水线项目,根据 SCM 仓库中的分支创建多个 Pipeline 项目
General 项目基本配置 项目名字,描述,参数,禁用项目,并发构建,限制构建默认 node 等等
Source code Management 代码库信息,支持 Git,Subversion 等
Build Triggers 构建触发方式 周期性构建,Poll SCM,远程脚本触发构建,其他项目构建结束后触发等
Build Environment 构建环境相关设置 构建前删除 workspace,向 Console 输出添加时间戳,设置构建名称,插入环境变量等
Build 项目构建任务 添加 1 个或者多个构建步骤
Post-build Actions 构建后行为 Artifact 归档,邮件通知,发布单元测试报告,触发下游项目等等
本规范尤其适用于较多项目共用同一 Jenkins 的场景
注意 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/
安装 Timestamper 插件 系统管理-插件管理-可用插件,搜索到 timestamper 点击 Install without restart
新建一个 Freestyle 类型的 Job
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 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 和 Freestyle 的区别
Freestyle: 上游 / 下游 Job 调度,如 BuildJob ->TestJob -> DeployJob 在 DSL Job 里面调度多个子 Job(利用 Build Flow plugin)
Pipeline: 单个 Job 中完成所有的任务编排 全局视图
Pipeline 会取代 Freestyle 么?
Pipeline 脚本是由 Groovy 语言实现 无需专门学习 Groovy
Pipeline 支持两种语法 Declarative 声明式(在 Pipeline plugin 2.5 中引入) Scripted Pipeline 脚本式
如何创建基本的 Pipeline 直接在 Jenkins Web UI 网页界面中输入脚本 通过创建一个 Jenkinsfile 可以检入项目的源代码管理库
最佳实践 通常推荐在 Jenkins 中直接从源代码控制(SCM)中载入 Jenkinsfile Pipeline
pipeline { agent any stages { stage('Build') { steps { echo 'Build' } } stage('Test') { steps { echo 'Test' } } stage('Deploy') { steps { echo 'Deploy' } } } } 如果权限设置错误,或者忘记密码,导致 admin 自己都无法登陆 Jenkins 怎么办?
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/
1 mafeifan 2019-02-14 19:07:09 +08:00 via Android 点个赞,最近也在看 Jenkins。 不过中文文档不是最近的,建议直接看官方英文的。 |
2 vclin 2019-02-14 22:02:15 +08:00 mark 一下,自己在 linux 搭建了一个空格,还没填充内容 |
3 ymj123 2019-02-14 23:15:22 +08:00 via iPhone 嗯,挺好的,我用 Jenkins 挺多的。来学习一下。 |
4 li27962278 2019-02-14 23:17:40 +08:00 有用过的经历 再深入一下 |
5 zhouyang1203 2019-02-15 00:06:23 +08:00 @mafeifan 哈哈,可以考虑加入中文本地化 sig,现在正缺人手 |