Jenkins
2021-11-23 17:36:41 2 举报
AI智能生成
Jenkins
作者其他创作
大纲/内容
Jenkins 是什么?
Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。
Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。
安装Jenkins
Jenkins通常作为一个独立的应用程序在其自己的流程中运行, 内置Java servlet 容器/应用程序服务器(Jetty)。<br><br>Jenkins也可以运行在不同的Java servlet容器中作为servlet运行.
安装平台
Docker
安装Docker
在Docker中下载并运行Jenkins
建议使用的Docker映像是<font color="#f44336">jenkinsci/blueocean</font><font color="#000000">, 该镜像捆</font>绑了所有Blue Ocean插件和功能
在macOS和Linux上
打开一个终端窗口。
下载 jenkinsci/blueocean 镜像并使用以下docker run 命令将其作为Docker中的容器运行 :<br><br><font color="#1976d2">docker run \<br> -u root \<br> --rm \<br> -d \<br> -p 8080:8080 \<br> -p 50000:50000 \<br> -v jenkins-data:/var/jenkins_home \<br> -v /var/run/docker.sock:/var/run/docker.sock \<br> jenkinsci/blueocean<br><br></font>可选参数:--env JAVA_OPTS=-Dhudson.model.DownloadService.noSignatureCheck=true
--rm 关闭时自动删除Docker容器
-d 在后台运行容器(即“分离”模式)并输出容器ID
-p 容器与宿主机间的端口映射
-v 容器中的jenkins目录映射到计算机本地文件系统上的目录
-v /var/run/docker.sock:/var/run/docker.sock <br><br>jenkinsci/blueocean 容器与Docker守护进程通信, 如果 jenkinsci/blueocean 容器需要实例化其他Docker容器,则该守护进程是必需的。 <br>如果运行声明式管道,其语法包含agent部分用 docker,例如, agent { docker { ... } }<br>
在Windows上
打开命令提示符窗口。
<font color="#000000">下载 jenkinsci/blueocean 镜像并使用以下 docker run 命令将其作为Docker中的容器运行 :</font><br><br>docker run ^<br> -u root ^<br> --rm ^<br> -d ^<br> -p 8080:8080 ^<br> -p 50000:50000 ^<br> -v jenkins-data:/var/jenkins_home ^<br> -v /var/run/docker.sock:/var/run/docker.sock ^<br> jenkinsci/blueocean<br>
访问Jenkins / Blue Ocean Docker容器
docker exec -it jenkins-blueocean bash
通过Docker日志访问Jenkins控制台日志
docker logs <docker-container-name>
WAR文件
将最新的稳定Jenkins WAR包 下载到您计算机上的相应目录。
在下载的目录内打开一个终端/命令提示符窗口到。
运行命令java -jar jenkins.war<br>可选参数:-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。<br><br>对Jenkins 流水线的定义被写在一个文本文件中 (成为 Jenkinsfile),该文件可以被提交到项目的源代码的控制仓库。 [2] 这是"流水线即代码"的基础;<br><br>本质上,Jenkins 是一个自动化引擎,它支持许多自动模式。 流水线向Jenkins中添加了一组强大的工具, 支持用例 简单的持续集成到全面的CD流水线。<br>
流水线概念
流水线
流水线是用户定义的一个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 文件的位置(和名称)。<br>这个位置是 Jenkins 检出/克隆包括 Jenkinsfile 文件的仓库的位置,它应该与仓库的文件结构匹配。<br>该字段的默认值采取名称为 "Jenkinsfile" 的 Jenkinsfile 文件并位于仓库的根路径。<br>
Jenkinsfile
流水线支持 两种语法:声明式(在 Pipeline 2.5 引入)和脚本式流水线。 <br>两种语法都支持构建持续交付流水线。<br>两种都可以用来在 web UI 或 Jenkinsfile 中定义流水线,不过通常认为创建一个 Jenkinsfile 并将其检入源代码控制仓库是最佳实践。<br>
创建 Jenkinsfile
构建
通常这个阶段包括源代码的组装、编译或打包。<br>Jenkinsfile 不能替代现有的构建工具,如 GNU/Make、Maven等,而应视其为一个将项目的开发生命周期的多个阶段(构建、测试、部署等)绑定在一起的粘合层。<br>
测试
运行自动化测试是任何成功的持续交付过程的重要组成部分。<br>因此,Jenkins 有许多测试记录,报告和可视化工具,这些都是由各种插件提供的。最基本的,当测试失败时,让 Jenkins 记录这些失败以供汇报以及在 web UI 中可视化是很有用的。<br>
部署
部署可以隐含许多步骤,这取决于项目或组织的要求,并且可能是从发布构建的交付件到 Artifactory 服务器,到将代码推送到生产系统的任何东西。
使用环境变量
Jenkins 流水线通过全局变量 env 提供环境变量,它在 Jenkinsfile 文件的任何地方都可以使用。
设置环境变量<br>声明式流水线支持 environment 指令,而脚本式流水线的使用者必须使用 withEnv 步骤。<br>
在流水线中使用Docker
自定义执行环境
pipeline {<br> agent {<br> docker { image 'node:7-alpine' }<br> }<br> ......<br>}<br>
流水线支持 向Docker中添加自定义的参数, 允许用户指定自定义的 Docker Volumes 装在, 这可以用于在流水线运行之间的 agent上缓存数据。<br> docker {<br> image 'maven:3-alpine'<br> <font color="#ff0000">args '-v $HOME/.m2:/root/.m2'</font><br> }<br>
使用多个容器
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` 中构建和运行容器。 <br>与使用"现成" 容器的 previous approach 不同的是 , 使用 agent { dockerfile true } 语法从 Dockerfile 中构建一个新的镜像而不是从 Docker Hub中拉取一个。<br>
定义Dockerfile文件,提交到源仓库的根目录下
agent {<br> // Equivalent to "docker build -f Dockerfile.build --build-arg version=1.0.2 ./build/<br> dockerfile {<br> filename 'Dockerfile.build'<br> dir 'build'<br> label 'my-defined-label'<br> additionalBuildArgs '--build-arg version=1.0.2'<br> }<br>}
pieline语法
主动触发其他流水线
build 'git-test'
执行windows脚本
bat 'echo "hello world"'
执行linux脚本
sh 'echo "hello world"'
拉取代码
git 'https://github.com/jenkinsci/git-plugin'<br>git branch: 'stable-2.204', url: 'https://github.com/jenkinsci/jenkins.git'<br>git credentialsId: 'my-private-key-credential-id', url: 'git@github.com:jenkinsci/git-client-plugin.git'
存档工件
archiveArtifacts artifacts: 'target/*.jar'<br>(通常,只要保留构建日志本身,Jenkins 就会为构建保留工件,但如果您不需要旧工件并且更愿意节省磁盘空间,则可以这样保存工件。)<br>
删除此作业的整个工作区
cleanWs()
递归删除当前目录及其内容
deleteDir()
更改当前目录
dir('path') {<br> // some block<br> }<br>dir块内的任何步骤都将使用此目录作为当前目录,任何相对路径都将使用它作为基本路径。<br>
打印
echo 'hello'
发出错误信号
error 'somthing wrong'<br>在特定条件下要终止程序时可以使用throw new Exception()<br>
捕获构建过程的错误, 并且可以改变构建步骤状态
catchError(buildResult: 'ABORTED', message: 'happened') {
// some block
}
检查给定文件(作为当前目录的相对路径)是否存在
fileExists 'filePath'
分支主题
0 条评论
下一页