zoukankan      html  css  js  c++  java
  • 利用Jenkins打包ISO和QCOW2镜像文件

    现在的云虚拟化环境越来越多,经常会碰到需要修改并重新打包新的ISO或QCOW2镜像文件。通过手工的方式会比较麻烦,所以在镜像发布的生产环境中可以利用Jenkins来进行定期打包发布,以下介绍Jenkins环境中打包ISO/QCOW2镜像时的一些步骤和注意事项。(本处仅描述已经有QCOW2镜像的情况,如果没有QCOW2镜像的话需要新创建镜像,后续再添加从零创建镜像的过程)

    配置打包ISO镜像

    打包ISO镜像的过程比较简单,将命令写成一个脚本执行即可:

    [root@localhost vfw]$ cat build_iso.sh 
    #!/bin/sh
    
    mkisofs -J -l -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -z -iso-level 4 -o ./image/vfw.iso  -joliet-long vfw_iso/
    #vfw_iso路径下存放的是要打包的grub文件、内核文件以及其他一些需要的文件,具体视打包需要而定

    配置打包QCOW2镜像

    依赖,如果没有安装qemu通过apt-get install qemu安装最新版本即可:

    nbd

    qemu-nbd

    qemu-img

    1、给Jenkins用户取消执行shell需要控制终端;

    修改/etc/sudoers配置文件(先执行chmod u+w sudoers增加写权限):


    # Disable "ssh hostname sudo <cmd>", because it will show the password in clear. # You have to run "ssh -t hostname sudo <cmd>". # Defaults:jenkins !requiretty #指定用户jenkins不需要控制终端 Defaults visiblepw #避免出现"no askpass program specified"报错  

    2、给Jenkins用户添加执行shell的权限;

    修改/etc/sudoers配置文件,给jenkins增加所有需要执行的命令权限,且执行时不需要输入密码:

    ## The COMMANDS section may have other options added to it.
    ##
    ## Allow root to run any commands anywhere 
    root    ALL=(ALL)       ALL
    jenkins         ALL=NOPASSWD: /usr/bin/qemu-nbd,/usr/bin/mount,/usr/bin/umount,/usr/sbin/modprobe,/usr/bin/cp,/usr/bin/sudo,/usr/bin/srm,/home/builder1/vfw/build_qcow2.sh,/usr/bin/qemu-img

    执行chmod u-w sudoers关闭写权限

    添加构建脚本

    Jenkins构建中添加打包执行的shell,例如;

    export LC_CTYPE="zh_CN.UTF-8"
    export PATH=$PATH:/usr/local/x86_64/bin/
    day=`date +%Y%m%d`
    
    #加载nbd模块
    sudo modprobe nbd max_part=16  #注意如果不添加max_part=16参数,在挂载镜像分区时可能会无法看到磁盘里面的实际分区,例如/dev/nbd0p1
    
    #打包ISO镜像
    cp -rf images/*.img /home/builder1/vfw/vfw_iso/
    cd /home/builder1/vfw/
    ./build_iso.sh
    
    #打包QCOW2镜像
    cp -rf images/*.img /home/builder1/vfw/vfw_qcow2/
    cd /home/builder1/vfw/
    sudo ./build_qcow2.sh
    umount -fl /mnt10  #强制卸载
    sudo qemu-nbd -d /dev/nbd0
    sudo qemu-img convert -c -f qcow2 -O qcow2 /home/builder1/vfw/image/vfw.qcow2 /home/builder1/vfw/image/vfw_new.qcow2  #压缩文件
    

     build_qcow2.sh说明:

    #!/bin/sh
    
    qemu-nbd -c /dev/nbd0 ./image/vfw.qcow2  #将qcow2镜像映射为网络设备
    mount /dev/nbd0p1 /mnt10  #挂载分区,如果有多个分区要操作就分别挂载到不同的路径下
    cp ./vfw_qcow2/*.img /mnt10/boot/
    cd /mnt10
    dd if=/dev/zero of=zero  #无用的空间写0,避免多次操作镜像后镜像文件不断变大
    srm -rf zero  #删除zero文件
  • 相关阅读:
    C语言位操作
    Ribbon负载规则的替换
    Nginx 的配置文件
    Nginx 操作常用的命令
    Nginx 是什么?
    SpringCloud Eureka 新版本依赖
    @Autowired 与@Resource的区别
    spring 注释
    redis 的 rdb 和 aof 持久化的区别
    jdk1.7下HashMap的头插法问题
  • 原文地址:https://www.cnblogs.com/loganblogs/p/8243697.html
Copyright © 2011-2022 走看看