Day05-01-jenkins进阶

news2024/11/19 6:42:25

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" ];then
    git_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}
do
    ssh root@${ip} "
    #0.未来可以加入判断判断端口是否占用
    #端口冲突手动解决.未来可以ansible实现.
#   if [ `docker ps |grep -w 80 |wc -l` -eq 1 ];then
      #删除占用80端口的容器
#   fi
    docker 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 ];then
       docker 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}
do
   ssh root@${ip} "
    #0.未来可以加入判断判断端口是否占用
    #端口冲突手动解决.未来可以ansible实现.
#   if [ `docker ps |grep -w 80 |wc -l` -eq 1 ];then
      #删除占用80端口的容器
#   fi
    docker 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 ];then
       docker 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: web
  gather_facts: false
  tasks:
    - name: test
      shell: hostname -I >>/tmp/test.log
[root@devops-oldboy-jenkins /server/scripts]# cat hosts 
[web]
172.16.1.82

10.4 书写剧本

- hosts: web
  vars:
    - img_name: "ngx_bird_{{ans_git_tag}}"
  gather_facts: false
  tasks:
    - 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: true
      failed_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 Վҧ 0
     when: port.rc Վҧ 0
    - name: 2. 获取是否有重名的docker容器,如果有冲突则删除
容器
     shell: docker ps -a |grep -w "{{img_name}}"
     register: container_name
     failed_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: web
  vars:
    - img_name: "ngx_bird_{{ans_git_tag}}"
  gather_facts: false
  tasks:
    - 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: true
      failed_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 == 0
      when: port.rc == 0
    
    - name: 2. 获取是否有重名的docker容器,如果有冲突则删除容器
      shell: docker ps -a |grep -w "{{img_name}}"
      register: container_name
      failed_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}}

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.coloradmin.cn/o/1896508.html

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

相关文章

AI绘画擦边变现赛道怎么玩?新手小白必看教程!

今天给大家介绍一个用 AI 搞擦边的变现赛道 而且可以说是0 成本变现的 现在真的越来越多的人都想 0 成本变现,那么 0 成本到底能不能变现,变现的上下限又是多少? 今天这个案例就可以很好的进行说明 可以说 AI 是现在第一生产力&#xff0…

代码随想录——柠檬水找零(Leetcode860)

题目链接 贪心 class Solution {public boolean lemonadeChange(int[] bills) {if(bills[0] 10 || bills[0] 20 || bills[1] 20){return false;}int count5 1;int count10 0;for(int i 1; i < bills.length; i){if(bills[i] 5){count5;}if(bills[i] 10){count10;…

VBA常用的字符串内置函数

前言 在VBA程序中&#xff0c;常用的内置函数可以按照功能分为字符串函数、数字函数、转换函数等等&#xff0c;本节主要会介绍常用的字符串的内置函数&#xff0c;包括Len()、Left()、Mid()、Right()、Split()、String()、StrConV()等。 本节的练习数据表以下表为例&#xff…

Mybatis实现RBAC权限模型查询

RBAC权限模型 Role-Based Access Control&#xff0c;中文意思是&#xff1a;基于角色&#xff08;Role&#xff09;的访问控制。这是一种广泛应用于计算机系统和网络安全领域的访问控制模型。 简单来说&#xff0c;就是通过将权限分配给➡角色&#xff0c;再将角色分配给➡用…

leetcode--二叉树中的最长交错路径

leetcode地址&#xff1a;二叉树中的最长交错路径 给你一棵以 root 为根的二叉树&#xff0c;二叉树中的交错路径定义如下&#xff1a; 选择二叉树中 任意 节点和一个方向&#xff08;左或者右&#xff09;。 如果前进方向为右&#xff0c;那么移动到当前节点的的右子节点&…

盘点AI做自媒体五条赚钱路径,新手小白必看(附教程)

前言 盘点用AI做自媒体赚钱的五条路径&#xff0c;只要学会使用AI工具&#xff0c;你也可以马上赚到钱。 我认为短视频是趋势&#xff0c;但相比于短视频而言&#xff0c;AI则是未来更大的趋势。 AI现在才属于萌芽期&#xff0c;好比是98年的互联网和07年的移动互联网&#x…

Jmeter使用JSON Extractor提取多个变量

1.当正则不好使时&#xff0c;用json extractor 2.提取多个值时&#xff0c;默认值必填&#xff0c;否则读不到变量

Linux - Shell 以及 权限问题

目录 Shell的运行原理 Linux权限问题 Linux权限的概念 如何实现用户账号之间的切换 如何仅提升当前指令的权限 如何将普通用户添加到信任列表 Linux权限管理 文件访问者的分类&#xff08;人&#xff09; 文件类型和访问权限&#xff08;事物属性&#xff09; 文件权限值的表…

【基于深度学习方法的激光雷达点云配准系列之GeoTransformer】——模型部分浅析(1)

【GeoTransformer系列】——模型部分 1. create_model2. model的本质3. 模型的主要结构3.1 backbone3.2 transformer本篇继续对GeoTransformer/experiments/geotransformer.kitti.stage5.gse.k3.max.oacl.stage2.sinkhorn/下面的trainval.py进行详细的解读,主要是模型部分, 可以…

一款针对Webpack等前端打包工具所构造的网站进行快速、高效安全检测的扫描工具

免责声明 由于传播、利用本公众号夜组安全所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;公众号夜组安全及作者不为此承担任何责任&#xff0c;一旦造成后果请自行承担&#xff01;如有侵权烦请告知&#xff0c;我们会立即删除…

硅纪元视角 | 法国8人团队发布Moshi,挑战OpenAI的开源实时多模态模型!

在数字化浪潮的推动下&#xff0c;人工智能&#xff08;AI&#xff09;正成为塑造未来的关键力量。硅纪元视角栏目紧跟AI科技的最新发展&#xff0c;捕捉行业动态&#xff1b;提供深入的新闻解读&#xff0c;助您洞悉技术背后的逻辑&#xff1b;汇聚行业专家的见解&#xff0c;…

51单片机-让一个LED灯闪烁、流水灯(涉及:自定义单片机的延迟时间)

目录 设置单片机的延迟&#xff08;睡眠&#xff09;函数查看单片机的时钟频率设置系统频率、定时长度、指令集 完整代码生成HEX文件下载HEX文件到单片机流水灯代码 (自定义延迟时间) 设置单片机的延迟&#xff08;睡眠&#xff09;函数 查看单片机的时钟频率 检测前单片机必…

红海云签约海新域集团,产业服务运营领军企业加速人力资源数字化转型

北京海新域城市更新集团有限公司&#xff08;以下简称“海新域集团”&#xff09;是北京市海淀国有资产投资集团有限公司一级监管企业&#xff0c;致力于成为国内领先的产业服务运营商。集团积极探索城市和产业升级新模式&#xff0c;通过对老旧、低效等空间载体重新定位规划、…

【Python】成功解决TypeError: iteration over a 0-d tensor

【&#x1f40d;Python】成功解决TypeError: iteration over a 0-d tensor 下滑即可查看博客内容 &#x1f308; 欢迎莅临我的个人主页 &#x1f448;这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地&#xff01;&#x1f387; &#x1f393; 博主简介&#xf…

赶快收藏!全网最佳websocket封装:完美支持断网重连、自动心跳!

简介 websocket在前端开发中,是一个必须掌握的技术!你可以不用,但必须掌握! 前几天,就遇到这样一个需求,要求界面的数据通过websocket实时推送,并且必须支持断网重连、自动心跳! 自动心跳是定期向服务端发送小型数据包,如果一段时间内服务端没有收到心跳响应,系统可…

大模型LLMs概述:利用大模型 (LLMs) 解决信息抽取任务

论文标题&#xff1a;Large Language Models for Generative Information Extraction: A Survey 论文链接&#xff1a;https://arxiv.org/pdf/2312.17617.pdf 论文主要探讨了大型语言模型&#xff08;LLMs&#xff09;在生成式信息抽取&#xff08;IE&#xff09;任务中的应用…

1.1.2数据结构的三要素

一.数据结构的三要素 数据结构这门课着重关注的是数据元素之间的关系&#xff0c;和对这些数据元素的操作&#xff0c;而不关心具体的数据项内容 。 1.逻辑结构 &#xff08;1&#xff09;集合结构 &#xff08;2&#xff09;线性结构 数据元素之间是一对一的关系。除了第一个…

【C语言】return 关键字

在C语言中&#xff0c;return是一个关键字&#xff0c;用于从函数中返回值或者结束函数的执行。它是函数的重要组成部分&#xff0c;负责将函数的计算结果返回给调用者&#xff0c;并可以提前终止函数的执行。 主要用途和原理&#xff1a; 返回值给调用者&#xff1a; 当函数执…

AI绘画Stable Diffusion画全身图总是人脸扭曲?ADetailer插件实现一键解决!

大家好&#xff0c;我是向阳 你是否遇到过SD生成的人物脸部扭曲、甚至令人恶心的情况&#xff1f;也曾感到束手无策&#xff1f;别担心&#xff0c;这份教程专为你而来。 在使用SD生成人物全身照时&#xff0c;你可能经常发现人物的脸部会出现扭曲问题。这是因为人物面部像素…