目录
一、jenkins节点管理
二、jenkins用户管理
三、Jenkins结合pipeline
扩展:jenkins远程交付
四、jenkins结合dingding报警
五、jenkins结合ansible
一、jenkins节点管理
实际工作中master节点只负责调度 需要创建agent节点进行工作
真机创建新的虚拟机git4作为master的agent
为了实验效果 如果内存不够的话 512MiB即可
修改虚拟机git4名称为server14 作为master的agent 





server14安装jdk![]()

jenkins安装SSH Build Agents插件
进入节点管理界面
选择新建节点 节点名称为builder-1选择固定节点属性
编辑builder-1节点信息 描述为docker build host 执行器为5 远程工作目录在/tmp 设为常用节点 尽可能的使用这个节点
启动方式为SSH 需要添加SSH插件
为SSH添加证书选择不校验 尽量保持代理在线

这时我们可以看到builder-1的状态ok
在server14上 通过SSH 开启了一个java进程
将master的构建队列改为0 只负责调度
可以看到只有agent上有构建队列
server14安装docker
server13发送yum到server14

server14安装docker
server13发送docker.cof文件到server14
server14 sysctl --system使之生效
设置docker开机自启

将证书和配置文件发送到server15的/etc/docker目录下
添加仓库解析
重启docker docker info查看docker配置成功![]()

禁用docker_project_test交付项目
test点击立即构建
控制台发现报错
我们发现在构建主机的tmp/workspace/test下 没有拉取到项目是因为iserver14上没有git命令
server14安装git 
再次触发 控制台输出成功

构建主机已经把这个任务分配到了新的构建主机agent上 server14上查看构建成功
二、jenkins用户管理
在页面点击选择管理用户
选择新建用户 填写注册信息
使用刚才创建的用户进行登陆
可以看到新建的用户拥有管理员权限 可以进行全部操作 我们需要将其修改为普通权限用户
使用管理员账户登陆
安装基于角色的访问控制插件 
在系统管理中选择全局安全配置 授权策略由用户可以做任何事改为基于角色权限
使用普通用户进行登陆
进去发现普通用户没有任何权限
我们需要为它赋予一些权限 使用管理员用户进行登陆
启动了全局安全后会出现角色的管理和分配模块
进入选择角色管理

添加全局角色user 只为其赋予读的权限
点击分配角色

为刚才创建的lzw角色分配user用户角色
现在在使用lzw用户进行登陆
可以看到有red的权限 看不到任何项目
再次注销 用admin管理员账户登陆
普通用户需要什么权限就为它创建什么权限
进入管理和分配模块 点击管理角色 添加管理test项目
保存退出进入分配角色中 添加用户lzw 选中项目role1角色
使用普通用户进行登陆 发现我们分配的项目角色什么都没有看到 这是因为我们为它分配了一个项目角色 但没有赋予任何权限
使用管理员账户进行登陆 为其项目赋予一个读的权限
用普通用户lzw进行登陆 现在只能看到test项目并且无法进行配置
这时我们再用admin用户进去为其添加构建和配置权限
用普通用户lzw进行登陆 进入到test项目中 可以看到当前可以进行构建和配置
再次使用管理员用户进行登陆
三、jenkins结合pipeline
首先禁掉项目(禁不禁无所谓)
新建流水线风格项目devops
编辑流水线脚本输出一个HelloWorld 

查看控制台输出成功
可以在devops项目内看见生成了一个流水线
继续编辑脚本 
点击开始构建第三次正在运行
第三次构建成功 可以看到一个完整的流水线 building testing deploying
打开流水线语法
点击片段生成器进行编辑


将流水线脚本 粘贴到pipeline script脚本中
再次点击进行构建可以看见构建成功
查看将远程仓库的项目文件克隆到构建主机agent server14上
修改脚本信息 进行docker构建 
构建成功 查看控制台输出
仓库查看镜像上传成功
编辑shell文件 部署到远程server14交付主机
部署主机server14上SSH-KEYGE生成密钥文件 设置server15免密
开始构建 
查看控制台输出
编辑pipeline shell 在远端交付主机上部署myweb容器 
点击开始构建 查看构建失败 在部署这步出了问题
查看控制台输出 发现错误为远端交付主机server14没有docker命令 没有安装docker
server14安装docker 





![]()

设置仓库解析
此处我们可以进行一个扩展
jenkins远程交付
在生产环境中 jenkins上面的构建项目任务会有很多 jenkins既要做构建又要做测试交付项目太多会导致jenkins平台不稳定 上边实验我们将jenkins构建放到了新建的agent上来做 这里也可以将jenkins的测试交付发送到远程主机来进行
我们将server14作为远程交付主机
首先关闭构建主机agent
![]()
将master构建主机队列改回原来的2个
![]()
断开devops项目 启动docker_project_test和test项目
下载安装SSH插件用于远程ssh方式访问 上边已经下载
![]()
点击系统配置 设置ssh连接的主机
![]()
将server15的信息填入 添加jenkins凭据
此处发现点击add没任何变化 我们需要配置全局管理凭证系统
![]()
再次回到管理配置系统设置ssh连接的主机
测试成功
![]()
进入此项目 点击配置
查看server13jenkins主机上没有任何容器
如果有容器的话删除
查看server15上没有任何容器
测试 整体推进
在gitlab项目下prodject1 编辑index.html文件
![]()
提交上传至gitlab代码仓库
gitlab上查看更新成功
触发jenkins 在test项目中查看构建失败
![]()
查看控制台输出
可以看出出现此问题是由于docker权限不足 为其设置777权限
开始重新构建 构建成功
仓库查看上传成功
![]()
浏览器访问成功
回到 jenkins结合pipeline
暂停docker_project_test和test项目

启动构建主机agent
设置master构建主机序列为0
开始第8次构建 发现构建失败
查看原因
在远程交付主机上已经存在myweb容器

编辑 shell 先过滤远程交付主机上已经存在此容器 删掉这个容器以及它的镜像 在重新运行
开始第十次构建 构建失败 查看控制台输出错误信息
错误原因:docker服务启动时自定义的自定义链DOCKER由于某种原因被清掉
重启docker服务即可以重新生成自定义链DOCKER ![]()
开始第11次构建 查看构建成功
浏览器访问172.25.15.15 
配置主动触发构建

将网址和令牌粘贴到webhooks下 实现自动拉取代码


开始测试 修改index.html文件

提交并上传
自动触发 查看正在构建
构建成功
浏览器访问成功
四、jenkins结合dingding报警
首先 linux上安装钉钉软件 创建一个测试群 添加一个机器人


查看机器人添加成功 
jenkins下载安装dingding插件
点击系统管理进入系统配置

点击测试
查看钉钉群
进入devops项目配置 编辑pipeline shell
点击开始构建 查看正在构建
查看构建成功
这时钉钉会为我们发送构建成功信息
修改pipeline shell 注释掉登陆步骤

开始构建肯定会报错
这时钉钉会发送一个上线失败的告警

修改pipeline shell 取消注释
在生产环境中需要将将此代码通过 gitlab来进行版本控制 提交和修改需要有记录
在 gitlab中创建一个新项目


pipeline {
agent any
stages {
stage('check out') {
steps {
git branch: 'main', credentialsId: 'f5a60d83-cc50-4571-9475-0554626d7436', url: 'git@172.25.15.12:root/project1.git'
}
}
stage('build image and push') {
steps {
sh '''
cd $WORKSPACE
docker build -t reg.westos.org/library/demo:${BUILD_NUMBER} .
docker login reg.westos.org -u admin -p westos
docker push reg.westos.org/library/demo:${BUILD_NUMBER}
docker tag reg.westos.org/library/demo:${BUILD_NUMBER} reg.westos.org/library/demo:latest
docker push reg.westos.org/library/demo:latest
'''
}
}
stage('docker deploy') {
steps {
sh '''
ssh -i /root/.ssh/id_rsa root@172.25.15.15 """
docker ps -a | grep myweb && docker rm -f myweb
docker rmi demo:latest
docker run -d --name myweb -p 80:80 demo:latest
"""
'''
}
}
}
post {
success {
dingtalk (
robot: '56f4f214-ef2d-4e2a-a1d8-5b274cf8d5c2',
type: 'TEXT',
at: ["17629133215"],
atAll: false,
title: 'jenkins',
text: ["online success"],
hideAvatar: false
)
}
failure {
dingtalk (
robot: '56f4f214-ef2d-4e2a-a1d8-5b274cf8d5c2',
type: 'TEXT',
at: ["17629133215"],
atAll: false,
title: 'jenkins',
text: ["online failure"],
hideAvatar: false
)
}
}
}


进入devops项目配置


点击立即构建 查看正在构建

查看构建成功
这时钉钉又会为我们发送构建成功提醒
五、jenkins结合ansible
master节点添加两个worker

关闭agent节点并删除

最后查看只有master节点
jenkins主机上安装ansible

gitlab上新建ansible项目

使用ssh克隆到本地
server14 15作为测试机 停掉server14 15的docker 避免后面端口冲突
编辑ansible.cfg主配置文件
创建inventory目录清单 编辑test prod组
编辑playbook.yaml文件![]()
编辑index.html.j2模板文件
git add .添加当前目录所有文件到暂存区
git commit -m 提交所有文件到版本库
git push上传到gitlab代码仓库ansible项目中
gitlab代码仓库ansible项目查看推送内容
jenkins新建自由风格项目 playbook
参数化构建中选择选项参数 
参数化构建过程 填写选项参数内容

只需指定git仓库即可,无需gitlab主动触发,因为需要手动选择inventory构建参数
指定分支为*/main 保存
开始构建
构建成功 查看控制台输出
ansible通过ssh方式将playbook推送到远端受控主机 在通过sudo来运行 默认情况下jenkins会已jenkins用户来访问远端主机
![]()
jenkins运行时是以jenkins身份来运行

server15 14 创建devops用户 并进行visudo授权![]()

![]()
server15 14 为用户devops设置密码
Jenkins服务器提前部署好到目标主机的ssh免密
由于是以jenkins用户调用ansible命令,所以需要设置jenkins用户到目标主机的免密

root用户添加解析
jenkins用户为server14 15设置免密
登陆进去确认免密设置成功
测试
测试出错 认证问题当前是用超级用户执行ansible-playbook
超级用户没有做ansible受控主机的免密
在playbook项目中进行构建
查看构建成功
进入playbook项目中进行配置

点击构建选择test组 

第4次构建成功 查看控制台输出

server15查看开启了http80端口
server14查看没有开启80端口
开始进行第5次构建 选择prod组 
构建成功查看控制台输出
server4开启了http80端口
本文详细介绍了jenkins的节点管理,包括如何创建和配置jenkins agent,以及远程交付的实现。此外,还涉及jenkins用户管理,通过角色权限控制用户访问。同时,展示了jenkins与pipeline的结合,实现自动化构建和部署流程,并利用dingding进行构建状态报警。最后,jenkins与ansible集成,实现自动化运维任务。











如果有容器的话删除


可以看出出现此问题是由于docker权限不足 为其设置777权限





https://developer.aliyun.com/packageSearch?word=%EF%BD%81%EF%BD%8E%EF%BD%93%EF%BD%89%EF%BD%82%EF%BD%8C%EF%BD%85
&spm=1001.2101.3001.5002&articleId=123673188&d=1&t=3&u=7133d43230174336873d6fca86cf2075)
203

被折叠的 条评论
为什么被折叠?



