Day05-01-jenkins进阶

Day05-01-jenkins进阶

  • 10. 案例07: 理解 案例06基于ans实现
    • 10.1 整体流程
    • 10.2 把shell改为Ansible剧本
    • 10.3 jk调用ansible全流程
    • 10.4 书写剧本
  • 11. Jenkins进阶
    • 11.1 jenkins分布式
      • 1)概述
      • 2)案例08:拆分docker功能
      • 3)创建任务并绑定到指定节点中
      • 4)运行即可
      • 5)小结
    • 11.2 rbac认证
      • 1)插件
      • 2)启用基于RBAC的认证
      • 3)小结

10. 案例07: 理解 案例06基于ans实现

10.1 整体流程

  • 开发书写代码提交代码+Dockerfile
  • jk: 拉取代码
  • jk: 构建镜像并推送到私有仓库
  • jk: 管理web,在web上拉取镜像并运行容器 (shell,改为ans实现)
  • web或lb: 进行测试.

10.2 把shell改为Ansible剧本

#vars
web_servers="172.16.1.82 "
#0.判断git_tag是否为默认
if [ "$git_tag" = "origin/master" ];thengit_tag=latest
fi
#1. 构建镜像
docker build  -t reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_${git_tag} .
#2. 推送到私有仓库
#docker login -uxxx -pxxx   私有仓库地址
docker push reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_${git_tag}
#3. 部署web服务器
for ip in ${web_servers}
dossh root@${ip} "#0.未来可以加入判断判断端口是否占用#端口冲突手动解决.未来可以ansible实现.
#   if [ `docker ps |grep -w 80 |wc -l` -eq 1 ];then#删除占用80端口的容器
#   fidocker ps |grep -w 80 |awk '{print $NF}'|xargs docker rm -f#0.未来可以加入判断判断容器的名字是否有冲突.if [ `docker ps -a |grep -w "ngx_bird_${git_tag}" |wc -l ` -eq 1 ];thendocker rm -f ngx_bird_${git_tag}fi#启动docker run -d --name "ngx_bird_${git_tag}" \-p 80:80 --restart=always \reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_${git_tag}"
done
  • 需要修改的代码
#3. 部署web服务器
for ip in ${web_servers}
dossh root@${ip} "#0.未来可以加入判断判断端口是否占用#端口冲突手动解决.未来可以ansible实现.
#   if [ `docker ps |grep -w 80 |wc -l` -eq 1 ];then#删除占用80端口的容器
#   fidocker ps |grep -w 80 |awk '{print $NF}'|xargs docker rm -f#0.未来可以加入判断判断容器的名字是否有冲突.if [ `docker ps -a |grep -w "ngx_bird_${git_tag}" |wc -l ` -eq 1 ];thendocker rm -f ngx_bird_${git_tag}fi#启动docker run -d --name "ngx_bird_${git_tag}" \-p 80:80 --restart=always \reg.oldboylinux.cn:5000/oldboyedu/web:ngx_bird_${git_tag}"
done
  • 改完后 参考10.4部分

10.3 jk调用ansible全流程

  • 依赖插件:

  • 配置ansible任务

image-20240523151832000

image-20240523152248778

image-20240523152348824

[root@devops-oldboy-jenkins /server/scripts]# cat test.yml 
- hosts: webgather_facts: falsetasks:- name: testshell: hostname -I >>/tmp/test.log
[root@devops-oldboy-jenkins /server/scripts]# cat hosts 
[web]
172.16.1.82

10.4 书写剧本

- hosts: webvars:- img_name: "ngx_bird_{{ans_git_tag}}"gather_facts: falsetasks:- name: 1. 获取80端口是否冲突#过滤宿主机占用80端口的容器shell: docker ps -a |grep ':80'#存放到port变量中json形式数据 port.rc返回值register: port#用于指定这个模块什么条件下才算是报错了.#'"not found" in port.stdout' 命令的结果中如果出现not found字样比如command not found则报错.#ignore_errors: truefailed_when: '"not found" in port.stdout'- name: 1. 获取80端口是否冲突,如果有冲突则删除容器shell: docker ps -a |grep  ':80Վʘ'|awk 
'{print $NF}' |xargs docker rm -f  #当docker ps -a |grep ':80Վʘ'命令的返回值是0的
时候才会运行删除容器的操作.#port.rc Վҧ 0when: port.rc Վҧ 0- name: 2. 获取是否有重名的docker容器,如果有冲突则删除
容器shell: docker ps -a |grep -w "{{img_name}}"register: container_namefailed_when: '"not found" in 
container_name.stdout'- name: 2. 获取是否有重名的docker容器,如果有冲突则删除
容器shell: docker ps -a |grep -w "
{{img_name}}"|awk '{print $NF}' |xargs docker rm -f when: container_name.rc Վҧ 0- name: 3. 启动容器shell: docker run -d Վʔname "{{img_name}}" -p 
80:80 Վʔrestart=always 
reg.oldboylinux.cn:5000/oldboyedu/web:{{img_name}}
  • 注释版本
ansibe-playbook -i hosts test.yml -e ans_git_tag=${git_tag}
#-e ans_git_tag=${git_tag} ans_git_tag用于获取前面参数化构建的时候创建的变量git_tag
- hosts: webvars:- img_name: "ngx_bird_{{ans_git_tag}}"gather_facts: falsetasks:- name: 1. 获取80端口是否冲突#过滤宿主机占用80端口的容器shell: docker ps -a |grep ':80->'#存放到port变量中json形式数据 port.rc返回值register: port#用于指定这个模块什么条件下才算是报错了.#'"not found" in port.stdout' 命令的结果中如果出现not found字样比如command not found则报错.#ignore_errors: truefailed_when: '"not found" in port.stdout'- name: 1. 获取80端口是否冲突,如果有冲突则删除容器shell: docker ps -a |grep ':80->'|awk '{print $NF}' |xargs docker rm -f#当docker ps -a |grep ':80->'命令的返回值是0的时候才会运行删除容器的操作.#port.rc == 0when: port.rc == 0- name: 2. 获取是否有重名的docker容器,如果有冲突则删除容器shell: docker ps -a |grep -w "{{img_name}}"register: container_namefailed_when: '"not found" in container_name.stdout'- name: 2. 获取是否有重名的docker容器,如果有冲突则删除容器shell: docker ps -a |grep -w "{{img_name}}"|awk '{print $NF}' |xargs docker rm -fwhen: container_name.rc == 0- name: 3. 启动容器shell: docker run -d --name "{{img_name}}" -p 80:80 --restart=always reg.oldboylinux.cn:5000/oldboyedu/web:{{img_name}}

image-20240523155356703

image-20240523155625747

11. Jenkins进阶

  • jenkins分布式(主从master,slave 代理agent): 把jenkins工作拆分出来
  • rbac权限控制
  • pipeline(ans剧本)

11.1 jenkins分布式

1)概述

  • 背景:

    • jenkins服务器上运行maven编译,ansible(执行剧本),docker build(构建镜像)
    • jenkins慢了
  • 解决:

    • 把一些功能拆分出去
    • 运行指定任务的时候指定这个新的(jenkins)节点即可

2)案例08:拆分docker功能

  • 目标:未来我们的任务中只有有docker build相关操作就交给对应docker节点.

  • 添加节点

    • 准备节点上安装jdk/jre环境. yum install -y java-11
    • web页面添加节点.

image-20240523160906264

image-20240523161331204

image-20240523161412486

image-20240523161751560

image-20240523161959502

image-20240523162111449

3)创建任务并绑定到指定节点中

image-20240523163303656

4)运行即可

image-20240523164456991

5)小结

  • 核心来理解什么是jenkins分布式与应用场景即可
  • 使用流程:添加节点,添加任务的时候关联节点即可

11.2 rbac认证

  • 用于认证与权限控制

  • 目前jenkins的认证,用户与密码,所有用户权限一致,都是最高权限,权限混乱

  • rbac基于role(角色)的认证体系

  • 角色(role)可以理解成权限集合

    • dev-auto角色内部测试环境
    • dev角色,可以管理所有的开发job(任务)
    • ops可以管理生产环境job
  • 未来把用户或用户组与对应的role关联即可拥有相关的权限

1)插件

  • Role-based Authorization Strategy
  • Matrix Authorization Strategy Plugin

image-20240524134543913

2)启用基于RBAC的认证

  • 启动基于RBAC认证

image-20240524135024709

  • 在系统管理–>Manage and Assign Roles分配权限

  • 添加全局角色与具体job角色.

    • 全局只读.
    • 局部使用正则匹配目录和目录下jobs.

image-20240523165332602

image-20240523165448422

image-20240523165502472

image-20240523165521546

  • 访问测试

image-20240523165553570

image-20240523165629445

3)小结

  • 会使用基于rbac的认证即可.
  • 会配置即可.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/41115.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【刷题笔记(编程题)05】另类加法、走方格的方案数、井字棋、密码强度等级

1. 另类加法 给定两个int A和B。编写一个函数返回AB的值,但不得使用或其他算数运算符。 测试样例: 1,2 返回:3 示例 1 输入 输出 思路1: 二进制0101和1101的相加 0 1 0 1 1 1 0 1 其实就是 不带进位的结果1000 和进位产生的1010相加 无进位加…

ssm校园志愿服务信息系统-计算机毕业设计源码97697

摘 要 随着社会的进步和信息技术的发展,越来越多的学校开始重视志愿服务工作,通过组织各种志愿服务活动,让学生更好地了解社会、服务社会。然而,在实际操作中,志愿服务的组织和管理面临着诸多问题,如志愿者…

dledger原理源码分析系列(一)-架构,核心组件和rpc组件

简介 dledger是openmessaging的一个组件, raft算法实现,用于分布式日志,本系列分析dledger如何实现raft概念,以及dledger在rocketmq的应用 本系列使用dledger v0.40 本文分析dledger的架构,核心组件;rpc组…

【pytorch16】MLP反向传播

链式法则回顾 多输出感知机的推导公式回顾 只与w相关的输出节点和输入节点有关 多层多输入感知机 扩展为多层感知机的话,意味着还有一些层(理解为隐藏层σ函数),暂且设置为 x j x_{j} xj​层 对于 x j x_{j} xj​层如果把前面的…

迅捷PDF编辑器合并PDF

迅捷PDF编辑器是一款专业的PDF编辑软件,不仅支持任意添加文本,而且可以任意编辑PDF原有内容,软件上方的工具栏中还有丰富的PDF标注、编辑功能,包括高亮、删除线、下划线这些基础的,还有规则或不规则框选、箭头、便利贴…

【护眼小知识】护眼台灯真的护眼吗?防近视台灯有效果吗?

当前,近视问题在人群中愈发普遍,据2024年的统计数据显示,我国儿童青少年的总体近视率已高达52.7%。并且近视背后潜藏着诸多眼部并发症的风险,例如视网膜脱离、白内障以及开角型青光眼等,严重的情况甚至可能引发失明。为…

PMP--知识卡片--波士顿矩阵

文章目录 记忆黑话概念作用图示 记忆 一说到波士顿就联想到波士顿龙虾,所以波士顿矩阵跟动物有关,狗,牛。 黑话 你公司的现金牛业务,正在逐渐变成瘦狗,应尽快采取收割策略;问题业务的储备太少&#xff0…

护眼热点:台灯护眼是真的吗?一起来看台灯的功能作用有哪些

如今近视问题日益严峻,尤为引人瞩目的是,高度近视学生群体占比已逼近10%的警戒线,且这一比例伴随着学龄的增长而悄然攀升——从幼儿园6岁孩童中那令人忧虑的1.5%,到高中阶段惊人的17.6%,每一组数据都敲响了保护儿童视力…

【Linux】静态库的制作和使用详解

💐 🌸 🌷 🍀 🌹 🌻 🌺 🍁 🍃 🍂 🌿 🍄🍝 🍛 🍤 📃个人主页 :阿然成长日记 …

代码随想录算法训练营第71天:路径算法[1]

代码随想录算法训练营第71天:路径算法 ‍ bellman_ford之单源有限最短路 卡码网:96. 城市间货物运输 III(opens new window) 【题目描述】 某国为促进城市间经济交流,决定对货物运输提供补贴。共有 n 个编号为 1 到 n 的城市&#xff0c…

【CT】LeetCode手撕—4. 寻找两个正序数组的中位数

目录 题目1- 思路2- 实现⭐4. 寻找两个正序数组的中位数——题解思路 3- ACM 实现 题目 原题连接:4. 寻找两个正序数组的中位数 1- 思路 思路 将寻找中位数 ——> 寻找两个合并数组的第 K 大 (K代表中位数) 实现 ① 遍历两个数组 &am…

企业级监控系统Zabbix

文章目录 Zabbix介绍Zabbix架构Zabbix serverZabbix agentZabbix proxy Zabbix Server的安装Zabbix Agent的安装监控主机流程zabbix_get自定义模板和监控项实战用户登录数监控1.指定监控项命令2.重启Agent服务3.在Server上创建监控项4.测试监控项5.查看监控项图形 触发器定义触…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——4.预后相关外泌体基因确定单因素cox回归(2)

内容如下: 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的…

香橙派 AIpro 根据心情生成专属音乐

香橙派 AIpro 根据心情生成专属音乐 一、OrangePi AI pro 开发版参数介绍1.1 接口简介1.2 OrangePi AI pro 的Linux系统功能适配情况1.3 开发板开机1.4 远程连接到 OrangePi AIpro 二、开发环境搭建2.1 创建环境、代码部署文件夹2.2 安装 miniconda2.3 为 miniconda 更新国内源…

生态系统NPP及碳源、碳汇模拟技术教程

原文链接:生态系统NPP及碳源、碳汇模拟技术教程https://mp.weixin.qq.com/s?__bizMzUzNTczMDMxMg&mid2247608293&idx3&sn2604c5c4e061b4f15bb8aa81cf6dadd1&chksmfa826602cdf5ef145c4d170bed2e803cd71266626d6a6818c167e8af0da93557c1288da21a71&a…

【综合能源】计及碳捕集电厂低碳特性及需求响应的综合能源系统多时间尺度调度模型

目录 1 主要内容 2 部分程序 3 实现效果 4 下载链接 1 主要内容 本程序是对《计及碳捕集电厂低碳特性的含风电电力系统源-荷多时间尺度调度方法》方法复现,非完全复现,只做了日前日内部分,并在上述基础上改进升级为电热综合电源微网系统&…

vue+openlayers之几何图形交互绘制基础与实践

文章目录 1.实现效果2.实现步骤3.示例页面代码3.基本几何图形绘制的关键代码 1.实现效果 绘制点、线、多边形、圆、正方形、长方形 2.实现步骤 引用openlayers开发库。加载天地图wmts瓦片地图。在页面上添加几何图形绘制的功能按钮,使用下拉列表(sel…

基于JavaScript、puppeteer的爬虫

前期准备: npm puppeteer import puppeteer from puppeteer; puppeteer文档 第一步:启动浏览器,跳转到需要爬取的页面 const browser await puppeteer.launch({ headless: false });const page await browser.newPage();await page.goto(url, { w…

【目标检测实验系列】YOLOv5模型改进:引入轻量化多维动态卷积ODConv,减少计算量的同时保持精度稳定或略微上涨!(内含源代码,超详细改进代码流程)

1. 文章主要内容 本篇博客主要涉及轻量化多维动态卷积ODConv,融合到YOLOv5模型中,减少计算量的同时保持精度稳定或略微上涨。(通读本篇博客需要7分钟左右的时间)。 2. 介绍 ODconv沿着空间、输入通道、输出通道以及卷积核空间的核…

领导被我的花式console.log吸引了!直接写入公司公共库!

背景简介 这几天代码评审,领导无意中看到了我本地代码的控制台,被我花里胡哨的console打印内容吸引了! 老板看见后,说我这东西有意思,花里胡哨的,他喜欢! 但是随即又问我,这么花里胡哨的东西,上生产会影响性能吧?我自信的说:不会,代码内有判断的,只有开发环境会…