You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

新手求助:如何在GitHub Action的Docker容器内执行命令?

解决GitHub Actions中在Unity Docker容器内执行命令的问题

我来帮你搞定这个问题!你在CircleCI里的配置思路是对的——用Unity的Docker镜像作为执行环境,所有命令都跑在容器里。但GitHub Actions的语法和CircleCI有点不一样,你之前的两种尝试没踩对路子,我给你拆解正确的实现方式:

方法一:让整个Job运行在Unity Docker容器中(最接近CircleCI的写法)

这种方式和你CircleCI里用executors的逻辑完全一致,整个Job的所有步骤都会在指定的Unity Docker容器内执行,不用每次手动处理容器调用:

name: Unity Build CI
on: [push]
jobs:
  build-test:
    # 指定整个Job使用Unity的Docker镜像作为运行环境
    container:
      image: gableroux/unity3d:2018.2.21f1
    steps:
      - name: 拉取项目代码
        uses: actions/checkout@v4
        
      - name: 安装zip工具
        run: apt-get update && apt-get install zip -y
        
      - name: 解密Unity许可证文件
        run: openssl aes-256-cbc -d -in .circleci/Unity_v2018.x.ulf.enc -k "${{ secrets.UNITY_LICENSE_DECRYPT_KEY }}" >> .circleci/Unity_v2018.x.ulf
        
      - name: 激活Unity许可证
        run: /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -logFile -manualLicenseFile .circleci/Unity_v2018.x.ulf || exit 0
        
      - name: 构建Windows 64位版本
        run: /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -noUpm -logFile -projectPath . -buildWindows64Player ./bin-win64/CISample.exe
        
      - name: 构建OSX通用版本
        run: /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -noUpm -logFile -projectPath . -buildOSXUniversalPlayer ./bin-osx/CISample.app
        
      - name: 打包构建产物
        run: |
          zip -r CISampleWin64Binary.zip ./bin-win64
          zip -r CISampleOSXBinary.zip ./bin-osx
          
      - name: 上传Windows构建产物
        uses: actions/upload-artifact@v4
        with:
          name: Windows-Build
          path: ./CISampleWin64Binary.zip
          
      - name: 上传OSX构建产物
        uses: actions/upload-artifact@v4
        with:
          name: OSX-Build
          path: ./CISampleOSXBinary.zip

关键说明:

  • 用container字段指定Job的运行镜像,所有后续run步骤都会在这个容器内执行
  • CircleCI的store_artifacts对应GitHub Actions的actions/upload-artifact动作
  • 环境变量${UNITY_LICENSE_DECRYPT_KEY}要换成GitHub Secrets的写法${{ secrets.UNITY_LICENSE_DECRYPT_KEY }},记得先在仓库Settings -> Secrets and Variables -> Actions里添加这个密钥

方法二:在单个Step中调用Docker容器执行命令

如果你不想整个Job都跑在容器里,只想特定步骤用Unity镜像,可以手动挂载工作目录到容器中:

name: Unity Build CI
on: [push]
jobs:
  build-test:
    runs-on: ubuntu-latest
    steps:
      - name: 拉取项目代码
        uses: actions/checkout@v4
        
      - name: 在Unity容器内执行所有构建命令
        run: |
          docker run -v ${{ github.workspace }}:/workspace -w /workspace gableroux/unity3d:2018.2.21f1 bash -c "
            apt-get update && apt-get install zip -y &&
            openssl aes-256-cbc -d -in .circleci/Unity_v2018.x.ulf.enc -k \"${{ secrets.UNITY_LICENSE_DECRYPT_KEY }}\" >> .circleci/Unity_v2018.x.ulf &&
            /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -logFile -manualLicenseFile .circleci/Unity_v2018.x.ulf || exit 0 &&
            /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -noUpm -logFile -projectPath . -buildWindows64Player ./bin-win64/CISample.exe &&
            /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -noUpm -logFile -projectPath . -buildOSXUniversalPlayer ./bin-osx/CISample.app &&
            zip -r CISampleWin64Binary.zip ./bin-win64 &&
            zip -r CISampleOSXBinary.zip ./bin-osx
          "
          
      - name: 上传构建产物
        uses: actions/upload-artifact@v4
        with:
          name: Builds
          path: |
            ./CISampleWin64Binary.zip
            ./CISampleOSXBinary.zip

关键说明:

  • -v ${{ github.workspace }}:/workspace:把GitHub Actions的工作目录挂载到容器的/workspace,这样容器能访问到你的项目代码
  • -w /workspace:设置容器的工作目录为挂载的路径
  • bash -c "...":把所有要执行的命令串起来,让容器一次性执行

你之前尝试失败的原因

  1. 第一种尝试docker run gableroux/unity3d:2018.2.21f1 bash ls:

    • 没有挂载工作目录,容器里完全看不到你的项目代码
    • 命令写法错误,应该是bash -c "ls",不然bash会把ls当成参数而非要执行的命令
  2. 第二种尝试uses: docker://gableroux/unity3d:2018.2.21f1:

    • 这个语法只是拉取Docker镜像作为某个Action的运行环境,但后续的run: ls还是会在主机的Ubuntu环境中执行,不会自动切换到容器里

内容的提问来源于stack exchange,提问作者Matt Thompson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:44:42