作者 | 王奥
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 项目产生两个发行线,长期支持版本 (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项目
本规范尤其适用于较多项目共用同一Jenkins的场景
注意Jenkins备份策略,建议结合rsync备份远端
安装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核心概念
为什么要用Pipeline?
代码: Pipeline以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其CD流程。
可持续性: Jenkins重启或者中断后都不会影响Pipeline Job。
停顿: Pipeline可以选择停止并等待人工输入或批准,然后再继续Pipeline运行。
多功能: Pipeline支持现实世界的复杂CD要求,包括fork/join子进程,循环和 并行执行工作的能力。
可扩展: Pipeline插件支持其DSL的自定义扩展以及与其他插件集成的多个选项。
Pipeline和Freestyle的区别
Freestyle:
Pipeline:
Pipeline 会取代Freestyle么?
Pipeline一定会取代Build Flow插件
会,当你希望做到Pipeline as code的时候
会,当你独立运行一组Job没有特殊价值或者意义的时候
会,当你可以从Multibranch Pipeline受益的时候
会,当你希望获取类似于TravisCI风格的工作流的时候
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_HOME
中的config.xml;$JENKINS_HOME
中的config.xml;Jenkins REST API 提供了 API token,使得可以在程序中使用 API token 进行认证(而不是使用你真实的密码)。
API token 可以在用户个人设置界面查看 到用户→用户 id→设置页面,在 API Token 区域点击 Show API token 按钮,便可查看 API token,同时还可以更改 API token
相应的 URL 是 http:///user//configure
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/
作者:王奥OX 链接:https://www.jianshu.com/p/55df42bc57ec 来源:简书