GitHub 操作:如何在 docker 容器内执行 运行 命令

GitHub Action: How do I run commands inside a docker container

今天才开始学习 CI/CD。不知道今天之前的docker是什么。我能够通过我的 Unity 项目让 CD 在 CircleCI 上工作。所有 运行 命令都发生在 docker 容器内。

version: 2.1
executors:
  unity:
    docker:
      # https://hub.docker.com/r/gableroux/unity3d/tags
      - image: gableroux/unity3d:2018.2.21f1
jobs:
  build-test:
    executor: unity
    steps:
      - checkout

      # Install zip
      - run: apt-get update
      - run: apt-get install zip -y

      # Decrypt the license file
      - run: openssl aes-256-cbc -d -in .circleci/Unity_v2018.x.ulf.enc -k ${UNITY_LICENSE_DECRYPT_KEY} >> .circleci/Unity_v2018.x.ulf

      # Activate unity
      - run: /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -logFile -manualLicenseFile .circleci/Unity_v2018.x.ulf || exit 0

      # Build Windows and OSX
      - run: /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -noUpm -logFile -projectPath . -buildWindows64Player ./bin-win64/CISample.exe
      - run: /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -noUpm -logFile -projectPath . -buildOSXUniversalPlayer ./bin-osx/CISample.app      

      # Zip builds
      - run: zip -r CISampleWin64Binary.zip ./bin-win64
      - run: zip -r CISampleOSXBinary.zip ./bin-osx

      # Store builds
      - store_artifacts:
          path: ./CISampleWin64Binary.zip
      - store_artifacts:
          path: ./CISampleOSXBinary.zip

workflows:
  version: 2
  build:
    jobs:
      - build-test

无法弄清楚如何使用 GitHub 操作来做到这一点。我可以 运行 一个 docker 图像,但我不知道如何在其中 运行 命令。我的所有命令都是 运行 在 Ubuntu 虚拟机级别。我的测试是 运行 一个 ls 命令来查看它是否从 docker 容器中 运行ning 而不是。

这是我尝试过的一些方法。

name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - run: |
          docker run gableroux/unity3d:2018.2.21f1 bash
          ls
name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: docker://gableroux/unity3d:2018.2.21f1
      - run: ls

想通了。您可以为作业指定 container。我的完整工作流程如下所示:

name: CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    container: gableroux/unity3d:2018.2.21f1
    steps:
        - name: Checkout Project
          uses: actions/checkout@v1

        - name: Intall Zip
          run: | 
            apt-get update
            apt-get install zip -y

        - name: Decrypt the license file
          run: openssl aes-256-cbc -d -in .github/Unity_v2018.x.ulf.enc -k ${{ secrets.UNITY_LICENSE_DECRYPT_KEY }} >> .github/Unity_v2018.x.ulf

        # Activate unity
        - name: Activate Unity
          run: /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -logFile -manualLicenseFile .github/Unity_v2018.x.ulf || exit 0

        # Build Windows and OSX
        - name: Build Windows Player
          run: /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -noUpm -logFile -projectPath . -buildWindows64Player ./bin-win64/CISample.exe
        - name: Build OSX Player
          run: /opt/Unity/Editor/Unity -quit -batchmode -nographics -silent-crashes -noUpm -logFile -projectPath . -buildOSXUniversalPlayer ./bin-osx/CISample.app      

        - name: Zip Builds
          run: |
            zip -r CISampleWin64Binary.zip ./bin-win64
            zip -r CISampleOSXBinary.zip ./bin-osx

        - name: Archive Windows Build
          uses: actions/upload-artifact@v1
          with:
            name: CISampleWin64Binary
            path: ./CISampleWin64Binary.zip

        - name: Archive Mac Build
          uses: actions/upload-artifact@v1
          with:
            name: CISampleOSXBinary
            path: ./CISampleOSXBinary.zip