基于Docker构建CI/CD工具链(一)构建基础工具镜像

概述

计划基于Docker部署GitLab 构建CI/CD 工具链,CI/CD 构建过程可能需要一系列的命令行工具来完成不同的任务,例如 JSON 数据处理、SSH 连接到远程服务器实行命令、从版本控制库拉取代码等。为了方便且可重复使用地执行这些任务,我们可以使用 Docker 构建一个自定义的工具Docker镜像,其中包含常用的命令行工具,如 jq、sshpass、git、curl 等。在本文中,我们将探讨为什么要采取这种做法,并介绍这些工具的作用。

为什么自定义构建工具容器?

通过在 GitLab CI/CD 中使用自定义构建工具容器,并预先安装常用的命令行工具,可以提高构建的一致性、可移植性和效率。

  • 一致的环境: 在 CI/CD 环境中,保持一致的执行环境非常重要。通过在容器中预安装所需的命令行工具,可以确保每次构建使用的环境都是相同的,避免由于依赖版本不同而引发的问题。

  • 可移植性: 自定义构建工具容器可以轻松地在不同的 CI/CD 环境中使用,而无需担心主机系统的配置问题。这种可移植性使得团队成员之间可以共享构建工具容器,从而提高了协作效率。

  • 减少构建时间: 预先构建包含常用工具的容器镜像可以减少每次构建的时间。由于这些工具已经被预先安装在容器中,构建过程中无需再次下载和安装,从而加快了构建速度。

常用工具介绍

  • jq: jq 是一个轻量级的命令行 JSON 处理工具,用于解析、筛选和转换 JSON 数据。它提供了丰富的查询语法和功能,使得在命令行中处理 JSON 数据变得非常方便。

  • sshpass: sshpass 是一个简单的命令行工具,用于在非交互式的情况下为 SSH 提供密码。它可以自动将密码传递给 SSH 客户端,从而实现在脚本中自动化 SSH 连接的目的。

  • git: git 是一个分布式版本控制系统,广泛用于管理代码和协作开发。它提供了一系列强大的命令行工具,用于版本控制、分支管理、代码合并等操作。

  • curl: curl 是一个功能强大的命令行工具,用于发送和接收 HTTP 请求。它支持多种协议和数据格式,并提供了丰富的选项和参数,使得在命令行中进行网络请求变得非常灵活和方便。

除了上述工具读者可以根据需要添加自己需要的工具。

构建

编辑如下内容的Dockerfile,从ubuntu:jammt-20240227的基础镜像开始构建一个新的容器镜像,然后在其中安装常用的命令行工具 jq、sshpass、git 和 curl。

FROM ubuntu:jammt-20240227
RUN apt-get update && apt-get install -y jq sshpass git curl

在同级目录下执行如下命令,构建工具镜像

 docker build -t docker.mvcode.cn:8083/devtools:1.0.0 .

请添加图片描述

然后通过如下命令,将镜像推动到镜像库(如何构建镜像库点这里:Docker+nexus构建自己的制品库之(三)Docker仓库的使用)。推送到镜像库后我们就可以随便使用了。

 docker push docker.mvcode.cn:8083/devtools:1.0.0

请添加图片描述

测试

在实际的构建过程中我们使用如下方式运行命令

docker run --rm  docker.mvcode.cn:8083/devtools:1.0.0 xxx
  • docker run: 这是 Docker 命令行工具中用于运行容器的命令。它告诉 Docker 在新的容器中执行指定的镜像。

  • --rm: 这是一个选项标志,告诉 Docker 在容器停止后自动删除容器。这样可以确保在容器退出后不会留下残留的容器实例,节省系统资源。

  • docker.mvcode.cn:8083/devtools:1.0.0: 这是要运行的 Docker 镜像的标识符。其中 docker.mvcode.cn:8083 是 Docker 镜像的主机地址和端口号,devtools:1.0.0 是镜像的名称和版本号。

  • xxx: 这是要在容器中执行的命令。一旦容器启动,它会立即执行 xxx 命令。

请添加图片描述

jq

jq 是一个强大的命令行 JSON 处理工具,它可以用于解析、查询、过滤和转换 JSON 数据。下面是一些 jq 命令的使用示例:

假设有一个名为 data.json 的 JSON 文件,内容如下:

{
  "name": "John",
  "age": 30,
  "city": "New York"
}

jq 来选择 JSON 对象中的特定字段。例如,如果您只想要显示 name 字段的值,执行下面命令。-v选项映射本地目录到容器的/tools/data目录:

docker run --rm -v ./:/tools/data/ docker.mvcode.cn:8083/devtools:1.0.0 jq '.name' /tools/data/data.json

请添加图片描述

您可以使用 jq 来根据特定条件过滤 JSON 数据。例如,假设您只想显示年龄大于 25 岁的人的信息:

docker run --rm -v ./:/tools/data/ docker.mvcode.cn:8083/devtools:1.0.0 jq 'select(.age > 25)' /tools/data/data.json

请添加图片描述

您也可以使用-w 选项设置容器的工作目录,使用相对地址的data.json文件

docker run --rm -v ./:/tools/data/ -w /tools/data/ docker.mvcode.cn:8083/devtools:1.0.0 jq 'select(.age > 25)' data.json

请添加图片描述

git

git命令就不用多说了,我们执行下面命令随便Clone Gitlab上的一个项目来测试一下。我使用token的方式访问gitlab仓库。glpat-UN6h9sTN4BAEoNx-YyoF为我的token,仓库也是用Docker搭建的(后续会介绍)没啥可以需要保密的。

docker run --rm \
-v ./:/tools/data/ \
-w /tools/data/ \
docker.mvcode.cn:8083/devtools:1.0.0 \
git clone http://root:glpat-UN6h9sTN4BAEoNx-YyoF@192.168.3.37:9080/team1/springbootdemo.git

请添加图片描述

sshpass

sshpass 是一个命令行工具,用于在非交互式的情况下为 SSH 提供密码。通过 sshpass,您可以通过命令行自动化 SSH 连接,并执行远程命令或脚本。

以下是使用 sshpass 远程执行命令和脚本的基本示例:

  1. 远程执行单个命令:
sshpass -p 'your_password' ssh -o StrictHostKeyChecking=no user@hostname 'command_to_execute'

在这个命令中,your_password 是您的 SSH 密码,user 是您要连接的远程主机的用户名,hostname 是远程主机的地址,command_to_execute 是您要在远程主机上执行的命令。-o StrictHostKeyChecking=no 选项告诉 SSH 客户端在连接时不进行主机密钥验证,这在某些情况下可能会被用于自动化的环境中.执行如下命令:

docker run --rm \
-v ./:/tools/data/ \
-w /tools/data/ \
docker.mvcode.cn:8083/devtools:1.0.0 \
sshpass -p '你的密码' ssh -o StrictHostKeyChecking=no copier@192.168.3.52 'echo 123'

请添加图片描述

需要注意的是,使用 sshpass 命令来传输密码可能会有一些安全风险,因为密码将以明文形式出现在命令行中,可能被其他人或进程看到。因此,您应该仔细考虑是否有更安全的方法来进行身份验证,例如使用 SSH 密钥认证。

curl

要使用 curl 命令访问百度网站,您可以执行以下命令:

docker run --rm \
-v ./:/tools/data/ \
-w /tools/data/ \
docker.mvcode.cn:8083/devtools:1.0.0 \
curl www.baidu.com

请添加图片描述

如果您想要查看详细的连接信息,可以使用 -v 选项(verbose):

docker run --rm \
-v ./:/tools/data/ \
-w /tools/data/ \
docker.mvcode.cn:8083/devtools:1.0.0 \
curl -v www.baidu.com

请添加图片描述

这将输出包括请求和响应的详细信息。其他选项就不再演示有需要可以搜索一下。

请注意,由于网络环境或其他原因,可能会影响您对百度网站的访问。

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码转场工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值