AIO Image Builder
INFO
如果您只是想了解如何构建自己的镜像,请直接跳转到 构建自定义镜像
AIO 镜像
AIO 镜像是一个集成了所有编译时需要的环境和工具链的镜像,通过将需要编译的代码挂载到/workspace目录下,可以快速开始编译,而无需对环境进行额外配置。
这样的AIO镜像设计得很方便,开发者可以直接使用该镜像进行编译工作,而不必手动安装和配置各种编译环境和工具链。只需将代码挂载到/workspace目录下,AIO镜像就可以直接使用挂载的代码进行编译。
通过使用AIO镜像,开发者可以简化编译过程,提高开发效率,并确保在不同环境中的一致性。这样的镜像可以帮助开发者更快地开始编译工作,而无需花费大量时间和精力来配置开发环境。
AIO Image Builder
AIO Image Builder是一个实用工具集,由一系列脚本组成,旨在快速构建和发布AIO(All In One)镜像。开发者可以根据自身需求,自主修改 AIO Image Builder,以便构建符合其特定编译需求的镜像。
AIO Image Builder的设计理念是提供一个灵活且可定制的框架,使开发者能够根据其编译环境和工具链的要求进行个性化调整。通过修改AIO Image Builder,开发者可以添加、删除或更新所需的软件包、库和工具,以满足其特定项目的编译要求。
这种自定义能力为开发者提供了更大的灵活性和控制权,使其能够针对不同的编译任务创建高度优化的镜像。开发者可以根据自己的经验和专业知识,对AIO Image Builder进行调整和优化,以达到最佳的编译性能和结果。
INFO
在标准的版本中,AIO Image Builder 被分成了两个部分:BaseImages 和 CICDImages,接下来我们将详细地介绍这两个部分。
BaseImages
用于构建基础镜像,这类镜像常常用于在本地机器上提供标准编译环境
构建镜像
# 构建 gcr.minieye.tech/huangjian/dds/build_tools/aio:18.04
bash ./build_ubuntu1804.sh
# 构建 gcr.minieye.tech/huangjian/dds/build_tools/aio:20.04
bash ./build_ubuntu2004.sh
# 构建 gcr.minieye.tech/huangjian/dds/build_tools/aio:22.04
bash ./build_ubuntu2204.sh
# 构建全部并推送到仓库
bash ./build_all.sh
WARNING
build_all.sh
脚本在构建镜像的同时,还会将脚本推送到对应的仓库,请记住,您在大多数时间都不应该修改公共镜像
推送镜像
# 推送 gcr.minieye.tech/huangjian/dds/build_tools/aio:18.04
bash ./push_ubuntu1804.sh
# 推送 gcr.minieye.tech/huangjian/dds/build_tools/aio:20.04
bash ./push_ubuntu2004.sh
# 推送 gcr.minieye.tech/huangjian/dds/build_tools/aio:22.04
bash ./push_ubuntu2204.sh
使用镜像
docker run -it --rm \
-v /path/to/your/project:/workspace \
gcr.minieye.tech/huangjian/dds/build_tools/aio:22.04 bash
CICDImages
基于 BaseImage 构建,在此基础上添加了 gitlab-runner 以及 UDI,添加了这两个组件的镜像可以作为 DynaCI 的 Slave 节点
构建镜像
# 构建 registry.cn-shenzhen.aliyuncs.com/minieye/dds-aio:18.04
bash build_ubuntu1804.sh
# 构建 registry.cn-shenzhen.aliyuncs.com/minieye/dds-aio:20.04
bash build_ubuntu2004.sh
# 构建 registry.cn-shenzhen.aliyuncs.com/minieye/dds-aio:22.04
bash build_ubuntu2204.sh
# 构建所有
bash build_all.sh
WARNING
build_all.sh
脚本在构建镜像的同时,还会将脚本推送到对应的仓库,请记住,您在大多数时间都不应该修改公共镜像
推送镜像
# 推送 registry.cn-shenzhen.aliyuncs.com/minieye/dds-aio:18.04
bash push_ubuntu1804.sh
# 推送 registry.cn-shenzhen.aliyuncs.com/minieye/dds-aio:20.04
bash push_ubuntu2004.sh
# 推送 registry.cn-shenzhen.aliyuncs.com/minieye/dds-aio:22.04
bash push_ubuntu2204.sh
使用镜像
CICDImages 一般是作为 DynaCI 的 Slave 节点,不推荐单独使用,建议优先使用 BaseImage,如果需要调试 CICDImage,可以按照以下方法:
# 请一定要以 bash 的指令启动,因为 cicd image 本身自带启动指令
docker run -it --rm \
-v /path/to/your/project:/workspace \
registry.cn-shenzhen.aliyuncs.com/minieye/dds-aio:22.04 bash
构建自定义镜像
开发者可以根据自己的需求定制 CICD 镜像,但是要注意的是,无论何时,CICD 镜像都必须要满足如下的规范:
- CICD 镜像中必须安装 git
- CICD 镜像中必须安装 gitlab-runner, 并且 gitlab-runner 必须在容器启动时自启
- CICD 镜像中必须安装 UDI,并且 UDI 监听在 8088 端口
- 禁止覆盖镜像仓库中的标准镜像,请自己创建镜像仓库进行推送
INFO
gitlab-runner 相关文档:
https://docs.gitlab.com/runner/install/linux-manually.html#using-binary-file
UDI 相关文档:
具体信息可以参考 CICDImage 的 Dockerfile
# 动态构建
ARG AIO_IMAGE_TAG=22.04
FROM gcr.minieye.tech/huangjian/dds/build_tools/aio:${AIO_IMAGE_TAG}
# ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai \
LANG=C.UTF-8
# 工作目录
WORKDIR /workspace
COPY gitlab-runner /usr/local/bin/
COPY udi /usr/local/bin/
COPY udi.json /srv
COPY docker-entrypoint.sh /srv/docker-entrypoint.sh
# 与工作目录一致
VOLUME [ "/workspace", "/toolchains", "/preload" ]
# 开放 udi 8088 端口
EXPOSE 8088
# 安装 gitlab-runner 以及为 UDI、gitlab-runner 提供可执行权限
RUN chmod +x /usr/local/bin/gitlab-runner && \
chmod +x /usr/local/bin/udi && \
chmod +x /srv/docker-entrypoint.sh && \
useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash && \
gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
ENTRYPOINT [ "/srv/docker-entrypoint.sh" ]
CMD [ "udi", "--config", "/srv/udi.json"]