美文网首页
docker+docker-compose+jenkins实现项

docker+docker-compose+jenkins实现项

作者: lzm_CX330 | 来源:发表于2021-11-21 15:40 被阅读0次

    1.安装docker

    1.1:下载docker

    yum -y install docker
    

    1.2:启动docker

    systemctl start docker
    

    2.安装docker-compose

    curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
    

    2.1:dokcer-compose集成基础项目环境

    version: '3'
    services:
      jenkins:
        image: 'jenkins/jenkins'
        container_name: jenkins
        restart: always
        environment:
          - TZ=Asia/Shanghai
        ports:
          - '9998:8080'
          - '50000:50000'
        volumes:
          - '/etc/localtime:/etc/localtime'
          - '/home/data/jenkins:/var/jenkins_home'
      mysql:
        environment:
          MYSQL_ROOT_PASSWORD: "a123456"
        image: mysql
        command: mysqld --default-authentication-plugin=mysql_native_password
        container_name: mysql
        restart: always
        ports:
          - "3306:3306"
      redis:
        image: redis
        container_name: redis
        command: redis-server --appendonly yes --requirepass "a123456"
        ports:
          - "6379:6379"
      minio:
        image: minio/minio
        container_name: minio
        restart: always
        ports:
          - 9000:9000
        command: server /data  #指定容器中的目录 /data
        environment:
          MINIO_ACCESS_KEY: minioadmin    #管理后台用户名
          MINIO_SECRET_KEY: minioadmin #管理后台密码,最小8个字符
        volumes:
          - ./data:/data              #映射当前目录下的data目录至容器内/data目录
          - ./config:/radar/.minio/     #映射配置目录
    
    

    2.2:jenkins映射文件夹添加权限

     chown -R 1000 /home/data/jenkins
    

    2.3:启动docker-compose

    docker-compose up -d
    

    3.Jenkins相关配置

    3.1:启动jenkins,访问web页面,IP+端口(docker-compose中指定的映射端口,云服务器需配置安全组)

    127.0.0.1:9998
    

    3.2:首次访问需jenkins默认密码,打开jenkins容器日志查看

    docker logs -f --tail=100 jenkins
    
    初始密码.png

    3.3:进入后选择推荐插件(首次会较慢,需等待),创建管理用户

    创建管理账户.png
    实例配置.png
    jenkins首页.png

    3.4:修改中文显示

    3.4.1:下载中文插件 Manage Jenkins->Manage Plugins->可选插件

    下载中文插件.png

    3.4.2:修改配置 Manage Jenkins->Configure System

    修改配置.png

    3.4.3:重启jenkins

    http://ip+port/restart
    
    重启jenkins.png

    3.5:全局工具配置

    JDK.png
    MAVEN.png
    node.png

    配置node时需要先下载NodeJS插件


    CE7CD6D5-EAC5-4c87-9BF0-BEA27C4D10BB.png

    3.6:新建项目

    新建项目.png

    新建一个maven项目时需提前下载 Maven Integration 插件

    3.6.1:git仓库配置

    进入jenkins容器,创建ssh key,并将生成的id_rsa.pub内容上传到git


    jenkins生成sshkey.png
    gitSSH配置.png

    3.6.2:jenkins凭据添加

    SSH KEY凭据.png
    gitee凭据.png
    云服务器凭据.png

    3.6.3:ssh连接配置 系统管理->系统配置

    下载ssh plugin、Publish over SSH插件

    用于jenkins连接宿主机并执行宿主机命令.png
    用于jenkins向宿主机传输文件.png

    3.6.4:钉钉消息推送

    下载dingtalk插件

    3.6.4.1:进入钉钉群,打开群设置,智能群助手,添加机器人

    自定义添加机器人.png
    添加完成.png

    3.6.4.2:配置钉钉消息推送,系统管理->系统配置->钉钉->高级

    测试推送.png

    3.6.5:项目配置

    构建后发送推送.png jenkins构建时拉取项目的配置.png
    构建后配置.png

    shell脚本命令放在文章结尾处

    3.6.6:开始构建

    构建成功.png
    钉钉推送.png

    3.7:构建vue项目

    3.7.1:新建一个自由风格的项目进行配置

    git配置.png
    指定构建环境.png
    执行shell命令.png
    构建后操作.png 构建成功.png
    shell脚本
    #=====================================================================================
    #=================================定义初始化变量======================================
    #=====================================================================================
    #!/bin/bash
    #操作/项目路径(Dockerfile存放的路径)
    BASE_PATH=/usr/local/docker/pjkj-2c
    
    
    # jenkins构建好的源jar路径,jenkins的workspace下,jenkins服务内地址为:/var/jenkins_home/workspace
    #因为docker启动的jenkins,目录进行了宿主机的目录挂载,则使用宿主机目录:  /root/jenkins/workspace
    #完整地址应为:/root/jenkins/workspace/项目名称/target/  后面会进行拼接
    SOURCE_PATH=/usr/local/jenkins/workspace/pjkj-2c/target/
    
    
    #【docker 镜像】【docker容器】【Dockerfile同目录下的jar名字[用它build生成image的jar]】【jenkins的workspace下的项目名称】
    SERVER_NAME=data-server-api
    
    #容器id  [grep -w 全量匹配容器名] [awk 获取信息行的第一列,即容器ID]  [无论容器启动与否,都获取到]
    CID=$(docker ps -a | grep -w "$SERVER_NAME" | awk '{print $1}')
    
    #镜像id  [grep -w 全量匹配镜像名] [awk 获取信息行的第三列,即镜像ID]
    IID=$(docker images | grep -w "$SERVER_NAME" | awk '{print $3}')
    
    
    #源jar完整地址  [jenkins构建成功后,会在自己的workspace/项目/target 下生成maven构建成功的jar包,获取jar包名的完整路径]
    #例如:/usr/local/jenkins/workspace/swapping/target/SERVER_NAME.jar
    SOURCE_JAR_PATH=$(find "$SOURCE_PATH"  -name "*$SERVER_NAME*.jar" )
    
    DATE=`date +%Y%m%d%H%M%S`
    
    
    #=====================================================================================
    #============================对原本已存在的jar进行备份================================
    #=====================================================================================
    
    
    
    # 备份
    function backup(){
        if [ -f "$BASE_PATH/$SERVER_NAME.jar" ]; then
            echo "=========================>>>>>>>$SERVER_NAME.jar 备份..."
                mv $BASE_PATH/$SERVER_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
            echo "=========================>>>>>>>备份老的 $SERVER_NAME.jar 完成"
    
        else
            echo "=========================>>>>>>>老的$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"
        fi
    }
    
    
    
    #=====================================================================================
    #=========================移动最新源jar包到Dockerfile所在目录=========================
    #=====================================================================================
    
    
    
    # 查找源jar文件名,进行重命名,最后将源文件移动到Dockerfile文件所在目录
    function transfer(){
    
    
        echo "=========================>>>>>>>源文件完整地址为 $SOURCE_JAR_PATH"
        echo "=========================>>>>>>>重命名源文件"
            mv $SOURCE_JAR_PATH  $SOURCE_PATH$SERVER_NAME.jar
    
        echo "=========================>>>>>>>最新构建代码 $SOURCE_PATH$SERVER_NAME.jar 迁移至 $BASE_PATH"
            cp $SOURCE_PATH$SERVER_NAME.jar $BASE_PATH
    
        echo "=========================>>>>>>>迁移完成Success"
    
    }
    
    
    
    #=====================================================================================
    #==================================构建最新镜像=======================================
    #=====================================================================================
    
    
    
    # 构建docker镜像
    function build(){
    
        #无论镜像存在与否,都停止原容器服务,并移除原容器服务
        echo "=========================>>>>>>>停止$SERVER_NAME容器,CID=$CID"
        docker stop $CID
    
        echo "=========================>>>>>>>移除$SERVER_NAME容器,CID=$CID"
        docker rm $CID
    
        #无论如何,都去构建新的镜像
        #构建新的镜像之前,移除旧的镜像
        if [ -n "$IID" ]; then
            echo "=========================>>>>>>>存在$SERVER_NAME镜像,IID=$IID"
    
    
            echo "=========================>>>>>>>移除老的$SERVER_NAME镜像,IID=$IID"
            docker rmi $IID
    
            echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,开始---->"
            cd $BASE_PATH
            docker build -t $SERVER_NAME .
            echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,完成---->"
    
        else
            echo "=========================>>>>>>>不存在$SERVER_NAME镜像,构建新的镜像,开始--->"
    
    
            cd $BASE_PATH
            docker build -t $SERVER_NAME .
            echo "=========================>>>>>>>构建新的$SERVER_NAME镜像,结束--->"
        fi
    }
    
    
    #=====================================================================================
    #==============================运行docker容器,启动服务===============================
    #=====================================================================================
    
    
    # 运行docker容器
    # 先备份老的jar包
    # 再移动新的jar包到Dockerfile文件所在目录
    # 接着,构建新的镜像
    # 最后运行最新容器,启动服务
    function run(){
        backup
        transfer
        build
    
        docker run --name $SERVER_NAME -itd --net=host -v /etc/localtime:/etc/localtime:ro  -v /usr/local:/usr/local $SERVER_NAME
    }
    
    #入口
    run
    

    相关文章

      网友评论

          本文标题:docker+docker-compose+jenkins实现项

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