- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要一种在 GitLab 运行器中构建多架构 Docker 镜像的简单方法。简单来说,我的意思是我只需要在我的项目中添加一个 .gitlab-ci.yml 就可以了。
这是我写的 .gitlab-ci.yml。它使用 buildx 构建多架构镜像,然后将其推送到 GitLab 注册表:
image: cl00e9ment/buildx
services:
- name: docker:dind
variables:
PLATFORMS: linux/amd64,linux/arm64
TAG: latest
before_script:
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY"
build:
stage: build
script:
- docker buildx build --platform "$PLATFORMS" -t "${CI_REGISTRY_IMAGE}:${TAG}" . --push
FROM docker:latest
ENV DOCKER_CLI_EXPERIMENTAL=enabled
ENV DOCKER_HOST=tcp://docker:2375/
RUN mkdir -p ~/.docker/cli-plugins \
&& wget -qO- https://api.github.com/repos/docker/buildx/releases/latest | grep "browser_download_url.*linux-amd64" | cut -d : -f 2,3 | tr -d '"' | xargs wget -O ~/.docker/cli-plugins/docker-buildx \
&& chmod a+x ~/.docker/cli-plugins/docker-buildx
RUN docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
RUN docker context create buildx \
&& docker buildx create buildx --name mybuilder \
&& docker buildx use mybuilder
RUN docker buildx inspect --bootstrap
image: docker:latest
services:
- name: docker:dind
before_script:
- docker login -u cl00e9ment -p "$DOCKER_HUB_TOKEN"
build:
stage: build
script:
- docker build --add-host docker:`grep docker /etc/hosts | awk 'NR==1{print $1}'` --network host -t cl00e9ment/buildx .
- docker run --add-host docker:`grep docker /etc/hosts | awk 'NR==1{print $1}'` --network host cl00e9ment/buildx docker buildx inspect --bootstrap
- docker push cl00e9ment/buildx
test:
stage: test
script:
- docker run --add-host docker:`grep docker /etc/hosts | awk 'NR==1{print $1}'` --network host cl00e9ment/buildx docker buildx inspect --bootstrap
docker buildx inspect --bootstrap
列出可用的平台。它给 linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
.所以一切都很好。 linux/amd64, linux/arm64, linux/riscv64, linux/ppc64le, linux/s390x, linux/386, linux/arm/v7, linux/arm/v6
. linux/amd64, linux/386
. 最佳答案
不幸的是,有很多关于在 GitLab CI 上构建多架构镜像的过时和不正确的信息。似乎经常更改,因为它仍然是一个实验性功能。但截至本文发布之时,这就是我如何让我的多架构构建在 GitLab 公共(public)运行器(armv6、armv6、arm64、amd64)上工作:
首先,必须构建并推送一个包含 buildx
的 Docker 镜像。二进制。这是我为此使用的 Dockerfile:
FROM docker:latest
ARG BUILDX_VER=0.4.2
RUN mkdir -p /root/.docker/cli-plugins && \
wget -qO ~/.docker/cli-plugins/docker-buildx \
https://github.com/docker/buildx/releases/download/v${BUILDX_VER}/buildx-v${BUILDX_VER}.linux-amd64 && \
chmod +x /root/.docker/cli-plugins/docker-buildx
当前 GitLab 运行器镜像未初始化
binfmt
尽管运行了初始化代码,但处理程序正确:
https://gitlab.com/gitlab-org/gitlab-runner/-/blob/523854c8/.gitlab/ci/_common.gitlab-ci.yml#L91
.gitlab-ci.yml
:
before_script:
- docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
然后我们可以使用
docker login
运行管道脚本的其余部分。 ,
docker buildx build --use
,
docker buildx build --push ...
等等。
.gitlab-ci.yml
可以在这里看到:
https://github.com/oofnikj/nuttssh/blob/multiarch/.gitlab-ci.yml
关于docker - GitLab CI/CD : building multiarch Docker images,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61430005/
我正在开发一个包“xyz”,它使用带有多个 cpp 文件的 Rcpp。当我只更新 R 代码时,我想在包目录上运行 R CMD INSTALL xyz 而不必重新编译所有未更改的共享库。如果我指定 --
我正在尝试使用Cirrus CI构建多 list list ,因此我需要启用docker experimental option 但是docker的实验性选项未考虑在内。 在.cirrusci.yml
如果我使用任何 arm 编译器(例如 arm-none-eabi-gcc )编译 C 程序,然后调用 gdb-multiarch使用二进制作为第二个参数,它将正确确定机器类型,我可以调试我的远程应用程
我正在尝试在 RHEL 中运行 gdb-multiarch 命令。我已经安装了用于 ARM 处理的 QEMU 模拟器。我想安装 GDB 进行调试。我能够通过运行命令在 Ubuntu 中成功安装 GDB
我想要一种在 GitLab 运行器中构建多架构 Docker 镜像的简单方法。简单来说,我的意思是我只需要在我的项目中添加一个 .gitlab-ci.yml 就可以了。 这是我写的 .gitlab-c
我正在尝试从 x86 计算机到远程 ARM 设备执行跨平台远程调试。 (例如:小猎犬骨黑) 我正在使用 Ubuntu 14.04 和 Eclipse CDT。 我安装了软件包gcc-arm-linux
我正在尝试使用 gdb 调试程序,当我设置断点并继续 strcpy() 函数时。我收到以下回复: frinto@kali:~/Documents/theclang/programs/helloworl
我正在尝试为 android studio 的 avd 安装 KVM,我运行了以下命令: sudo apt-get install qemu-kvm libvirt-bin ubuntu-vm-bui
我最近在部署 32 位和 64 位库时遇到了 Linux 中的多体系结构。 出于好奇,为什么放弃/lib64 以支持例如/lib/x86_64-linux-gnu这似乎过于复杂,但一定是有原因的。 最
我有这个在 Docker 上运行的 Laravel 项目(laravel 6)。 我得到了这个错误: multiarch-support:amd64 : Depends: libc6:amd64 (>
我正在尝试在 Ubuntu 20.04 docker 容器中运行应用程序。它启动但很快崩溃。 使用 GDB 我已经追踪到这个 Thread 36 "Emuthread - Sta" received
我正在尝试为 Linux 和 Windows 制作 Python 应用程序的可执行文件,但 Windows 构建过程失败。 这是我的 Makefile: all: transpile compile-
我是一名优秀的程序员,十分优秀!