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

63lcw9qa  于 2023-05-06  发布在  Git
关注(0)|答案(3)|浏览(195)

在进入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

这给出了已经定义的步骤错误

w8ntj3qf

w8ntj3qf1#

如果运行的计算机配置对构建很重要,请尝试使用self-hosted runner
1.您可以在某些云提供商中创建VM(例如AWS,Azure等)并将其注册到GitHub-CI。
1.安装GitHub-CI服务
1.安装您需要的所有实用程序
1.将runner注册到存储库
1.将run-on的构建脚本更改为指向自宿主运行程序
您可以在GitHub-CI Docs中找到更多信息

cx6n0qe3

cx6n0qe32#

您可以只运行容器中的一个步骤,而不是整个作业。类似于:

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'

我不知道这在您的情况下是否实用,因为您可能希望在同一个容器中运行一系列步骤。在任何情况下,你都可以在这里找到更多关于容器中运行步骤的信息,以及这里提供的不同选项

z9ju0rcb

z9ju0rcb3#

您可以将docker socket从主机挂载到容器中,并且可以启动一个与主机共享pid命名空间的特权容器。每一个都给你提供了以后从容器中伸出手的选项。

container:
  image: quay.io/buildah/stable:latest
  volumes:
    - /var/run/docker.sock:/var/run/docker.sock
  options: --privileged --pid=host

通过挂载的docker socket,您可以与主机上的docker守护进程对话。
由于有了--privileged --pid=host,您可以使用nsenter从容器中转义,如https://stackoverflow.com/a/63140387/1047788中所述

相关问题