前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker下的持续交付

Docker下的持续交付

作者头像
无涯WuYa
发布2022-06-16 14:55:27
3310
发布2022-06-16 14:55:27
举报

在研发体系的交付下,更加期望的是编写代码完成后,能够进行自动化的环境部署和自动化测试的冒烟测试,这样就可以节省很多的人力成本的验证时间。毕竟在SAAS的架构模式下,会拥有很多的微服务,这些微服务每天都在不停的更新代码,也需要每天不停的进行测试验证。那么在这样的一个过程中,可以完全结合Docker的技术以及结合Jenkins的持续集成的思路,打造一个可持续交付的自动化测试验证的一个过程。

具体的思路就是编写代码完成后,使用Dockerfile自动化的构建镜像,然后使用docker-compose来自动的启动服务后,进行自动化的冒烟测试。当然在这样的一个设计思考中,存在的缺陷是就是下次自动的构建中服务没有停止,同时镜像没有删除,会导致Dockerfile构建镜像的过程中直接失败,因为的原因是镜像已存在。那么可以做一个初始化的处理,也就是前置的动作,在构建镜像前先停止之前的服务,然后删除原来的镜像,这样在后期每次更新代码后进行构建,就不会因为初始化这部分导致流水线失败,这样也就可以打造可持续交付的流水线的作业交付,具体如图所示:

下面详细的介绍下具体实现的细节,这里以SpringBoot为案例,首先需要在项目的src/main的目录下创建docker文件夹,里面编写Dockerfile的文件,文件内容具体如下:

代码语言:javascript
复制
FROM java:8
MAINTAINER 无涯
VOLUME /tmp
RUN mkdir /app
COPY app-0.0.1-SNAPSHOT.jar /app/app.jar
WORKDIR /app
EXPOSE 8081
CMD  ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]

Dcokerfile文件里面详细的定义了构建镜像的过程,下来同理在docker的文件夹下创建docker-compose.yml的文件,文件的内容具体为:

代码语言:javascript
复制
version: '3.2'
services:
  app:
    image: app:0.0.1-SNAPSHOT
    hostname: localhost
    ports:
    - "8081:8081"
    networks:
      - mynetwork
networks:
  mynetwork:
    external: true

主要定义了启动服务的过程,下面需要在pom.xml的文件里面引入docker,具体内容如下:

代码语言:javascript
复制
<!--Docker Maven依赖插件-->
<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <configuration>
        <imageName>${project.name}:${project.version}</imageName>
        <!--Dockerfile文件存储目录-->
        <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>
        <skipDockerBuild>false</skipDockerBuild>
        <resources>
            <resource>
                <directory>${project.build.directory}</directory>
                <include>${project.build.finalName}.jar</include>
            </resource>
        </resources>
    </configuration>
</plugin>

做好这一切的配置好后,下来编写具体的冒烟测试代码,和整合到CI持续集成的平台上,涉及到的脚本如下:

代码语言:javascript
复制
pipeline{
    agent any
    stages{
        stage('init'){
            steps{
                sh '''cd /Applications/code/workSpace/data/app/src/main/docker
                 docker-compose down 
                 sleep 6s
                 docker rmi app:0.0.1-SNAPSHOT
                 sleep 10s
                 '''
            }
        }
        stage('build the image'){
            steps{
                sh '''cd /Applications/code/workSpace/data/app
                mvn clean package  -Dmaven.test.skip=true   docker:build'''
            }
        }
        stage('run the container'){
            steps{
                sh '''cd /Applications/code/workSpace/data/app/src/main/docker
                docker-compose up -d '''
            }
        }
        stage('smoke test'){
            steps{
                sh '''cd /Applications/code/workSpace/data/app/src/main/docker
                sleep 10s
                python3 -m pytest -v test_springboot.py'''
            }
        }
    }
}

结合如上的具体实现细节,就可以打造Docker下的持续交付的过程,也就实现了自动化部署和自动化测试的过程,这样的好处就是拥有很多的微服务也是无所谓的,也是可以使用该思想和具体的技术来打造可持续的交付流水线。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python自动化测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档