基于Docker的可持續(xù)交付問題
在測試的立場上,希望開發(fā)編寫的代碼都是經(jīng)過開發(fā)的單元測試的,但是事實上,這中間總是存在理想和現(xiàn)實的差距,既然如此,我們何不來開發(fā)部署環(huán)境后,對服務進行自動化測試驗證了。整體的設計思路就是開發(fā)編寫的代碼,使用Dockerfile構建成鏡像文件,然后使用docker-compose自動化啟動鏡像文件,下一步其實就很簡單了,我們測試這邊進行智能化的自動驗證,其實在前面的文章體系中,介紹中智能化測試完成后,在測試結束的時候出具體的測試報告以及如果存在問題,觸發(fā)整體報警的機制。本文章系列中主要結合CI持續(xù)集成的工具,把這個過程完全的自動化,以及智能化的過程。當然,使用的技術棧主要是Spring Boot。
創(chuàng)建Spring Boot的項目后,這地方簡單的寫一個測試的接口,controller層源代碼具體如下:
package com.example.app;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class AppController
{
@RequestMapping("/index")
public String hello()
{
return "Hello SpringBoot!";
}
@RequestMapping("/testDev")
public String testDev()
{
return "測試開發(fā)工程師";
}
}這部分的代碼其實相對而言是非常簡單的,這里就不做詳細的解釋了。編寫代碼完成后,下來編寫Dockerfile的文件來構建鏡像,Dockerfile在項目中存放的位置主要是在src/main下的docker文件夾,創(chuàng)建docker文件夾后,在里面創(chuàng)建Dockerfile的文件,然后在里面包編寫需要構建鏡像的內容信息,具體目錄結構如下所示:

Dockerfile文件夾的內容具體為:
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"]
下來在docker的文件夾創(chuàng)建docker-compose.yml文件,在該文件主要定義鏡像的資源,網(wǎng)絡以及啟動停止的過程,該文件的內容信息具體如下:
version: '3.2'
services:
app:
image: app:0.0.1-SNAPSHOT
hostname: localhost
ports:
- "8081:8081"
networks:
- mynetwork
networks:
mynetwork:
external: true在如上的文件中可以看到自定義了網(wǎng)絡是mynetwork,在docker中可以創(chuàng)建網(wǎng)絡,以及查看目前已有的網(wǎng)絡信息,具體如下:
docker network ls NETWORK ID NAME DRIVER SCOPE 5e0d06b35341 bridge bridge local 34f731bed1dc host host local 4b5926f1e44d mynetwork bridge local
下來編寫測試的代碼,測試的代碼這里使用Python語言結合Pytest測試框架來編寫,具體測試模塊test_sprintboot.py的源碼如下:
import requests
import pytest
def test_springboot_index():
r=requests.get("http://localhost:8081/index")
assert r.status_code==200
def test_springboot_testDev():
r=requests.get("http://localhost:8081/testDev")
assert r.status_code == 200這個測試代碼相對而言是比較簡單的,這里主要需要驗證的是服務自動化部署后智能化的驗證。
在如上的準備工作做好,下來在Jenkins中創(chuàng)建Pipeline的項目,Pipeline script的腳本具體如下:
pipeline{
agent any
stages{
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'''
}
}
}
}下來開始在CI中構建和執(zhí)行過程,構建后可視化的界面信息如下所示:

輸出的詳細信息在這里只顯示部分,具體如下:
======================== 2 passed, 3 warnings in 0.72s ========================= [Pipeline] } [Pipeline] // stage [Pipeline] } [Pipeline] // node [Pipeline] End of Pipeline Finished: SUCCESS
對于質量交付團隊而言,需要思考的點是,我們怎么樣結合現(xiàn)有的技術來達成我們的目標和質量驗證的手段。其實一種驗證的研發(fā)體系流程是開發(fā)無論如何需要對自己編寫的代碼進行單元測試,這樣其實一個體系它是通過,整體體系我們完全可以持續(xù)流水線的方式來進行驗證,從而提高交付的效率以及提交給測試團隊是高質量的代碼。其實如上的思路很簡單,就是從Docker構建鏡像,到啟動容器,以及我們進行冒煙測試驗證,當然后續(xù)還有很多的流程,比如測試團隊其他的驗證手段,比如代碼質量審計,API等驗證。感謝您的閱讀和關注,后續(xù)會持續(xù)進行更新。
到此這篇關于基于Docker的可持續(xù)交付的文章就介紹到這了,更多相關Docker可持續(xù)交付內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
docker?run?-d和docker?run?-it的區(qū)別詳解
記得第一次接觸docker的時候,教程中寫著docker?run?-it之類的命令,當時對這個-it選項是一知半解,下面這篇文章主要給大家介紹了關于docker?run?-d和docker?run?-it的區(qū)別的相關資料,需要的朋友可以參考下2023-05-05
如何使用 docker compose 搭建 fastDFS文件服務器
這篇文章主要介紹了如何使用 docker compose 搭建 fastDFS文件服務器,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-10-10
Docker mongoDB 4.2.1 安裝并收集springboot日志的步驟詳解
這篇文章主要介紹了Docker mongoDB 4.2.1 安裝并收集springboot日志,本文分步驟通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
Gogs+Jenkins+Docker 自動化部署.NetCore的方法步驟
這篇文章主要介紹了Gogs+Jenkins+Docker 自動化部署.NetCore,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-06-06
在Docker中部署Confluence和jira-software的方法步驟
這篇文章主要介紹了在Docker中部署Confluence和jira-software的方法步驟,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06

