dockerExecute 函数和docker.build的区别解析
作者:Rhys..
dockerExecute 通常是一个自定义的函数或者由特定的 Jenkins 库(如 piper-lib)提供,用于在 Docker 容器中执行特定的命令,这篇文章主要介绍了dockerExecute 函数和docker.build的区别,需要的朋友可以参考下
一、dockerExecute介绍
dockerExecute 通常是一个自定义的函数或者由特定的 Jenkins 库(如 piper-lib)提供,用于在 Docker 容器中执行特定的命令。这类函数可以帮助在构建或测试阶段管理 Docker 容器的生命周期,确保步骤在容器内运行。它的作用是启动一个 Docker 容器,并在该容器中执行提供的命令.
1、使用场景:
- 执行需要隔离环境的任务:当你需要在指定的 Docker 容器中运行特定的命令,例如运行测试脚本、构建项目等。
- 保证环境一致性:确保在一个隔离的、标准化的 Docker 容器中运行任务,从而消除环境差异带来的问题。
- 动态设置:允许对容器的配置进行更细粒度的控制,如动态设置环境变量、挂载卷等。
2、dockerexecute方法的使用介绍
因为我的测试背景正好是 公司内部的 Docker 镜像存储库中的有一个现成的专用于测试的镜像;所以我直接在这个pipline脚本中去运用了这个方法,给大家看个例子顺便讲解一下:
stage('test') {
node {
dockerExecute(script: this,
dockerImage: "your-docker-image",
dockerName: 'your-docker-name'{
// 在 Docker 容器内部执行以下命令
sh '''
//例如安装依赖,设置环境变量,执行关键脚本等等
python main.py
'''
}3、dockerExecute 接受的参数解释:
script: this:- 把
this传递给script参数。它通常用于在dockerExecute函数内部引用当前脚本或上下文。
- 把
dockerImage: "your-docker-image",- 指定 Docker 镜像的名称。这个镜像往往包含了你所需要的环境(例如特定版本的 Python 及相关工具和依赖)。
dockerName: 'your-docker-name'- 设置 Docker 容器的名称。这有助于在 Jenkins 日志和其他地方识别运行的容器。
作用总结
- 在指定的 Docker 镜像基础上启动一个 Docker 容器。
- 参数
script: this引用当前脚本上下文。 - 参数
dockerImage指定要使用的 Docker 镜像。 - 参数
dockerName为启动的容器命名。
二、docker.build介绍
docker.build 是 Jenkins 的 Docker 插件提供的一个方法,用于构建 Docker 镜像。它会读取当前目录下的 Dockerfile 并构建一个新的 Docker 镜像,有助于将你的应用和所有的依赖封装到一个标准的镜像中。
1、使用场景:
- 构建新的 Docker 镜像:当你需要基于 Dockerfile 构建一个新的 Docker 镜像时使用。
- 版本控制和部署:将应用打包成 Docker 镜像,作为 CI/CD 流程的一部分提交到 Docker Registry 或用于部署。
2、结合使用
- 典型的工作流可能涉及先用
docker.build构建镜像,然后用该镜像运行某些任务,如测试套件。
3、定义场景
- 假设你有一个 Python 项目,你想要构建并在 Docker 容器中运行测试。
- 你需要在项目根目录下创建一个Jenkinsfile和一个dockerfile
(1)dockerfile示例:
# 使用已有基础镜像
FROM your-docker-image
# 设置工作目录
WORKDIR /web-test
# 安装系统依赖包括 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 . .
# 设置环境变量
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 构建新的 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 环境变量
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'
}
}
}三、关键区别
1、构建与运行:
docker.build: 用于构建 Docker 镜像,基于项目内的 Dockerfile。dockerExecute: 用于在构建好的 Docker 镜像基础上运行命令。
2、具体用途:
docker.build: 主要用于 CI 流程中的构建步骤,确保应用代码和依赖打包在一个镜像中。dockerExecute: 用于在特定的 Docker 镜像中执行任务,适合用于测试、执行脚本等需要隔离环境的步骤。
到此这篇关于dockerExecute 函数和docker.build的区别的文章就介绍到这了,更多相关dockerExecute 函数和docker.build内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
