第一章 认识Jenkins
1.1 Jenkins简介
jenkins是一个自动化服务器,目前发展超过15年,比较成熟的CI根据(也可以是CD)能够实现自动化集成发布。建立好流水线后,期间无需专业运维人员介入,开发人员随时发布部署。
1.2 部署应用场景
1、集成svn/git客户端实现源代码下载检查
2、集成maven/ant/gradle/npm等构建工具实现源码编译打包单元测试
3、集成sonarqube对源代码进行质量检查
4、集成Jmeter/Soar/Kubernetes
5、可以自定义插件或者脚本通过jenkins传参运行
第二章 安装Jenkins
2.1 基于Linux系统部署(推荐)
安装依赖
sudo apt install openjdk-11-jdk
下载
wget https://mirrors.jenkins.io/debian/jenkins_2.363_all.deb
安装
dpkg -i jenkins_2.361.3_all.deb
查看启动状态
service jenkins status
查看登录密码
cat /var/lib/jenkins/secrets/initialAdminPassword
2.2 安装后配置
2.2.1 加速插件下载速度
1 页面更改为国内地址
>进入 Manage Jenkins -》 Manage Plugin -> Advanced 最下面有 Update Site,设置为:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 或者 http://mirror.xmission.com/jenkins/updates/update-center.json
![](https://devopstack.cn/wp-content/uploads/2022/11/1797195d1a72d85a4ad51b2a7aac3c68.png)
2 修改服务器配置
sed -i 's/updates.jenkins.io\/download/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' /var/lib/jenkins/updates/default.json
sed -i 's/www.google.com/www.baidu.com/g' /var/lib/jenkins/updates/default.json
2.2.2 安装中文插件
安装中文插件
设置默认语言为中文
2.2.3 邮件配置及触发报警邮件
https://devopstack.cn/devops/883.html
第三章 JenkinsPipeline
3.1 Pipeline定义
Pipeline是通过Jenkinsfile描述的流水线,安装声明式插件Pipeline:Declarative
Jenkensfile的组成:
指定node节点/workspace
指定运行选项
指定stages阶段
指定构建后操作
3.2 Pipeline语法
3.2.1 agent指定node节点/workspace
可选参数:
any表示任何可用的节点上执行pipeline
none为agent的默认值
label表示在指定节点上运行
node表示允许额外的选项
agent {
node {
label "master" // 指定运行节点的标签或名称
customWorkspace "${workspace}" // 指定运行的工作目录(可选)
}
}
3.2.2 options指定运行选项
options指令允许从流水线内部配置特定的流水线选项,也可以由插件提供:
buildDiscarder:为最近的流水线运行的特定数量保存组件和控制台输出
disableConcurrentBuilds:不允许同时执行流水线,可防止同时访问共享资源
overriderIndexTriggers:允许覆盖分支索引触发器的默认处理
timeout:设置超时时间
retry:失败后重新尝试的次数
skipStagesAfterUnstable:一旦构建状态变为UNSTABLE,就跳过该阶段
options {
timestamps() // 在日志中打印时间
skipDefaultCheckout() // 删除隐式的checkout scm 语句
disableCouncurrentBuilds() // 禁止并行
timeout(time:1, unit:'HOURS') // 流水线超时设置为1H
}
3.2.3 stages指定stages阶段
包含了一个或多个stage指令,用于连接交付过程中每个离散的部分
stages{
stage("PullCode") { // 阶段名称
steps { // 步骤
timeout(time:5, unit:'MINUTES') { // 指定步骤的超时时间
script { // 指定运行的脚本
println("获取代码")
}
}
}
}
stage("Build") { // 阶段名称
steps { // 步骤
timeout(time:20, unit:'MINUTES') { // 指定步骤的超时时间
script { // 指定运行的脚本
println("应用打包")
}
}
}
}
stage("CodeScan") { // 阶段名称
steps { // 步骤
timeout(time:30, unit:'MINUTES') { // 指定步骤的超时时间
script { // 指定运行的脚本
println("代码扫描")
}
}
}
}
}
3.2.4 post指定构建后操作
post-condition块:
always{}:总是执行
success{}:成功后执行
failure{}:失败后执行
aborted{}:取消后执行
changed{}:当流水线或阶段完成状态和之前不同时执行
unstable{}:当流水线或阶段状态为unstable时执行
post {
always {
println("总是执行")
}
success {
script {
// currentBuild是一个全局变量
// description是构建描述
currentBuild.description += "\n 构建成功!"
}
}
failure {
script {
currentBuild.description += "\n 构建失败!"
}
}
aborted {
script {
currentBuild.description += "\n 构建取消!"
}
}
}
3.2.5 enviroment环境变量
用于指定一个键值对序列,用于定义所有/特定阶段步骤的环境变量,取决于environment定义的位置。支持credentials()方法,用于通过标识符访问jenkins预定义的凭证。相当于定义一个变量,可以在后续使用
pipeline {
agent any
enviroment {
CC = 'clang'
}
stages {
stage("example") {
enviroment {
ACC_KEY = credentails("my-secret-text")
}
steps {
sh 'printenv'
}
}
}
}
3.2.6 parameter参数
为流水线运行时设置项目相关的参数
parameters {
string(name: 'DEPLOY_ENV', defaultValue: 'staging', description: '')
booleanParam(name: 'DEBUG_BUILD', defaultValue: true, descrptio: '')
}
3.2.7 trigger触发器
构建触发器:
cron计划任务定期执行构建:triggers{cron('H */4 * * 1-5')}
pollSCM与cron类型,由jenkins定期检测源码变化:triggers{pollSCM('H */4 * * 1-5')}
upstream接受都好分割的工作字符串和阈值,当字符串中任何作业以最小阈值结束时,流水线被重新触发.
triggers { upstream(upstreamProjects: 'job1,job2',threshold: hudson.model.Result.SUCCESS)}
3.2.8 input人工确认
input由人工确认是否继续进行
message:呈现给用户的提示信息
id可选默认为stage名称
ok默认表单的ok文本
submitter:可选,逗号分隔的用户列表或允许提交的外部组名,默认允许任何用户
parameter:提示提交者提供一个可选的参数列表
pipeline {
agent any
stages {
stage('SayHello') {
input {
message "Should we continue"
ok "Yes, we should"
submitter "xd1998"
parameters {
string(name: "PERSON", defaultValue: "JXD", description: "Who are you?")
}
}
steps {
echo "Hello ${PERSON}"
}
}
}
}
3.2.9 when语法
放置在stage中,条件为true,stage执行。
branch:构建的分支和给定的分支匹配则执行,适用于多分支流水线:when {branch 'master'}
environment:指定环境变量是给定值执行:when {environment name: 'DEPLOY_TO', value:'prooduction'}
expression:当指定的Groovy表达式评估为true时才执行:when {expression {return params.DEBUG_BUILD}}
when语法根据参数值跳过执行的阶段
not:当嵌套条件为false时执行:when {not {branch 'master'}}
allOf:当所有嵌套条件都为true才执行:when {allOf {branch 'master'; environment name: 'DEPLOY_TO, value: 'production}}
anyOf:当至少有一个嵌套条件为true时执行
3.2.10 parallel
声明式流水线的阶段可以在他们内部声明多隔嵌套阶段, 它们将并行执行。 注意,一个阶段必须只有一个 steps 或 parallel的阶段。 嵌套阶段本身不能包含 进一步的 parallel 阶段, 但是其他的阶段的行为与任何其他 stageparallel的阶段不能包含 agent 或 tools阶段, 因为他们没有相关 steps。
另外, 通过添加 failFast true 到包含parallel的 stage中, 当其中一个进程失败时,你可以强制所有的 parallel 阶段都被终止。
示例:
pipeline {
agent any
stages {
stage('Non-Parallel Stage') {
steps {
echo 'This stage will be executed first.'
}
}
stage('Parallel Stage') {
when {
branch 'master'
}
failFast true #第一个失败,都会失败。
parallel {
stage('Branch A') {
agent {
label "for-branch-a"
}
steps {
echo "On Branch A"
}
}
stage('Branch B') {
agent {
label "for-branch-b"
}
steps {
echo "On Branch B"
}
}
}
}
}
}
3.2.11 step步骤script
script 步骤需要 [scripted-pipeline]块并在声明式流水线中执行。对于大多数用例来说,应该声明式流水线中的“脚本”步骤是不必要的,但是它可以提供一个有用的”逃生出口”。非平凡的规模和/或复杂性的script块应该被转移到 共享库 。
示例:
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
script {
def browsers = ['chrome', 'firefox']
for (int i = 0; i < browsers.size(); ++i) {
echo "Testing the ${browsers[i]} browser"
}
}
}
}
}
}
Jenkins工具集成
4-1 构建工具集成
4-1-1 集成maven
4-1-2 集成ant
4-1-3 集成gradle
4-1-4 集成npm
4-2 Ldap用户认证集成
4-2-1 安装Ldap服务
4-2-2 安装Ldap控制台
4-2-3 配置Ldap服务
4-2-4 创建OU组织用户数据
4-2-5 Jenkins集成Ldap
4-3 Gitlab集成
4-3-1 Jenkins集成Gitlab SSO单点登录
4-3-2 WebHook集成
4-4 Jenkins集成SaltStack批量自动化发布
4-5 Jenkins制品库集成-Nexus
4-6 Jenkins集成禅道
4-7 Jenkins集成制品库-Artifactory
4-8 Jenkins集成SonarQube
第六章 Jenkins流水线实践
6-1 前端静态资源发布流水线
6-2 NodeJs项目发布流水线
6-3 Dotnet项目发布流水线
6-4 JAVA-Springboot项目发布流水线
6-5 Golang项目发布流水线
6-6 移动端Android项目发布流水线
6-6-1 搭建Android打包环境(Centos)
6-6-2 手动发布Android项目
6-6-3 Jenkins发布流水线(Fir|蒲公英)
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫