• dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器


    # dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器

    环境centos 7.4 docker 18.03.0-ce

    nuxus,创建maven本地源(可选,编译java时下载jar依赖包)
    maven,编译打包java web为war包
    jenkins,自动化构建、发布等

    jenkins容器里不能执行docker命令,用ssh远程方式
    jenkins容器 -> ssh -> maven编译java web -> 构建docker镜像,war包+tomcat
    war包+tomcat重新构建镜像,即可运行java web

    ##############################

    # Nexus仓库(基于Docker)

     #下载镜像
    docker pull sonatype/nexus3
    
     #data目录设置
    mkdir -p     /docker/cicd/nexus-data
    chown -R 200 /docker/cicd/nexus-data
    
     #运行nuxus容器
    docker rm -f nexus
    docker run -dit -p 8081:8081 --name nexus 
     -v /etc/localtime:/etc/localtime:ro 
     -v /docker/cicd/nexus-data:/nexus-data 
     --restart=always sonatype/nexus3
    
     #查看
    docker ps -l
    docker logs nexus
    
     #浏览器打开,右上角->Sign in ,初始账户admin admin123 
    
     #配置阿里maven源加快下载
     #新建maven2(proxy)源
     #或直接更改maven-central,原地址 https://repo1.maven.org/maven2/
     #阿里源地址 http://maven.aliyun.com/nexus/content/groups/public/
    

    ##############################

    # maven容器编译java

     #下载镜像
    docker pull maven:alpine
    
     #配置maven使用私有仓库(使用上面搭建的nuxus)
     #ip地址为neuxs的10.2.1.18为内网地址
    mkdir -p /docker/cicd/maven-data
    cd cd /docker/cicd
    cat > /docker/cicd/maven-settings.xml<<EOF
    <?xml version="1.0" encoding="UTF-8"?>  
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"   
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
              xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">  
      <mirrors>  
         <mirror>
                <id>elven-maven</id>
                <name>elven-maven</name>
                <url>http://10.2.1.18:8081/repository/maven-public/</url>
                <mirrorOf>central</mirrorOf>
         </mirror>
      </mirrors>  
      <localRepository>/repository</localRepository>
    </settings> 
    EOF
    

    maven容器编译java测试

     #下载源码(我写的hello world测试)  
    mkdir -p /docker/cicd/git
    cd /docker/cicd/git
    git clone https://gitee.com/almi/helloworld.git
    
     #运行maven容器构建war包测试  
    docker run --rm 
     -v /etc/localtime:/etc/localtime:ro 
     -v /docker/cicd/maven-settings.xml:/usr/share/maven/conf/settings.xml 
     -v /docker/cicd/maven-data:/repository 
     -v /docker/cicd/git:/git 
     maven:alpine 
     mvn clean package -f /git/helloworld/pom.xml
    
     #查看
    ls -l /docker/cicd/git/helloworld/target/
    
     #如上maven容器构建war,是挂载本地源码目录到maven容器编译war包  
     #另一种方式,构建docker镜像时调用maven编译,然后创建容器拷贝出war包  
    

    ##############################

    # jenkins容器

     #下载镜像 
    docker pull jenkins:alpine
    
     #data目录设置 
    mkdir -p /docker/cicd/jenkins-data
    cd /docker/cicd
    cat > /docker/cicd/jenkins-data/log.properties <<EOF
    handlers=java.util.logging.ConsoleHandler
    jenkins.level=FINEST
    java.util.logging.ConsoleHandler.level=FINEST
    EOF
     #目录权限为1000 
    chown -R 1000:1000 /docker/cicd/jenkins-data
    
     #启动jenkins容器  
    docker rm -f jenkins
    docker run --name jenkins -dit 
    -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai 
     -v /etc/localtime:/etc/localtime:ro 
     -v /docker/cicd/jenkins-data:/var/jenkins_home 
     --restart=always -p 8082:8080 jenkins:alpine
    
     #查看  
    docker ps -l
    docker logs jenkins
    
     #查看初始密码 
    cat /docker/cicd/jenkins-data/secrets/initialAdminPassword
    
     #浏览器登录,安装插件   
    
    

    # jenkins构建运行java web的docker容器

    步骤:jenkins -> git拉源码 -> 构建war包 -> docker镜像 -> 运行
    jenkins容器无法直接运行宿主机docker命令,可使用ssh远程方式

    • 1、安装Publish Over SSH插件
      系统管理 -> 插件管理 -> 可选插件,搜索Publish Over SSH 安装
    • 2、配置ssh主机
      系统管理 -> 系统设置 -> Publish Over SSH标签配置,添加SSH Servers主机
      可使用秘钥或密码认证,Test Configuration是否配置成功
      Path to key可以这样/root/.ssh/id_dsa
      Hostname使用ip地址, Username 登录用户如 root

    #创建构建

    创建一个自由风格的软件项目 ->
    源码管理 -> git -> https://gitee.com/almi/helloworld.git
    增加构建后操作步骤——Send build artifacts over SSH
    Exec command:在目标主机执行的shell命令
    执行的shell如下

    env Gitdir=${JOB_NAME}  bash /docker/cicd/jenkins-data/workspace/${JOB_NAME}/build.sh
    

    build.sh的shell内容如下:

    #!/bin/bash
    Gitdir=${Gitdir:-helloworld}
    #
    echo 'docker run maven --------'
    docker run --rm 
     -v /docker/cicd/maven-settings.xml:/usr/share/maven/conf/settings.xml 
     -v /docker/cicd/maven-data:/repository 
     -v /docker/cicd/jenkins-data/workspace/:/git/ 
     maven:alpine 
     mvn clean package -f /git/$Gitdir/pom.xml
    #
    echo 'docker build --------'
    cd /docker/cicd/jenkins-data/workspace/$Gitdir
    docker build -t helloworld .
    docker images helloworld
    #
    echo "docker run helloworld --------"
    docker rm -f helloworld
    sleep 1
    [[ `netstat -lntp |grep 8090 |wc -l` -ge 1 ]] && { echo "Port 8090 is used";exit; }
    docker run -dit --name helloworld -p 8090:8080 helloworld
    [[ -n `docker ps |awk '/8090/{print $1}'` ]] && { echo "run helloworld successful"; } || { echo "run helloworld error"; }
    docker ps -l
    
    #立即构建->打开构建,Console Output控制台,查看日志

    #构建完成后,浏览器打开ip:8090看到Hello World ! 页面即构建成功

    jenkins还有更多实用功能如web钩子、定时任务、邮件通知等……

  • 相关阅读:
    BZOJ 1718: [Usaco2006 Jan] Redundant Paths 分离的路径( tarjan )
    BZOJ 1040: [ZJOI2008]骑士( 树形dp )
    BZOJ 1691: [Usaco2007 Dec]挑剔的美食家( 平衡树 )
    HDU 5667 Sequence 矩阵快速幂
    FZU 2225 小茗的魔法阵 扫描线+树状数组
    UVA 11916 Emoogle Grid 离散对数 大步小步算法
    UVA 11754 Code Feat 中国剩余定理+暴力
    FZU 2092 收集水晶 dp+bfs
    FZU2090 旅行社的烦恼 巧妙floyd 最短路
    UVA 11426 GCD
  • 原文地址:https://www.cnblogs.com/elvi/p/8884340.html
Copyright © 2020-2023  润新知