在github ci中如何在进入docker容器之前在host中运行命令



我试图在进入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

  1. 您可以在一些云提供商(例如AWS, Azure等)中创建VM,并将其注册到GitHub-CI。
  2. 安装GitHub-CI服务
  3. 安装所有你需要的工具
  4. 将运行程序注册到存储库
  5. 更改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

所述。

相关内容

  • 没有找到相关文章

最新更新