八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目

0. 提前准备:(可参考前面的博文)

1) CentOS服务器(阿里云ECS)
2) CentOS安装Docker
3)Docker安装Jenkins
4)Docker安装Portainer(非必须)
5)开通阿里云容器镜像服务

1. 创建一个Spring Boot项目docker-test,加入docker配置**

1)POM.xml文件如下



    4.0.0

    com.kevin
    docker-test
    0.0.1-SNAPSHOT
    docker-test
    Demo project for Docker Test

    
        org.springframework.boot
        spring-boot-starter-parent
        2.1.6.RELEASE
         
    

    
        1.8
        true
        ${version}-${maven.build.timestamp}
        yyyyMMddHHmmss
        registry.cn-beijing.aliyuncs.com/kevin4j
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        ${project.artifactId}.${maven.build.timestamp}
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            

            
                com.spotify
                docker-maven-plugin
                0.4.14
                

                    
                    ${docker.image.prefix}/${name}
                    
                        ${maven.build.version}
                    

                    
                    ${project.basedir}/src/main/docker

                    
                        
                            /
                            ${project.build.directory}
                            ${project.artifactId}.${maven.build.timestamp}.jar
                        
                    

                    
                    kevin4j-registry
                
            
        
    


说明:
docker.image.prefix 填写镜像仓库的命名空间地址
build引入docker-maven-plugin
imageName 镜像名称,对应云镜像仓库地址
imageTag 镜像版本号
dockerDirectory Dockerfile所在的路径
resource 构建镜像所含的资源文件
serverId 对应maven配置文件中的server配置

2) src/main/docker加入Dockerfile配置文件

FROM openjdk:8-jdk-alpine
WORKDIR /kevin4j
ADD *.jar docker-test.jar
ENTRYPOINT java -Djava.security.egd=file:/dev/./urandom -Duser.timezone=GMT+08 -Dfile.encoding=UTF-8 -server -Xverify:none  -jar  ${jvmoptions}  docker-test.jar --spring.profiles.active=${profile}

3) 提供一个测试接口

@Controller
@ResponseBody
public class HelloController {

    @RequestMapping("/sayHello")
    public String sayHello(String name){
        return "Hello "+ (StringUtils.isEmpty(name) ? "World" : name);
    }
}

4)将项目上传至github(git)

2. jenkins配置maven

1)在jenkins->全局工具配置Maven自动安装

八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第1张图片

2)找到jenkins下maven的配置文件并加入server配置

/var/lib/docker/volumes/jenkins_home/_data/tools/hudson.tasks.Maven_MavenInstallation/maven/conf/settings.xml
八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第2张图片
加入以下配置:都是必填


  kevin4j-registry
  阿里云账号
  镜像仓库密码
  
	阿里云绑定的邮箱
  

3. jenkins配置任务

1)jenkins->系统配置中配置SSH Server,用来连接到服务器并执行脚本

八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第3张图片

2)jenkins->新建任务->构建一个maven项目

配置源码github

八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第4张图片

配置docker地址环境变量

八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第5张图片

配置打包指令

八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第6张图片

上传镜像后服务端执行指令,停止并删除服务,从镜像仓库拉取最新镜像并运行

八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第7张图片

start.sh脚本内容如下
#!/bin/sh

version=""

if [ "$1" ];then
	version=$1
else
	version="latest"
fi

docker stop docker-test
docker rm docker-test
docker login -u "镜像仓库账号" -p "镜像仓库密码" registry.cn-beijing.aliyuncs.com
docker pull registry.cn-beijing.aliyuncs.com/kevin4j/docker-test:$version
docker run -e profile='dev' --name docker-test --restart=always -p 8090:8090 -v /etc/localtime:/etc/localtime:ro  -v /kevin4j/docker-test/logs:/kevin4j/logs -d registry.cn-beijing.aliyuncs.com/kevin4j/docker-test:$version

3)执行任务,查看控制台输出

八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第8张图片
八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第9张图片
八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第10张图片
八、Docker+jenkins+maven+github+阿里云镜像仓库持续化部署spring boot项目_第11张图片

4)调用服务,大功告成,注意服务器的安全组需要开放8090端口公网才可访问

在这里插入图片描述

可能存在问题:

1. 执行start.sh脚本时提示/bin/sh^M:bad interpreter: No such file or directory

原因:该脚本文件在windows系统中编辑过,引入了不可见的字符,这是不同系统的编码格式所致!

解决方案:
1.删除该脚本文件
rm start.sh //确保windows系统有备份
2.新建脚本文件
touch start.sh
3.修改脚本文件的权限
chmod 755 start.sh //增加脚本可执行权限
4.编辑脚本内容
vim start.sh
再将脚本内容复制过来,保存退出即可。(xshell软件操作)

你可能感兴趣的:(docker)