溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

如何進(jìn)行基于Docker的可持續(xù)交付問題分析

發(fā)布時間:2022-01-06 14:30:45 來源:億速云 閱讀:137 作者:柒染 欄目:開發(fā)技術(shù)

這期內(nèi)容當(dāng)中小編將會給大家?guī)碛嘘P(guān)如何進(jìn)行基于Docker的可持續(xù)交付問題分析,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

在測試的立場上,希望開發(fā)編寫的代碼都是經(jīng)過開發(fā)的單元測試的,但是事實上,這中間總是存在理想和現(xiàn)實的差距,既然如此,我們何不來開發(fā)部署環(huán)境后,對服務(wù)進(jìn)行自動化測試驗證了。整體的設(shè)計思路就是開發(fā)編寫的代碼,使用Dockerfile構(gòu)建成鏡像文件,然后使用docker-compose自動化啟動鏡像文件,下一步其實就很簡單了,我們測試這邊進(jìn)行智能化的自動驗證,在測試結(jié)束的時候出具體的測試報告以及如果存在問題,觸發(fā)整體報警的機(jī)制。主要結(jié)合CI持續(xù)集成的工具,把這個過程完全的自動化,以及智能化的過程。當(dāng)然,使用的技術(shù)棧主要是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ā)工程師";
   }
}

這部分的代碼其實相對而言是非常簡單的,這里就不做詳細(xì)的解釋了。編寫代碼完成后,下來編寫Dockerfile的文件來構(gòu)建鏡像,Dockerfile在項目中存放的位置主要是在src/main下的docker文件夾,創(chuàng)建docker文件夾后,在里面創(chuàng)建Dockerfile的文件,然后在里面包編寫需要構(gòu)建鏡像的內(nèi)容信息,具體目錄結(jié)構(gòu)如下所示:

如何進(jìn)行基于Docker的可持續(xù)交付問題分析

Dockerfile文件夾的內(nèi)容具體為:

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)絡(luò)以及啟動停止的過程,該文件的內(nèi)容信息具體如下:

version: '3.2'
services:
  app:
    image: app:0.0.1-SNAPSHOT
    hostname: localhost
    ports:
    - "8081:8081"
    networks:
      - mynetwork
networks:
  mynetwork:
    external: true

在如上的文件中可以看到自定義了網(wǎng)絡(luò)是mynetwork,在docker中可以創(chuàng)建網(wǎng)絡(luò),以及查看目前已有的網(wǎng)絡(luò)信息,具體如下:

docker network ls
NETWORK ID           NAME              DRIVER              SCOPE
5e0d06b35341         bridge            bridge              local
34f731bed1dc         host              host                local
4b5926f1e44d         mynetwork         bridge              local

下來編寫測試的代碼,測試的代碼這里使用Python語言結(jié)合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

這個測試代碼相對而言是比較簡單的,這里主要需要驗證的是服務(wù)自動化部署后智能化的驗證。

在如上的準(zhǔn)備工作做好,下來在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中構(gòu)建和執(zhí)行過程,構(gòu)建后可視化的界面信息如下所示:

如何進(jìn)行基于Docker的可持續(xù)交付問題分析

輸出的詳細(xì)信息在這里只顯示部分,具體如下:

======================== 2 passed, 3 warnings in 0.72s =========================
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

對于質(zhì)量交付團(tuán)隊而言,需要思考的點是,我們怎么樣結(jié)合現(xiàn)有的技術(shù)來達(dá)成我們的目標(biāo)和質(zhì)量驗證的手段。其實一種驗證的研發(fā)體系流程是開發(fā)無論如何需要對自己編寫的代碼進(jìn)行單元測試,這樣其實一個體系它是通過,整體體系我們完全可以持續(xù)流水線的方式來進(jìn)行驗證,從而提高交付的效率以及提交給測試團(tuán)隊是高質(zhì)量的代碼。

上述就是小編為大家分享的如何進(jìn)行基于Docker的可持續(xù)交付問題分析了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI