哎,鸽子王,说好一周至少一篇文章的,谁知道大半个月都没有更新了。
一直在忙,除了要写原有项目的新需求之外,还要参与准备新项目搭建所需要的技术(从0到1的搭建哎)。
我的项目结构是(我在eureka模块xxl-job-admin模块编写dockerfile文件,并导入dockerfile的依赖,所以在Jenkins部署的时候,只会制作这两个模块的镜像)
Dockerfile基本命令解析项目地址 https://gitee.com/li_shi_sheng/k-2000.git
这里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查看容器是否启动。根据下图是可以看出,两个服务已经启动了的。
好了,到此为止,一个简单的自动化部署过程就完成了。
有啥疑惑,留言或者私聊都可以的哈,
最近有点小忙,但每天上下班坐地铁的时候,都会看csdn的文章。加油~



