乐趣区

Jenkins 学习使用实践

前言
Jenkins 就不用做多余的介绍了,作为 CI/CD 首选的开源解决方案,持续集成 (Continous Intergration)/ 持续交付 (Continous Delievery),本文只是用于记录使用 Jenkins 的一些基本操作,Jenkins 官方文档也率先支持中文,相信对大家的学习热情会有积极地促进作用。
Jenkins 学习使用实践
更新历史
2019 年 02 月 12 日 – 初稿
阅读原文 – https://wsgzao.github.io/post…
扩展阅读
Jenkins – https://jenkins.io/zh/

Jenkins 简介
构建伟大,无所不能
Jenkins 是开源 CI&CD 软件领导者,提供超过 1000 个插件来支持构建、部署、自动化,满足任何项目的需要。
Jenkins 用户手册 – https://jenkins.io/zh/doc/
Jenkins 训练营之基础篇 – https://ke.qq.com/course/265167Jenkins 训练营之带你玩转 Pipeline – https://ke.qq.com/course/252785
https://ke.qq.com/webcourse/i…
https://ke.qq.com/webcourse/i…
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/0…
创建第一个 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

新建 Job: Jenkins -> 新建 -> 输入 Job 名称:“My-first-pipeline-demo”-> 选择 Pipeline -> 点击 “OK”
配置: 在 Pipeline -> Script 文本输入框中输入下列语句,点击”保存”
立即构建

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> 元素的内容删掉;
命令行启动 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://&lt;JENKINS_URL>/user/<userid>/configure
Manage Jenkins jobs by using Jenkins REST API
jenkins_job_facts – Get facts about Jenkins jobshttps://docs.ansible.com/ansi…
jenkins_job – Manage jenkins jobshttps://docs.ansible.com/ansi…
# 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/

退出移动版