Skip to content

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

用于构建基础镜像,这类镜像常常用于在本地机器上提供标准编译环境

构建镜像

sh
# 构建 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 脚本在构建镜像的同时,还会将脚本推送到对应的仓库,请记住,您在大多数时间都不应该修改公共镜像

推送镜像

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

使用镜像

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 节点

构建镜像

sh
# 构建 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 脚本在构建镜像的同时,还会将脚本推送到对应的仓库,请记住,您在大多数时间都不应该修改公共镜像

推送镜像

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,可以按照以下方法:

sh
# 请一定要以 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 镜像都必须要满足如下的规范:

  1. CICD 镜像中必须安装 git
  2. CICD 镜像中必须安装 gitlab-runner, 并且 gitlab-runner 必须在容器启动时自启
  3. CICD 镜像中必须安装 UDI,并且 UDI 监听在 8088 端口
  4. 禁止覆盖镜像仓库中的标准镜像,请自己创建镜像仓库进行推送

具体信息可以参考 CICDImage 的 Dockerfile

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"]

智能汽车赋能者