🔖 Jenkins 文档

This commit is contained in:
Zhang Peng 2018-03-26 11:12:13 +08:00
parent 5504511a1b
commit 4e7922ab70
7 changed files with 1 additions and 513 deletions

View File

@ -1,19 +1,3 @@
# Jenkins
## 知识大纲
* [Jenkins 介绍](jenkins-quickstart.md)
* 快速指南(quickstart)
* 基础篇basics
* 环境environment
* [Jenkins 安装](basics/jenkins-installation.md)
* 配置configuration
* 进阶篇advanced
* 设计design
* 实践篇practice
* 常见问题faq
* 附录appendix
* 命令command
* [Jenkins 资源](appendix/jenkins-resource.md)
* [Jenkins 术语](appendix/jenkins-glossary.md)
* 技巧recipe
> Jenkins 全部整理归纳在 [**jenkins**](https://github.com/dunwu/jenkins) 项目中。

View File

@ -1,113 +0,0 @@
# Jenkins 术语
## 专业术语
### 持续集成
即 Continuous Integration (CI)。持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。
### 持续交付
即 Continuous Delivery (CD)。持续交付在持续集成的基础上将集成后的代码部署到更贴近真实运行环境的「类生产环境」production-like environments中。比如我们完成单元测试后可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。
### 持续部署
即 Continuous Deployment。持续部署则是在持续交付的基础上把部署到生产环境的过程自动化。
## 一般条款
### Agent
Agent通常是一个机器或容器它连接到Jenkins主机并在主控器指导时执行任务。
### Artifact
在Build或Pipeline 运行期间生成的不可变文件该文件归档到Jenkins Master上以供用户随后检索。
### Build
项目 单次执行的结果
### Cloud
提供动态代理 配置和分配的系统配置例如由Azure VM Agents 或 Amazon EC2插件提供的配置和分配 。
### Core
主要的Jenkins应用程序jenkins.war提供了 可以构建Plugins的基本Web UI配置和基础。
### Downstream
配置Pipeline或项目时被触发作为一个单独的Pipeline或项目的执行的一部分。
### Executor
用于执行由节点上的Pipeline或项目定义的工作的插槽。节点可以具有零个或多个配置的执行器其对应于在该节点上能够执行多少并发项目或Pipeline。
### Fingerprint
考虑全局唯一性的哈希追踪跨多个Pipeline或项目的工件或其他实体的使用。
### Folder
类似于文件系统上的文件夹的Pipeline和/或项目的组织容器。
### Item
Web UI中的实体对应于Folder, Pipeline, or Project.
### Job
一个不推荐的术语,与项目同义。
### Label
用于分组代理的用户定义的文本通常具有类似的功能或功能。例如linux对于基于Linux的代理或 docker适用于支持Docker的代理。
### Master
存储配置加载插件以及为Jenkins呈现各种用户界面的中央协调过程。
### Node
作为Jenkins环境的一部分并能够执行Pipeline或项目的机器。无论是the Master还是Agents都被认为是Nodes。
### Project
用户配置的Jenkins应该执行的工作描述如构建软件等。
### Pipeline
用户定义的连续输送Pipeline模型以便更多阅读本手册中的“ Pipeline”一章。
### Plugin
与Jenkins Core分开提供的Jenkins功能扩展。
### Publisher
完成发布报告,发送通知等的所有配置步骤后的构建的一部分。
### Stage
stage是Pipeline的一部分用于定义整个Pipeline的概念上不同的子集例如“构建”“测试”和“部署”许多插件用于可视化或呈现Jenkins Pipeline状态/进度。
### Step
单一任务从根本上讲指的是Jenkins 在Pipeline或项目中做了什么。
### Trigger
触发新Pipeline运行或构建的标准。
### Update Center
托管插件和插件元数据的库存以便在Jenkins内部进行插件安装。
### Upstream
配置的Pipeline或项目其触发单独的Pipeline或项目作为其执行的一部分。
### Workspace
Noede文件系统上的一次性目录 可以由Pipeline或项目完成工作。在Build或 Pipeline运行完成后工作区通常会保留原样除非在Jenkins Master上已经设置了特定的Workspace清理策略。

View File

@ -1,9 +0,0 @@
# Jenkins 资源
* [Jenkins Github](https://github.com/kohsuke/jenkins)
* [Jenkins 官网](https://jenkins.io/)
* [Jenkins 教程](https://www.w3cschool.cn/jenkins/)
## 文章
* [The Product Managers Guide to Continuous Delivery and DevOps](https://www.mindtheproduct.com/2016/02/what-the-hell-are-ci-cd-and-devops-a-cheatsheet-for-the-rest-of-us/)

View File

@ -1,112 +0,0 @@
# Jenkins 安装
## 环境要求
* JDK最低要求是 JDK 7官网推荐是 JDK 8
## 安装
安装步骤如下:
1下载并解压到本地
进入官网下载地址https://jenkins.io/download/ ,选择合适的版本下载。
我选择的是最新稳定war版本 2.89.4http://mirrors.jenkins.io/war-stable/latest/jenkins.war
我个人喜欢存放在:`/opt/software/jenkins`
```
mkdir -p /opt/software/jenkins
wget -O /opt/software/jenkins/jenkins.war http://mirrors.jenkins.io/war-stable/latest/jenkins.war
```
## 启动
如果你和我一样,选择 war 版本,那么你可以将 war 移到 Tomcat 的 webapps 目录下,通过 Tomcat 来启动。
当然,也可以通过 `java -jar` 方式来启动。
**启动 jenkins 服务**
```
cd /opt/software/jenkins
nohup java -jar jenkins.war --httpPort=8080 >> nohup.out 2>&1 &
```
## 脚本
| [安装脚本](https://github.com/dunwu/linux/tree/master/codes/deploy/tool/jenkins) |
## FAQ
### 登录密码
如果不知道初始登录密码,可以通过以下方式查看:
执行命令 `cat /root/.jenkins/secrets/initialAdminPassword`,打印出来的即是初始登录密码。
### 忘记密码
1.执行 `vim /root/.jenkins/config.xml` ,删除以下内容
```xml
<useSecurity>true</useSecurity>
<authorizationStrategy class="hudson.security.FullControlOnceLoggedInAuthorizationStrategy">
<denyAnonymousReadAccess>true</denyAnonymousReadAccess>
</authorizationStrategy>
<securityRealm class="hudson.security.HudsonPrivateSecurityRealm">
<disableSignup>true</disableSignup>
<enableCaptcha>false</enableCaptcha>
</securityRealm>
```
2.重启Jenkins服务
3.进入首页>“系统管理”>“Configure Global Security”
4.勾选“启用安全”;
5.点选“Jenkins专有用户数据库”并点击“保存”
6.重新点击首页>“系统管理”,发现此时出现“管理用户”;
7.点击进入展示“用户列表”;
8.点击右侧进入修改密码页面,修改后即可重新登录。
### 卡在 check 页面
**现象**:输入密码后,卡在 check 页面
![jenkins-checking.png](../jenkins-checking.png)
**原因**jenkins 在安装插件前总是尝试连接 www.google.com来判断网络是否连通。谷歌的网站在大陆是连不上的所以会出现这个问题。
**解决方案**:执行`vim /root/.jenkins/updates/default.json`,将 `connectionCheckUrl` 后的 `www.google.com` 改为 `www.baidu.com` 。然后重启即可。
或者直接执行命令:
```sh
sed -i 's/www.google.com/www.baidu.com/g' /root/.jenkins/updates/default.json
```
### 卡在 getting startted 页面
**现象**:卡在 getting startted 页面
**原因**jenkins 默认的插件下载服务器地址在国外,如果不翻墙下载不了。
**解决方案**:执行`vim /root/.jenkins/hudson.model.UpdateCenter.xml`,将 `<url>` 改为 `http://mirror.xmission.com/jenkins/updates/update-center.json` 。然后重启即可。
或者直接执行命令:
```sh
sed -i '/^<url>/s/.*/<url>http:\/\/mirror.xmission.com\/jenkins\/updates\/update-center.json<\/url>/g' /root/.jenkins/hudson.model.UpdateCenter.xml
```
## 资料
* https://jenkins.io/doc/pipeline/tour/getting-started/
* https://www.cnblogs.com/austinspark-jessylu/p/6894944.html
* http://blog.csdn.net/jlminghui/article/details/54952148

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,262 +0,0 @@
<!-- TOC -->
- [Jenkins 快速指南](#jenkins-%E5%BF%AB%E9%80%9F%E6%8C%87%E5%8D%97)
- [概念](#%E6%A6%82%E5%BF%B5)
- [Pipeline](#pipeline)
- [Jenkinsfile](#jenkinsfile)
- [创建 Pipeline](#%E5%88%9B%E5%BB%BA-pipeline)
- [Jenkinsfile 简单实例](#jenkinsfile-%E7%AE%80%E5%8D%95%E5%AE%9E%E4%BE%8B)
- [运行多步骤](#%E8%BF%90%E8%A1%8C%E5%A4%9A%E6%AD%A5%E9%AA%A4)
- [简单实例](#%E7%AE%80%E5%8D%95%E5%AE%9E%E4%BE%8B)
- [Linux, BSD, and Mac OS](#linux-bsd-and-mac-os)
- [Windows](#windows)
- [Timeouts, retries and more](#timeouts-retries-and-more)
- [整理](#%E6%95%B4%E7%90%86)
- [定义执行环境](#%E5%AE%9A%E4%B9%89%E6%89%A7%E8%A1%8C%E7%8E%AF%E5%A2%83)
<!-- /TOC -->
# Jenkins 快速指南
## 概念
### Pipeline
[Pipeline](https://jenkins.io/doc/book/pipeline/) 是一套插件,用来支持在 Jenkins 中实现和集成持续交付通道。
持续交付渠道是您从软件版本控制到用户和客户流程的自动化表达。
Pipeline 提供了一组可扩展的工具,通过 [Pipeline DSL](https://jenkins.io/doc/book/pipeline/syntax) 将“简单到复杂”的交付管道“作为代码”建模。
### Jenkinsfile
Jenkins Pipeline 的定义通常写入一个文本文件,称为 Jenkinsfile该文件又被检入到项目的源代码控制库中。
## 创建 Pipeline
1. 在代码仓库中创建 `Jenkinsfile`,内容参考 [Jenkinsfile 简单实例](#jenkinsfile-%E7%AE%80%E5%8D%95%E5%AE%9E%E4%BE%8B)。
2. 点击 Jenkins 菜单中的**新建New Item**按钮。
3. 输入一个任务名称并选择 **Multibranch Pipeline**
4. 点击**增加源Add Source**按钮,选择代码仓库类型。
5. 点击**保存Save**按钮,然后观察第一个 Pipeline 运行。
### Jenkinsfile 简单实例
**Java**
```
pipeline {
agent { docker { image 'maven:3.3.3' } }
stages {
stage('build') {
steps {
sh 'mvn --version'
}
}
}
}
```
**Node.js / JavaScript**
```
pipeline {
agent { docker { image 'node:6.3' } }
stages {
stage('build') {
steps {
sh 'npm --version'
}
}
}
}
```
**Ruby**
```
pipeline {
agent { docker { image 'ruby' } }
stages {
stage('build') {
steps {
sh 'ruby --version'
}
}
}
}
```
**Python**
```
pipeline {
agent { docker { image 'python:3.5.1' } }
stages {
stage('build') {
steps {
sh 'python --version'
}
}
}
}
```
**PHP**
```
pipeline {
agent { docker { image 'php' } }
stages {
stage('build') {
steps {
sh 'php --version'
}
}
}
}
```
## 运行多步骤
Pipelines 由多个步骤组成允许您构建、测试和部署应用程序。Jenkins Pipeline 允许您以简单的方式撰写多个步骤,可以帮助您对任何类型的自动化过程建模。
想象一个“步骤”就像执行单个动作的单个命令一样。当一个步骤成功时它将转到下一步。当一个步骤未能正确执行时Pipeline 将失败。
当 Pipeline 中的所有步骤都成功完成, Pipeline 就被视作执行成功。
### 简单实例
#### Linux, BSD, and Mac OS
在 LinuxBSD 和 Mac OSUnix-like系统中`sh` 步骤用于在管道中执行 shell 命令。
```
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo "Hello World"'
sh '''
echo "Multiline shell steps works too"
ls -lah
'''
}
}
}
}
```
#### Windows
基于 Windows 的系统应该使用 `bat` 步骤来执行批处理命令。
```
pipeline {
agent any
stages {
stage('Build') {
steps {
bat 'set'
}
}
}
}
```
#### Timeouts, retries and more
有一些有用的步骤可以“包装”其他步骤,这些步骤可以轻松解决复杂问题,例如重试(`retry`)步骤直至成功或退出步骤需要很长时间(`timeout`)。
```
pipeline {
agent any
stages {
stage('Deploy') {
steps {
retry(3) {
sh './flakey-deploy.sh'
}
timeout(time: 3, unit: 'MINUTES') {
sh './health-check.sh'
}
}
}
}
}
```
`Deploy` 阶段重试 flakey-deploy.sh 脚本 3 次,然后等待最多 3 分钟执行 health-check.sh 脚本。如果运行状况检查脚本在 3 分钟内未完成,管道将在“部署”阶段被标记为失败。
子步骤(如 `retry``timeout`)可能包含其他步骤,包括 `retry``timeout`
我们可以组合这些步骤。例如,如果我们想重试我们的部署 5 次但从未想过总共花费超过3分钟然后才能进入阶段
```
pipeline {
agent any
stages {
stage('Deploy') {
steps {
timeout(time: 3, unit: 'MINUTES') {
retry(5) {
sh './flakey-deploy.sh'
}
}
}
}
}
}
```
#### 整理
当管道完成执行时,您可能需要运行清理步骤或根据管道的结果执行一些操作。这些操作可以在 post 部分中执行。
```
pipeline {
agent any
stages {
stage('Test') {
steps {
sh 'echo "Fail!"; exit 1'
}
}
}
post {
always {
echo 'This will always run'
}
success {
echo 'This will run only if successful'
}
failure {
echo 'This will run only if failed'
}
unstable {
echo 'This will run only if the run was marked as unstable'
}
changed {
echo 'This will run only if the state of the Pipeline has changed'
echo 'For example, if the Pipeline was previously failing but is now successful'
}
}
}
```
## 定义执行环境
在上一节中,您可能已经注意到每个示例中的 agent 指令。agent 指令告诉 Jenkins 在哪里以及如何执行 Pipeline 或其子集。正如您所预料的那样,所有 Pipeline 都需要 `agent`
在引擎盖下面,代理原因发生了一些事情:
* 块中包含的所有步骤均由 Jenkins 排队等待执行。只要执行者可用,这些步骤就会开始执行。
* 将分配一个工作空间,该工作空间将包含从源代码管理检出的文件以及 Pipeline 的任何其他工作文件。
Pipeline 旨在轻松使用 Docker 镜像和容器在内部运行。这允许 Pipeline 定义所需的环境和工具,而无需手动配置各种系统工具和代理依赖关系。这种方法使您可以使用任何可以打包在 Docker 容器中的工具。

Binary file not shown.