Jenkins+Docker 部署Maven聚合工程

作者: 压根儿没快乐过 | 来源:发表于2019-05-21 00:06 被阅读1次

    这几天,把公司的预发布环境,改成docker部署,遇到了一些坑,有jenkins里的部署脚本的问题,也有harbor仓库的问题,还有docker远程访问的问题,还有DooD....一堆坑


    0.封面.png

    Jenkins里,没有直接安装在Centos7上,是用的docker安装的jenkins

    1.安装Docker

    这个就简单了,随便都可以搜到,这里只是贴我安装的命令

    # 卸载旧版本
    sudo yum remove docker docker-client  docker-client-latest  docker-common  docker-latest  docker-latest-logrotate  docker-logrotate  docker-selinux  docker-engine-selinux  docker-engine
                      
    # 安装
    sudo yum install -y yum-utils  device-mapper-persistent-data  lvm2
               
    # 添加yum源
    sudo yum-config-manager --add-repo  https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
        
    # 安装
    yum makecache fast
    yum -y install docker-ce
    
    启动
    systemctl enable docker
    systemctl start docker
    

    2.安装Docker版本的Jenkins

    先这样安装,在用Jenkins打镜像包的时候,就会有DooD的问题

    docker run -d \
        -v /var/run/docker.sock:/var/run/docker.sock \
        -v $(which docker):/usr/bin/docker 
        -p 8080:8080 \
        jenkins
    
    • 第2行是将宿主机的/var/run/docker.sock映射到容器中,这样在容器中运行的docker命令,就会在宿主机上来执行。
    • 第3行是将宿主机的docker程序映射进容器中,这样本身没有安装docker的jenkins容器就可以执行docker命令了(事实上容器里是没有运行docker的服务的,我们只是用这个映射进容器的docker来作为客户端发送docker的指令到/var/run/docker.sock而已,儿/var/run/docker.sock已经被链接到宿主机了)

    访问:http://localhost:8080,安装插件,设置管理员密码

    3.介绍项目的目录,以及写Dockerfile

    1.这里是用的是Maven的聚合工程

    1.项目目录.png

    2.Dockerfile

    FROM openjdk:8-jdk-alpine
    VOLUME /tmp
    ADD admin-server-0.0.1-SNAPSHOT.jar app.jar
    ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
    

    admin-server-0.0.1-SNAPSHOT.jar就是,maven打完包的包名

    3.Maven的pom.xml配置

    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>0.4.13</version>
        <configuration>
            <imageName>springboot/${project.artifactId}</imageName>
            <dockerDirectory>src/main/docker</dockerDirectory>
            <resources>
                <resource>
                    <targetPath>/</targetPath>
                    <directory>${project.build.directory}</directory>
                    <include>${project.build.finalName}.jar</include>
                </resource>
            </resources>
        </configuration>
    </plugin>
    
    • imageName打的镜像名称,这里的镜像名称是:springboot/admin-server
    • dockerDirectory指定docker文件夹的位置

    4.新建Jenkins配置

    配置Git仓库


    image.png image.png image.png image.png
    • 这个是让公司的运维写的脚本,在构建完成之后,把已经运行的容器
      • docker stop admin-server 停止
      • docker rm admin-server 然后再删除

    然后再运行

    • -p 指定端口
    • -e "SPRING_PROFILES_ACTIVE=prerelease" ,可以看成是启动jar的时候的,java -jar admin-server.jar --spring.profiles.active=prerelease ,指定运行环境
    • -- name 容器别名

    5.出现的问题

    如果docker run jenkins 没有指定

    -v /var/run/docker.sock:/var/run/docker.sock \
    -v $(which docker):/usr/bin/docker 
    

    这里就不能打包,就是因为在jenkins里的容器中,没有安装对象,使用了-v ,就是把jenkins里所需要的docker映射到宿主docker中

    6.小结

    这里只是在Centos7的一台服务器里,安装了docker,运行了jenkins容器,在jenkins容器中,打包镜像,然后再同一台服务器中运行,使用生产中,并不会用这样的方式,下一篇就写使用harbor仓库,安装仓库也是很简单,只是在docker与docker,docker与仓库之间的通信需要https请求,遇到的问题

    7.参考的博客

    1.解决是DooD的问题:http://www.up4dev.com/2018/11/27/run-docker-by-jenkins-in-docker/
    2.更多可访问我的博客:https://yanganlin.com

    相关文章

      网友评论

        本文标题:Jenkins+Docker 部署Maven聚合工程

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