dockerExecute 函數(shù)和docker.build的區(qū)別解析
一、dockerExecute介紹
dockerExecute 通常是一個自定義的函數(shù)或者由特定的 Jenkins 庫(如 piper-lib)提供,用于在 Docker 容器中執(zhí)行特定的命令。這類函數(shù)可以幫助在構(gòu)建或測試階段管理 Docker 容器的生命周期,確保步驟在容器內(nèi)運行。它的作用是啟動一個 Docker 容器,并在該容器中執(zhí)行提供的命令.
1、使用場景:
- 執(zhí)行需要隔離環(huán)境的任務:當你需要在指定的 Docker 容器中運行特定的命令,例如運行測試腳本、構(gòu)建項目等。
- 保證環(huán)境一致性:確保在一個隔離的、標準化的 Docker 容器中運行任務,從而消除環(huán)境差異帶來的問題。
- 動態(tài)設置:允許對容器的配置進行更細粒度的控制,如動態(tài)設置環(huán)境變量、掛載卷等。
2、dockerexecute方法的使用介紹
因為我的測試背景正好是 公司內(nèi)部的 Docker 鏡像存儲庫中的有一個現(xiàn)成的專用于測試的鏡像;所以我直接在這個pipline腳本中去運用了這個方法,給大家看個例子順便講解一下:
stage('test') {
node {
dockerExecute(script: this,
dockerImage: "your-docker-image",
dockerName: 'your-docker-name'{
// 在 Docker 容器內(nèi)部執(zhí)行以下命令
sh '''
//例如安裝依賴,設置環(huán)境變量,執(zhí)行關(guān)鍵腳本等等
python main.py
'''
}3、dockerExecute 接受的參數(shù)解釋:
script: this:- 把
this傳遞給script參數(shù)。它通常用于在dockerExecute函數(shù)內(nèi)部引用當前腳本或上下文。
- 把
dockerImage: "your-docker-image",- 指定 Docker 鏡像的名稱。這個鏡像往往包含了你所需要的環(huán)境(例如特定版本的 Python 及相關(guān)工具和依賴)。
dockerName: 'your-docker-name'- 設置 Docker 容器的名稱。這有助于在 Jenkins 日志和其他地方識別運行的容器。
作用總結(jié)
- 在指定的 Docker 鏡像基礎(chǔ)上啟動一個 Docker 容器。
- 參數(shù)
script: this引用當前腳本上下文。 - 參數(shù)
dockerImage指定要使用的 Docker 鏡像。 - 參數(shù)
dockerName為啟動的容器命名。
二、docker.build介紹
docker.build 是 Jenkins 的 Docker 插件提供的一個方法,用于構(gòu)建 Docker 鏡像。它會讀取當前目錄下的 Dockerfile 并構(gòu)建一個新的 Docker 鏡像,有助于將你的應用和所有的依賴封裝到一個標準的鏡像中。
1、使用場景:
- 構(gòu)建新的 Docker 鏡像:當你需要基于 Dockerfile 構(gòu)建一個新的 Docker 鏡像時使用。
- 版本控制和部署:將應用打包成 Docker 鏡像,作為 CI/CD 流程的一部分提交到 Docker Registry 或用于部署。
2、結(jié)合使用
- 典型的工作流可能涉及先用
docker.build構(gòu)建鏡像,然后用該鏡像運行某些任務,如測試套件。
3、定義場景
- 假設你有一個 Python 項目,你想要構(gòu)建并在 Docker 容器中運行測試。
- 你需要在項目根目錄下創(chuàng)建一個Jenkinsfile和一個dockerfile
(1)dockerfile示例:
# 使用已有基礎(chǔ)鏡像
FROM your-docker-image
# 設置工作目錄
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 復制到工作目錄
COPY requirements.txt .
# 安裝 Python 依賴
RUN pip install --no-cache-dir -r requirements.txt
# 將項目文件復制到工作目錄
COPY . .
# 設置環(huán)境變量
ENV DISPLAY=:99
# 啟動 Xvfb 并運行應用
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 {
// 使用當前目錄下的 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
# 設置 DISPLAY 環(huán)境變量
export DISPLAY=:99
# 啟動 Xvfb 并在后臺運行
Xvfb :99 -screen 0 1920x1080x24 &
# 等待 Xvfb 完全啟動
sleep 5
# 打印 Python 版本信息
python --version
# 升級 pip
python -m pip install --upgrade pip
# 切換到工作目錄
cd $WORKSPACE
# 安裝 Python 依賴
python -m pip install -r requirements.txt
# 運行 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)建與運行:
docker.build: 用于構(gòu)建 Docker 鏡像,基于項目內(nèi)的 Dockerfile。dockerExecute: 用于在構(gòu)建好的 Docker 鏡像基礎(chǔ)上運行命令。
2、具體用途:
docker.build: 主要用于 CI 流程中的構(gòu)建步驟,確保應用代碼和依賴打包在一個鏡像中。dockerExecute: 用于在特定的 Docker 鏡像中執(zhí)行任務,適合用于測試、執(zhí)行腳本等需要隔離環(huán)境的步驟。
到此這篇關(guān)于dockerExecute 函數(shù)和docker.build的區(qū)別的文章就介紹到這了,更多相關(guān)dockerExecute 函數(shù)和docker.build內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Docker容器時間與宿主機不一致/宿主機時間不同步校驗問題
在Docker容器中,若未單獨配置localtime,可能導致時間與宿主機不一致,例如UTC與CST(東八區(qū))相差8小時,解決方法包括在啟動時通過docker run添加時間參數(shù),使用Dockerfile設置,或通過docker-compose配置,對于已運行的容器2024-10-10
基于Dockerfile創(chuàng)建zabbix監(jiān)控體系代碼實例
這篇文章主要介紹了基于Dockerfile創(chuàng)建zabbix監(jiān)控體系代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-05-05

