我试图在进入docker容器(arch linux)之前在主机系统上安装一个包,即(ubuntu-latest)
我尝试了很多语法,但我错了
on: [push]
jobs:
update-aur:
runs-on: ubuntu-latest
steps:
- run : sudo apt-get install runc
container: archlinux
steps:
- run: |
pacman --noconfirm -Syu
pacman --noconfirm -S base-devel
这给出了步骤已经定义的错误
如果运行机配置对构建很重要,请尝试使用self-hosted runner
。
- 您可以在一些云提供商(例如AWS, Azure等)中创建VM,并将其注册到GitHub-CI。
- 安装GitHub-CI服务
- 安装所有你需要的工具
- 将运行程序注册到存储库
- 更改
run-on
的构建脚本以指向self-host运行程序
您可以在GitHub-CI文档
中找到更多信息您可以只在容器中运行一个步骤,而不是整个作业。比如:
on: [push]
jobs:
update-aur:
runs-on: ubuntu-latest
steps:
- run: sudo apt-get install ...
- uses: docker://archlinux
with:
entrypoint: /usr/bin/bash
args: -c 'pacman --noconfirm -Syu && pacman --noconfirm -S base-devel'
我不知道这在你的情况下是否实用,因为你可能想在同一个容器中运行一堆步骤。在任何情况下,您都可以在这里找到有关容器中运行步骤的更多信息,并在这里找到可用的不同选项
您可以将主机上的docker套接字挂载到容器中,并且可以启动一个与主机共享pid命名空间的特权容器。每个选项都为您提供了以后访问容器的选项。
container:
image: quay.io/buildah/stable:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
options: --privileged --pid=host
通过挂载的docker套接字,您可以与主机上的docker守护进程通信。
由于--privileged --pid=host
,您可以使用nsenter
从容器中逃脱,如https://stackoverflow.com/a/63140387/1047788