zoukankan      html  css  js  c++  java
  • Docker 之 Jenkins自动化部署



    相关原文地址:

    简书:离兮丶斜阳:[Docker] Docker 之 Jenkins自动化部署



    构建思路:

    • Docker 安装jenkins,用来拉取代码自动更新
    • Docker 安装gitlab,用来局域网或本地管理代码
    • Docker 安装本地镜像仓库registry、docker-register-web
    • Spring Boot 开发代码后编写Dokcerfile文件
    • Spring Boot 利用docker的mvn插件测试镜像的生成和推送
    • 测试镜像运行

    镜像的自动构建分两种情况:

    jenkins所在容器中已部署docker服务:
    直接在构建中利用shell脚本完成Dokcerfile文件的复制和执行,进而在jenkins所在容器内完成镜像的构建

    jenkins所在容器中未部署docker服务:

    • jenkins中利用Docker插件实现镜像构建
    • jenkins 全局工具配置中安装docker[自动安装]
    • 将jenkins部署在宿主机上,重复上述关联步骤。gitlab可切换为github、gitee

    为了提升镜像的自动构建速度,最终采用本地部署jenkins的方式,因为宿主机是有docker运行环境的。

    Jenkins部署

    通过docker pull 拉下来的Jenkins环境版本较低。。。居然2.1左右,而且会缺少很多插件。

    甚至是插件下载不下来的情况,所以后来改用了rpm的方式安装。

    docker pull jenkins
    
    docker run -d -p 8002:8080 -v ~/jenkins:/var/jenkins_home --name jenkins --restart=always jenkins
    
    #查看容器日志
    docker logs -f jenkins
    #查看容器运行
    docker ps
    

    访问界面:

    ip:8080
    #自动跳转至登录界面
    

    访问:

    admin:jenkins
    

    jenkis 绑定gitlab

    docker run -d -p 8002:8080 -m 1024m -v ~/jenkins:/var/jenkins_home --name jenkins --restart=always --link gitlab:gitlab.yiyuery.com jenkinsci/jenkins
    

    shell脚本自动化构建Docker镜像

    可通过下方蓝色字体查看可用环境变量,查看shell脚本可用的环境变量:
    在这里插入图片描述

    # 定义变量
    API_NAME="msa-api-hello"
    API_VERSION="0.0.1"
    API_PORT="8101"
    IMAGE_NAME="127.0.0.1:5000/com.msa/$API_NAME:$BUILD_NUMBER"
    CONTAINER_NAME=$API_NAME-$API_VERSION
    
    # 进入target目录并复制Dockerfile文件
    cd $WORKSPACE/target
    cp classes/Dockerfile .
    
    # 构建Docker镜像
    docker build -t $IMAGE_NAME .
    
    # 推送Docker镜像
    docker push $IMAGE_NAME
    
    # 删除Docker容器
    cid=$(docker ps | grep $CONTAINER_NAME |awk '{print $1}')
    if [ x"$cid" != x ]
        then
        docker rm -f $cid
    fi
    
    # 启动Docker容器
    docker run -d -p $API_PORT:8080 --name $CONTAINER_NAME $IMAGE_NAME
    
    # 删除Dockerfile文件
    rm -f Dockerfile
    

    提升maven构建速度

    maven clean install -Dmaven.test.skip=true
    跨过测试类的执行
    

    jenkins 无法通过shell脚本进行docker镜像的构建

    在这里插入图片描述
    解决方案:(未尝试,待尝试)

     - 不使用任何Jenkins镜像,宿主机安装Jenkins [宿主机有Docker服务]
     - 不使用官方Jenkins镜像,自己构造带有Docker服务的Jenkins镜像
     - Docker-in-Docker [DinD]
     - Docker-outside-of-Docker [DooD]
     - 使用Jenkins的Docker插件
    

    检测容器和镜像是否存在,滚动更新

    imagesid=`docker images|grep -i docker-test|awk '{print $3}'`
    project=/testdockfile/
    dockerid=`docker ps -a|grep -i docker-test|awk '{print $1}' `
    echo $project
    if  [ ! -n "$imagesid" ];then
       echo $imagesid "is null"
    else
        docker rmi $imagesid -f
    fi
    cd $project
    
    docker build -t docker-test .
    
    if  [ -n "$dockerid" ]  ;then
       docker stop $dockerid
       docker rm -f $dockerid
    else
       echo 'dockerid is null'
    fi
    docker run -it -d -p 8080:8080 -t "docker-test"
    

    其他相关博文

  • 相关阅读:
    linq.js
    ES6入门
    Visual Studio Code之常备快捷键
    JavaScript——数组
    谈程序员的出路
    优秀博文
    多媒体封装格式详解---MP4
    音视频文件分析工具
    offsetof(s,m)解析
    GCC 提供的原子操作
  • 原文地址:https://www.cnblogs.com/aixing/p/13327253.html
Copyright © 2011-2022 走看看