栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

编写Dockerfile和Jenkinsfile文件(最后一步啦)-(Jenkins+Docker自动化部署微服务)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

编写Dockerfile和Jenkinsfile文件(最后一步啦)-(Jenkins+Docker自动化部署微服务)

哎,鸽子王,说好一周至少一篇文章的,谁知道大半个月都没有更新了。

一直在忙,除了要写原有项目的新需求之外,还要参与准备新项目搭建所需要的技术(从0到1的搭建哎)。

我的项目结构是(我在eureka模块xxl-job-admin模块编写dockerfile文件,并导入dockerfile的依赖,所以在Jenkins部署的时候,只会制作这两个模块的镜像)

项目地址 https://gitee.com/li_shi_sheng/k-2000.git

Dockerfile基本命令解析

这里dockerfile基本命令解析,也是跟其他网上的解析大同小异

命令作用
FROM表示当前镜像所依赖的另外一个镜像,即另外一个镜像作为基础镜像(有点像Java中,任何一个类都需要、都会依赖Object类)
MAINTAINER表示当前镜像的制作人(或者一些描述,可选项)
EXPOSE表示镜像对外暴露的端口,外部可以通过暴露的端口,访问到容器内部应用(程序)。这个有点像开端口一样,如果服务器防火墙开了,但相关端口没开,那么外部就访问不到相关应用了。
ARG设置参数(Docker是有一些默认的参数的比如HTTP_PROXY、FTP_PROXY等,每个镜像也会有自带的一些参数如jdk的JAR_FILE)
ADD将宿主主机的文件拷贝到容器内部。格式ADD 参数1 参数2(表示将参数1拷贝到参容器中参数2的路径,并且重命名为参数2)
ENTRYPOINT程序切入点,表示容器创建好之后,内部需要运行的命令。容器启动时第一个运行的命令及其参数,这是与CMD命令差别之一。
一个示例
#使用的JDK版本
FROM java:8
# 作者
MAINTAINER code_ant
#镜像暴露的端口
EXPOSE 8761
#外部传参 传入微服务名字
ARG JAR_FILE
#将镜像添加到容器内  target/${JAR_FILE}这是服务编译打包后的jar文件打包路径  /app.jar是容器内的jar文件路径
ADD target/${JAR_FILE} /app.jar
#容器内部 运行微服务
ENTRYPOINT ["nohup","java", "-jar","/app.jar"]
Jenkinsfile

使用的是Jenkins的流水线部署方式。
使用pipeline语法。

pipline流水线语法,可以去看看B站上的视频就能很快入门了

一个示例
//git凭证Id
def git_auth = "fb6aae20-266b-42f4-bc02-a11bf802f937"
//git的项目地址
def git_url = "https://gitee.com/li_shi_sheng/k-2000.git"

node{
    stage('拉取代码'){
        checkout([$class: 'GitSCM', branches: [[name: "*/${branch}"]], extensions: [], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_url}"]]])
    }

    stage('编译,安装parent工程'){
            sh "mvn -f parent clean install"
    }

    stage('编译,安装common工程'){
        sh "mvn -f common clean install"
    }

    stage('编译,安装eureka-server工程'){
            echo "Building eureka-server"
            sh "mvn -f eureka-server clean install"
            try{
                echo "第一次启动容器eureka-server"
                sh "docker run  --name=eureka-server -d -p 8761:8761 eureka-server:1.0-SNAPSHOT"
            }catch(Throwable e){
                echo "容器eureka-server已经启动,现在终止容器运行"
                sh "docker stop eureka-server"
                echo "移除容器eureka-server"
                sh "docker rm eureka-server"
                echo "重新启动容器eureka-server"
                sh "docker run  --name=eureka-server -d -p 8761:8761 eureka-server:1.0-SNAPSHOT"
                echo "清理旧镜像(状态为none的镜像)"
                sh "docker image prune -f"
            }
    }

    stage('编译,安装gateway工程'){
                sh "mvn -f gateway clean install"
    }
 stage('编译,安装xxl-job-admin工程'){
                echo "Building xxl-job-admin"
                sh "mvn -f xxl-job-admin clean install"
                try{
                    echo "第一次启动容器xxl-job-admin"
                    sh "docker run  --name=xxl-job-admin -d -p 8030:8030 xxl-job-admin:1.0-SNAPSHOT"
                }catch(Throwable e){
                    echo "容器xxl-job-admin已经启动,现在终止容器运行"
                    sh "docker stop xxl-job-admin"
                    echo "移除容器xxl-job-admin"
                    sh "docker rm xxl-job-admin"
                    echo "重新启动容器xxl-job-admin"
                    sh "docker run  --name=xxl-job-admin -d -p 8030:8030 xxl-job-admin:1.0-SNAPSHOT"
                    echo "清理旧镜像(状态为none的镜像)"
                    sh "docker image prune -f"
                }
        }

}

Jenkins部署项目

Dockerfile和Jenkinsfile文件写完之后,把代码上传到远程仓库就可以了,然后使用我们之前安装好的Jenkins构建部署就可以了。

查看构建历史。构建成功之后,最后会输出成功状态。

docker查看容器是否启动。根据下图是可以看出,两个服务已经启动了的。

自动化部署spring boot结束

好了,到此为止,一个简单的自动化部署过程就完成了。

有啥疑惑,留言或者私聊都可以的哈,

最近有点小忙,但每天上下班坐地铁的时候,都会看csdn的文章。加油~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/323591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号