Jenkins
2021-11-23 17:36:41 2 举报
AI智能生成
Jenkins
作者其他创作
大纲/内容
Jenkins 是什么?
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
安装Jenkins
Jenkins通常作为一个独立的应用程序在其自己的流程中运行, 内置Java servlet 容器/应用程序服务器(Jetty)。
Jenkins也可以运行在不同的Java servlet容器中作为servlet运行.
Jenkins也可以运行在不同的Java servlet容器中作为servlet运行.
安装平台
Docker
安装Docker
在Docker中下载并运行Jenkins
建议使用的Docker映像是jenkinsci/blueocean, 该镜像捆绑了所有Blue Ocean插件和功能
在macOS和Linux上
打开一个终端窗口。
下载 jenkinsci/blueocean 镜像并使用以下docker run 命令将其作为Docker中的容器运行 :
docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
可选参数:--env JAVA_OPTS=-Dhudson.model.DownloadService.noSignatureCheck=true
docker run \
-u root \
--rm \
-d \
-p 8080:8080 \
-p 50000:50000 \
-v jenkins-data:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
jenkinsci/blueocean
可选参数:--env JAVA_OPTS=-Dhudson.model.DownloadService.noSignatureCheck=true
--rm 关闭时自动删除Docker容器
-d 在后台运行容器(即“分离”模式)并输出容器ID
-p 容器与宿主机间的端口映射
-v 容器中的jenkins目录映射到计算机本地文件系统上的目录
-v /var/run/docker.sock:/var/run/docker.sock
jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化其他Docker容器,则该守护进程是必需的。
如果运行声明式管道,其语法包含agent部分用 docker,例如, agent { docker { ... } }
jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化其他Docker容器,则该守护进程是必需的。
如果运行声明式管道,其语法包含agent部分用 docker,例如, agent { docker { ... } }
在Windows上
打开命令提示符窗口。
下载 jenkinsci/blueocean 镜像并使用以下 docker run 命令将其作为Docker中的容器运行 :
docker run ^
-u root ^
--rm ^
-d ^
-p 8080:8080 ^
-p 50000:50000 ^
-v jenkins-data:/var/jenkins_home ^
-v /var/run/docker.sock:/var/run/docker.sock ^
jenkinsci/blueocean
docker run ^
-u root ^
--rm ^
-d ^
-p 8080:8080 ^
-p 50000:50000 ^
-v jenkins-data:/var/jenkins_home ^
-v /var/run/docker.sock:/var/run/docker.sock ^
jenkinsci/blueocean
访问Jenkins / Blue Ocean Docker容器
docker exec -it jenkins-blueocean bash
通过Docker日志访问Jenkins控制台日志
docker logs <docker-container-name>
WAR文件
将最新的稳定Jenkins WAR包 下载到您计算机上的相应目录。
在下载的目录内打开一个终端/命令提示符窗口到。
运行命令java -jar jenkins.war
可选参数:-Dhudson.model.DownloadService.noSignatureCheck=true
可选参数:-Dhudson.model.DownloadService.noSignatureCheck=true
浏览http://localhost:8080并等到*Unlock Jenkins*页面出现。
通过 Manage Jenkins > Manage Plugins安装Blue Ocean
Mac Os
brew install jenkins
Linux
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
安装后设置向导
解锁 Jenkins
浏览到 http://localhost:8080(或安装时为Jenkins配置的任何端口),并等待 解锁 Jenkins 页面出现。
从Jenkins控制台日志输出中,复制自动生成的字母数字密码(在两组星号之间)。
在 解锁Jenkins 页面上,将此 密码 粘贴到管理员密码字段中,然后单击 继续 。
自定义jenkins插件
先安装建议的插件 - 安装推荐的一组插件,这些插件基于最常见的用例.
也可以通过Jenkins中的Manage Jenkins > Manage Plugins 页面在稍后的时间点安装(或删除)其他Jenkins插件
创建第一个管理员用户
admin/123456
流水线Pieline
Jenkins 流水线 (或简单的带有大写"P"的"Pipeline") 是一套插件,它支持实现和集成 continuous delivery pipelines 到Jenkins。
对Jenkins 流水线的定义被写在一个文本文件中 (成为 Jenkinsfile),该文件可以被提交到项目的源代码的控制仓库。 [2] 这是"流水线即代码"的基础;
本质上,Jenkins 是一个自动化引擎,它支持许多自动模式。 流水线向Jenkins中添加了一组强大的工具, 支持用例 简单的持续集成到全面的CD流水线。
对Jenkins 流水线的定义被写在一个文本文件中 (成为 Jenkinsfile),该文件可以被提交到项目的源代码的控制仓库。 [2] 这是"流水线即代码"的基础;
本质上,Jenkins 是一个自动化引擎,它支持许多自动模式。 流水线向Jenkins中添加了一组强大的工具, 支持用例 简单的持续集成到全面的CD流水线。
流水线概念
流水线
流水线是用户定义的一个CD流水线模型 。流水线的代码定义了整个的构建过程, 他通常包括构建, 测试和交付应用程序的阶段 。
节点
节点是一个机器 ,它是Jenkins环境的一部分 and is capable of执行流水线。
阶段
stage 块定义了在整个流水线的执行任务的概念性地不同的的子集(比如 "Build", "Test" 和 "Deploy" 阶段)
步骤
本质上 ,一个单一的任务, a step 告诉Jenkins 在特定的时间点要做_what_ (或过程中的 "step")。
定义流水线
通过 Blue Ocean
在 Blue Ocean 中设置一个流水线项目后,Blue Ocean UI 会帮你编写流水线的 Jenkinsfile 文件并提交到源代码管理系统。
通过经典 UI
通过经典 UI 在 Jenkins 中直接输入基本的流水线。
从Jenkins 主页(即 Jenkins 经典 UI 的工作台),点击左上的 "新建任务"。
在 输入一个任务名称字段,填写你新建的流水线项目的名称。
向下滚动并点击 "流水线",然后点击页面底部的 "确定" 打开流水线配置页
点击页面顶部的 "流水线" 选项卡让页面向下滚动到 "流水线" 部分。
在 "流水线" 部分, 确保 "定义" 字段显示 "Pipeline script" 选项。
将你的流水线代码输入到 脚本 文本区域。
点击 "保存" 打开流水线项目视图页面. 在该页面, 点击左侧的 "立即构建" 运行流水线。
在左侧的 "Build History" 下面,点击 "#1" 来访问这个特定流水线运行的详细信息。
点击 "Console Output" 来查看流水线运行的全部输出。下面的输出显示你的流水线已成功运行。
在源码管理系统中(git...)
手动编写一个 Jenkinsfile 文件,然后提交到项目的源代码管理仓库中。
按照 通过经典 UI上面的步骤定义你的流水线直到第4步(在流水线配置页面访问流水线部分)。
从 定义 字段选择 Pipeline script from SCM 选项
从 SCM 字段,选择包含 Jenkinsfile 文件的仓库的源代码管理系统的类型。
填充对应仓库的源代码管理系统的字段。
在 脚本路径 字段,指定你的 Jenkinsfile 文件的位置(和名称)。
这个位置是 Jenkins 检出/克隆包括 Jenkinsfile 文件的仓库的位置,它应该与仓库的文件结构匹配。
该字段的默认值采取名称为 "Jenkinsfile" 的 Jenkinsfile 文件并位于仓库的根路径。
这个位置是 Jenkins 检出/克隆包括 Jenkinsfile 文件的仓库的位置,它应该与仓库的文件结构匹配。
该字段的默认值采取名称为 "Jenkinsfile" 的 Jenkinsfile 文件并位于仓库的根路径。
Jenkinsfile
流水线支持 两种语法:声明式(在 Pipeline 2.5 引入)和脚本式流水线。
两种语法都支持构建持续交付流水线。
两种都可以用来在 web UI 或 Jenkinsfile 中定义流水线,不过通常认为创建一个 Jenkinsfile 并将其检入源代码控制仓库是最佳实践。
两种语法都支持构建持续交付流水线。
两种都可以用来在 web UI 或 Jenkinsfile 中定义流水线,不过通常认为创建一个 Jenkinsfile 并将其检入源代码控制仓库是最佳实践。
创建 Jenkinsfile
构建
通常这个阶段包括源代码的组装、编译或打包。
Jenkinsfile 不能替代现有的构建工具,如 GNU/Make、Maven等,而应视其为一个将项目的开发生命周期的多个阶段(构建、测试、部署等)绑定在一起的粘合层。
Jenkinsfile 不能替代现有的构建工具,如 GNU/Make、Maven等,而应视其为一个将项目的开发生命周期的多个阶段(构建、测试、部署等)绑定在一起的粘合层。
测试
运行自动化测试是任何成功的持续交付过程的重要组成部分。
因此,Jenkins 有许多测试记录,报告和可视化工具,这些都是由各种插件提供的。最基本的,当测试失败时,让 Jenkins 记录这些失败以供汇报以及在 web UI 中可视化是很有用的。
因此,Jenkins 有许多测试记录,报告和可视化工具,这些都是由各种插件提供的。最基本的,当测试失败时,让 Jenkins 记录这些失败以供汇报以及在 web UI 中可视化是很有用的。
部署
部署可以隐含许多步骤,这取决于项目或组织的要求,并且可能是从发布构建的交付件到 Artifactory 服务器,到将代码推送到生产系统的任何东西。
使用环境变量
Jenkins 流水线通过全局变量 env 提供环境变量,它在 Jenkinsfile 文件的任何地方都可以使用。
设置环境变量
声明式流水线支持 environment 指令,而脚本式流水线的使用者必须使用 withEnv 步骤。
声明式流水线支持 environment 指令,而脚本式流水线的使用者必须使用 withEnv 步骤。
在流水线中使用Docker
自定义执行环境
pipeline {
agent {
docker { image 'node:7-alpine' }
}
......
}
agent {
docker { image 'node:7-alpine' }
}
......
}
流水线支持 向Docker中添加自定义的参数, 允许用户指定自定义的 Docker Volumes 装在, 这可以用于在流水线运行之间的 agent上缓存数据。
docker {
image 'maven:3-alpine'
args '-v $HOME/.m2:/root/.m2'
}
docker {
image 'maven:3-alpine'
args '-v $HOME/.m2:/root/.m2'
}
使用多个容器
pipeline {
agent none
stages {
stage('Back-end') {
agent {
docker { image 'maven:3-alpine' }
}
steps {
sh 'mvn --version'
}
}
stage('Front-end') {
agent {
docker { image 'node:7-alpine' }
}
steps {
sh 'node --version'
}
}
}
}
使用Dockerfile
流水线支持从源仓库的`Dockerfile` 中构建和运行容器。
与使用"现成" 容器的 previous approach 不同的是 , 使用 agent { dockerfile true } 语法从 Dockerfile 中构建一个新的镜像而不是从 Docker Hub中拉取一个。
与使用"现成" 容器的 previous approach 不同的是 , 使用 agent { dockerfile true } 语法从 Dockerfile 中构建一个新的镜像而不是从 Docker Hub中拉取一个。
定义Dockerfile文件,提交到源仓库的根目录下
agent {
// Equivalent to "docker build -f Dockerfile.build --build-arg version=1.0.2 ./build/
dockerfile {
filename 'Dockerfile.build'
dir 'build'
label 'my-defined-label'
additionalBuildArgs '--build-arg version=1.0.2'
}
}
// Equivalent to "docker build -f Dockerfile.build --build-arg version=1.0.2 ./build/
dockerfile {
filename 'Dockerfile.build'
dir 'build'
label 'my-defined-label'
additionalBuildArgs '--build-arg version=1.0.2'
}
}
pieline语法
主动触发其他流水线
build 'git-test'
执行windows脚本
bat 'echo "hello world"'
执行linux脚本
sh 'echo "hello world"'
拉取代码
git 'https://github.com/jenkinsci/git-plugin'
git branch: 'stable-2.204', url: 'https://github.com/jenkinsci/jenkins.git'
git credentialsId: 'my-private-key-credential-id', url: 'git@github.com:jenkinsci/git-client-plugin.git'
git branch: 'stable-2.204', url: 'https://github.com/jenkinsci/jenkins.git'
git credentialsId: 'my-private-key-credential-id', url: 'git@github.com:jenkinsci/git-client-plugin.git'
存档工件
archiveArtifacts artifacts: 'target/*.jar'
(通常,只要保留构建日志本身,Jenkins 就会为构建保留工件,但如果您不需要旧工件并且更愿意节省磁盘空间,则可以这样保存工件。)
(通常,只要保留构建日志本身,Jenkins 就会为构建保留工件,但如果您不需要旧工件并且更愿意节省磁盘空间,则可以这样保存工件。)
删除此作业的整个工作区
cleanWs()
递归删除当前目录及其内容
deleteDir()
更改当前目录
dir('path') {
// some block
}
dir块内的任何步骤都将使用此目录作为当前目录,任何相对路径都将使用它作为基本路径。
// some block
}
dir块内的任何步骤都将使用此目录作为当前目录,任何相对路径都将使用它作为基本路径。
打印
echo 'hello'
发出错误信号
error 'somthing wrong'
在特定条件下要终止程序时可以使用throw new Exception()
在特定条件下要终止程序时可以使用throw new Exception()
捕获构建过程的错误, 并且可以改变构建步骤状态
catchError(buildResult: 'ABORTED', message: 'happened') {
// some block
}
检查给定文件(作为当前目录的相对路径)是否存在
fileExists 'filePath'
分支主题
0 条评论
下一页