dockerExecute 函數(shù)和docker.build的區(qū)別解析
一、dockerExecute介紹
dockerExecute
通常是一個(gè)自定義的函數(shù)或者由特定的 Jenkins 庫(如 piper-lib
)提供,用于在 Docker 容器中執(zhí)行特定的命令。這類函數(shù)可以幫助在構(gòu)建或測(cè)試階段管理 Docker 容器的生命周期,確保步驟在容器內(nèi)運(yùn)行。它的作用是啟動(dòng)一個(gè) Docker 容器,并在該容器中執(zhí)行提供的命令.
1、使用場(chǎng)景:
- 執(zhí)行需要隔離環(huán)境的任務(wù):當(dāng)你需要在指定的 Docker 容器中運(yùn)行特定的命令,例如運(yùn)行測(cè)試腳本、構(gòu)建項(xiàng)目等。
- 保證環(huán)境一致性:確保在一個(gè)隔離的、標(biāo)準(zhǔn)化的 Docker 容器中運(yùn)行任務(wù),從而消除環(huán)境差異帶來的問題。
- 動(dòng)態(tài)設(shè)置:允許對(duì)容器的配置進(jìn)行更細(xì)粒度的控制,如動(dòng)態(tài)設(shè)置環(huán)境變量、掛載卷等。
2、dockerexecute方法的使用介紹
因?yàn)槲业臏y(cè)試背景正好是 公司內(nèi)部的 Docker 鏡像存儲(chǔ)庫中的有一個(gè)現(xiàn)成的專用于測(cè)試的鏡像;所以我直接在這個(gè)pipline腳本中去運(yùn)用了這個(gè)方法,給大家看個(gè)例子順便講解一下:
stage('test') { node { dockerExecute(script: this, dockerImage: "your-docker-image", dockerName: 'your-docker-name'{ // 在 Docker 容器內(nèi)部執(zhí)行以下命令 sh ''' //例如安裝依賴,設(shè)置環(huán)境變量,執(zhí)行關(guān)鍵腳本等等 python main.py ''' }
3、dockerExecute 接受的參數(shù)解釋:
script: this
:- 把
this
傳遞給script
參數(shù)。它通常用于在dockerExecute
函數(shù)內(nèi)部引用當(dāng)前腳本或上下文。
- 把
dockerImage: "your-docker-image",
- 指定 Docker 鏡像的名稱。這個(gè)鏡像往往包含了你所需要的環(huán)境(例如特定版本的 Python 及相關(guān)工具和依賴)。
dockerName: 'your-docker-name'
- 設(shè)置 Docker 容器的名稱。這有助于在 Jenkins 日志和其他地方識(shí)別運(yùn)行的容器。
作用總結(jié)
- 在指定的 Docker 鏡像基礎(chǔ)上啟動(dòng)一個(gè) Docker 容器。
- 參數(shù)
script: this
引用當(dāng)前腳本上下文。 - 參數(shù)
dockerImage
指定要使用的 Docker 鏡像。 - 參數(shù)
dockerName
為啟動(dòng)的容器命名。
二、docker.build介紹
docker.build
是 Jenkins 的 Docker 插件提供的一個(gè)方法,用于構(gòu)建 Docker 鏡像。它會(huì)讀取當(dāng)前目錄下的 Dockerfile
并構(gòu)建一個(gè)新的 Docker 鏡像,有助于將你的應(yīng)用和所有的依賴封裝到一個(gè)標(biāo)準(zhǔn)的鏡像中。
1、使用場(chǎng)景:
- 構(gòu)建新的 Docker 鏡像:當(dāng)你需要基于 Dockerfile 構(gòu)建一個(gè)新的 Docker 鏡像時(shí)使用。
- 版本控制和部署:將應(yīng)用打包成 Docker 鏡像,作為 CI/CD 流程的一部分提交到 Docker Registry 或用于部署。
2、結(jié)合使用
- 典型的工作流可能涉及先用
docker.build
構(gòu)建鏡像,然后用該鏡像運(yùn)行某些任務(wù),如測(cè)試套件。
3、定義場(chǎng)景
- 假設(shè)你有一個(gè) Python 項(xiàng)目,你想要構(gòu)建并在 Docker 容器中運(yùn)行測(cè)試。
- 你需要在項(xiàng)目根目錄下創(chuàng)建一個(gè)Jenkinsfile和一個(gè)dockerfile
(1)dockerfile示例:
# 使用已有基礎(chǔ)鏡像 FROM your-docker-image # 設(shè)置工作目錄 WORKDIR /web-test # 安裝系統(tǒng)依賴包括 chromedriver 和 google-chrome RUN apt-get update && apt-get install -y \ xvfb \ x11-utils \ libgl1-mesa-glx \ wget \ unzip \ curl \ gnupg \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 安裝 chromedriver RUN wget -O /tmp/chromedriver.zip https://chromedriver.storage.googleapis.com/113.0.5672.63/chromedriver_linux64.zip \ && unzip /tmp/chromedriver.zip -d /usr/local/bin/ \ && rm /tmp/chromedriver.zip # 下載并安裝 google-chrome RUN wget -O /tmp/google-chrome.deb https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb \ && apt-get update && apt-get install -y --no-install-recommends /tmp/google-chrome.deb \ && rm /tmp/google-chrome.deb # 將 requirements.txt 復(fù)制到工作目錄 COPY requirements.txt . # 安裝 Python 依賴 RUN pip install --no-cache-dir -r requirements.txt # 將項(xiàng)目文件復(fù)制到工作目錄 COPY . . # 設(shè)置環(huán)境變量 ENV DISPLAY=:99 # 啟動(dòng) Xvfb 并運(yùn)行應(yīng)用 CMD Xvfb :99 -screen 0 1920x1080x24 & python PANA/GenerateReport.py
(2)Jenkinsfile示例:
@Library(["piper-lib", "piper-lib-os"]) _ pipeline { agent any stages { stage('checkout') { steps { checkout scm } } stage('build-image') { steps { script { // 使用當(dāng)前目錄下的 Dockerfile 構(gòu)建新的 Docker 鏡像 docker.build('my-repo/my-python-app:latest', '-f Dockerfile .') } } } stage('test') { steps { script { dockerExecute(script: this, dockerImage: "my-repo/my-python-app:latest", dockerName: 'python') { sh ''' set -e # 設(shè)置 DISPLAY 環(huán)境變量 export DISPLAY=:99 # 啟動(dòng) Xvfb 并在后臺(tái)運(yùn)行 Xvfb :99 -screen 0 1920x1080x24 & # 等待 Xvfb 完全啟動(dòng) sleep 5 # 打印 Python 版本信息 python --version # 升級(jí) pip python -m pip install --upgrade pip # 切換到工作目錄 cd $WORKSPACE # 安裝 Python 依賴 python -m pip install -r requirements.txt # 運(yùn)行 Python 腳本 python PANA/GenerateReport.py # 可選:確保完成后停止 Xvfb killall Xvfb ''' } } } } } post { always { echo 'Cleaning up...' // 放置任何清理步驟 } success { echo 'Pipeline succeeded' } failure { echo 'Pipeline failed' } } }
三、關(guān)鍵區(qū)別
1、構(gòu)建與運(yùn)行:
docker.build
: 用于構(gòu)建 Docker 鏡像,基于項(xiàng)目?jī)?nèi)的 Dockerfile。dockerExecute
: 用于在構(gòu)建好的 Docker 鏡像基礎(chǔ)上運(yùn)行命令。
2、具體用途:
docker.build
: 主要用于 CI 流程中的構(gòu)建步驟,確保應(yīng)用代碼和依賴打包在一個(gè)鏡像中。dockerExecute
: 用于在特定的 Docker 鏡像中執(zhí)行任務(wù),適合用于測(cè)試、執(zhí)行腳本等需要隔離環(huán)境的步驟。
到此這篇關(guān)于dockerExecute 函數(shù)和docker.build的區(qū)別的文章就介紹到這了,更多相關(guān)dockerExecute 函數(shù)和docker.build內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker容器時(shí)間與宿主機(jī)不一致/宿主機(jī)時(shí)間不同步校驗(yàn)問題
在Docker容器中,若未單獨(dú)配置localtime,可能導(dǎo)致時(shí)間與宿主機(jī)不一致,例如UTC與CST(東八區(qū))相差8小時(shí),解決方法包括在啟動(dòng)時(shí)通過docker run添加時(shí)間參數(shù),使用Dockerfile設(shè)置,或通過docker-compose配置,對(duì)于已運(yùn)行的容器2024-10-10Docker安裝Jenkins并部署Maven項(xiàng)目詳細(xì)教程
這篇文章主要給大家介紹了關(guān)于Docker安裝Jenkins并部署Maven項(xiàng)目的相關(guān)資料,持續(xù)集成、持續(xù)交付不僅可以提示開發(fā)效率,還可以節(jié)省很多測(cè)試和運(yùn)維的成本,需要的朋友可以參考下2023-12-12docker中鏡像映射和端口映射的實(shí)現(xiàn)步驟
本文介紹了在Docker中進(jìn)行鏡像映射和端口映射,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11docker 移除掉運(yùn)行不正常的container操作
這篇文章主要介紹了docker 移除掉運(yùn)行不正常的container操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03基于Dockerfile創(chuàng)建zabbix監(jiān)控體系代碼實(shí)例
這篇文章主要介紹了基于Dockerfile創(chuàng)建zabbix監(jiān)控體系代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05