🔖 Jenkins 文档
parent
5504511a1b
commit
4e7922ab70
|
@ -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) 项目中。
|
||||
|
|
|
@ -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清理策略。
|
|
@ -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/)
|
|
@ -1,112 +0,0 @@
|
|||
# Jenkins 安装
|
||||
|
||||
## 环境要求
|
||||
|
||||
* JDK:最低要求是 JDK 7,官网推荐是 JDK 8
|
||||
|
||||
## 安装
|
||||
|
||||
安装步骤如下:
|
||||
|
||||
(1)下载并解压到本地
|
||||
|
||||
进入官网下载地址:https://jenkins.io/download/ ,选择合适的版本下载。
|
||||
|
||||
我选择的是最新稳定war版本 2.89.4:http://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 |
|
@ -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
|
||||
|
||||
在 Linux,BSD 和 Mac OS(Unix-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.
Loading…
Reference in New Issue