美文网首页容器云记录docker性能测试
Jenkins实现Docker Containers的CI

Jenkins实现Docker Containers的CI

作者: Aapon | 来源:发表于2017-06-28 10:45 被阅读421次

    简介

    前几天刚刚把Jenkins运行在Docker中,想着怎么实现Devops的CI,发现无法Webhook自动upgrade,就想个简单粗暴的方法实现。

    环境介绍

    1.Jenkins运行在Docker里面(docker里面执行docker命令请看上一遍文章),有Rancher管理Docker,源码有Gitlab管理,Docker Image发布到Harbor上面。

    Harbor 安装

    请参考Harbor官方文档

    Rancher 安装

    请参考Rancher官方文档

    SSH无密钥登录

    1. ssh-keygen -t rsa -P '' -P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车。
      它在/home/<username>.ssh目录,.ssh下有id_rsa和id_rsa.pub。
    2. 在A机器上,scp id_rsa.pub 到B机器上/home/<username>.ssh目录下
    3. B机器上与A机器同用户下.ssh目录下执行:cat id_rsa.pud >> authorized_keys
    4. B机.ssh目录执行:chmod 600 authorized_keys
    5. 在A机器上登录B机器:ssh B

    Jenkins配置

    1. 安装Docker Build and Publish 插件
    2. Jenkins的Job配置Docker Build and Publish


      image.png
    3. 调用远程shell升级Docker Containers
      image.png
      图片中1的远程脚本为清理Jenkins所在宿主机上旧版本的Docker Images
      图片中2的远程脚本为清理部署机器上面的旧版本Docker Images和升级Docker Images
    4. shell脚本
      1.上步骤图片1中shell
    build_tag=$1
    oldtag=$(($build_tag - 2))
    docker rmi $(docker images|grep "<docker images name>   $oldtag"|awk '{print $3}') 1>/dev/null 
    if [ $? -eq 0 ];then
         echo "Docker RMI Images SUCCESS"
    else
        echo  "Docker RMI Images FAILED"
    fi
    

    2.上步骤图片2中shell

      #/bin/sh
    build_tag=$1
    echo $build_tag
    oldtag=$(($build_tag - 1))
    v_number=$(docker images|grep "<docker image>   $oldtag"|awk '{print $2}')
    echo $v_number
    docker ps |grep "<containers name>" 1>/dev/null 2>/dev/null
    if [ $? -eq 0 ];then
        docker stop <containers name> && docker rm <containers name>
        if [ $? -eq 0 ];then
            docker rmi $(docker images|grep "<docker image>   $oldtag"|awk '{print $3}') 1>/dev/null 
        else 
            echo "Docker RMI Images FAILED"
        fi
    else
        echo  "Docker RMI Images FAILED"
    fi
    docker pull <docker image>:$build_tag 1>/dev/null
    if [ $? -eq 0 ];then
            docker run -d --restart=always -e DATABASE_HOST=<db host> \
            -e DATABASE=<db-name> \
            -e DATAUSER=postgres \
            -e DATAPASSWD=<passwd> \
            -p 8087:8080 --name <containers name> \
               <docker image>:$build_tag
            if [ $? -eq 0 ];then
                   echo "Docker Containers <containers name> RUN SUCCESS"
            else
                   echo "Docker Containers <containers name> RUN FAILED"
            fi
    else 
            echo "DOCKER PULL FAILED"
    fi
    

    相关文章

      网友评论

      本文标题:Jenkins实现Docker Containers的CI

      本文链接:https://www.haomeiwen.com/subject/oebecxtx.html