相关疑难解决方法(0)

Github动作在作业之间共享工作空间/工件?

尝试使用Github的beta操作时,我有两项工作,一项工作是构建代码,然后一项将部署代码。但是,我似乎无法在部署工作中获得构建工件。

我的最新尝试是为每个作业手动设置具有相同卷数的容器映像,根据文档,这应该是解决方案:https : //help.github.com/en/articles/workflow-syntax-for-github-actions# jobsjob_idcontainervolumes

设置供容器使用的卷阵列。您可以使用卷在服务或作业中的其他步骤之间共享数据。您可以指定命名的Docker卷,匿名Docker卷或在主机上绑定安装。

工作流程

name: CI
on:
  push:
    branches:
    - master
    paths:
    - .github/workflows/server.yml
    - server/*
jobs:
  build:
    runs-on: ubuntu-latest
    container:
      image: docker://node:10
      volumes:
      - /workspace:/github/workspace
    steps:
    - uses: actions/checkout@master
    - run: yarn install
      working-directory: server
    - run: yarn build
      working-directory: server
    - run: yarn test
      working-directory: server
    - run: ls
      working-directory: server
  deploy:
    needs: build
    runs-on: ubuntu-latest
    container:
      image: docker://google/cloud-sdk:latest
      volumes:
      - /workspace:/github/workspace
    steps:
      - uses: actions/checkout@master
      - run: ls
        working-directory: server
      - run: gcloud …
Run Code Online (Sandbox Code Playgroud)

continuous-integration github github-actions

21
推荐指数
4
解决办法
1064
查看次数

在 GitHub Actions 工作流程中缓存 APT 包

我将以下 Github Actions 工作流程用于我的 C 项目。工作流在大约 40 秒内完成,但其中超过一半的时间用于安装valgrind包及其依赖项。

我相信缓存可以帮助我加快工作流程。我不介意多等几秒钟,但这似乎是对 GitHub 资源的毫无意义的浪费。

name: C Workflow

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v1

    - name: make
      run: make

    - name: valgrind
      run: |
        sudo apt-get install -y valgrind
        valgrind -v --leak-check=full --show-leak-kinds=all ./bin
Run Code Online (Sandbox Code Playgroud)

运行sudo apt-get install -y valgrind会安装以下软件包:

  • gdb
  • gdbserver
  • libbabeltrace1
  • libc6-dbg
  • libipt1
  • valgrind

我知道 Actions 支持缓存特定目录(并且已经有几个已回答的 SO 问题和关于此的文章),但我不确定 apt 安装的所有不同软件包最终在哪里。我假设/bin//usr/bin/不是唯一受安装软件包影响的目录。

是否有一种优雅的方法来缓存已安装的系统包以供将来运行工作流?

apt github-actions

21
推荐指数
4
解决办法
6616
查看次数

Github 操作:在单个运行器中运行多个作业或在作业之间共享工作空间

有什么方法可以在单个运行器中运行多个作业或在作业之间共享 Github 操作工作区?

在我的组织中,开发团队使用由多个团队创建和管理的多个可重用工作流程。团队build创建并管理build.yaml构建应用程序。我的团队创建并管理analysis.yaml对应用程序构建进行数据分析并对构建的工件进行归档。

开发团队计划在他们的应用程序工作流程中使用我们的两个工作流程。为了使我的团队的工作流程正常工作,我的工作流程需要访问构建的代码(构建target目录maven、构建build目录gradlenode_modules构建npm目录)。

  • 有没有办法在构建代码的运行器上运行我的可重用工作流程?
  • 有没有办法可以访问构建代码的工作区(我搜索了其他答案并了解到我可以使用操作uploadcache操作)。是否有其他方法可以完成此任务并在构建运行程序本身上运行可重用工作流程?
  • 通过复合操作而不是使用可重用工作流程可以更好地完成此任务吗?

我有下面的例子。

build.yaml

on:
  workflow_call
  inputs:
    build:
      description: Build type
      required: true

jobs:
  Build:
    runs-on: self-hosted
    steps:
      - name: Building apps
      - if: ${{inputs.build=='gradle'}}
        run: |
          gradle build

Run Code Online (Sandbox Code Playgroud)

analysis.yaml

on:
  workflow_call
  inputs:
    analysis:
      description: Build type
      required: true
      type: boolean

jobs:
  Build:
    runs-on: self-hosted
    steps:
      - name: Building apps
      - if: …
Run Code Online (Sandbox Code Playgroud)

github runner github-actions

21
推荐指数
2
解决办法
2万
查看次数

跨作业重用 github 操作的一部分

我在 monorepo 中有一个 CI 工作流,为此工作流最终构建了两个项目。作业运行良好,但是,我想知道是否有办法通过为作业设置运行程序来删除此工作流.yml 文件中的重复项。我将它们分开,以便它们并行运行,因为它们不相互依赖并且可以更快地完成。等待 CI 完成时,5 分钟与 10 分钟以上的时间相差很大。

jobs:
  job1:
    name: PT.W Build
    runs-on: macos-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@v1

      - name: Setup SSH-Agent
        uses: webfactory/ssh-agent@v0.2.0
        with:
          ssh-private-key: |
            ${{ secrets.SSH_PRIVATE_KEY }}

      - name: Setup JDK 1.8
        uses: actions/setup-java@v1
        with:
          java-version: 1.8

      - name: Setup Permobil-Client
        run: |
          echo no | npm i -g nativescript
          tns usage-reporting disable
          tns error-reporting disable
          npm run setup.all

      - name: Build PT.W Android
        run: |
          cd apps/wear/pushtracker
          tns build …
Run Code Online (Sandbox Code Playgroud)

continuous-integration yaml github github-actions

12
推荐指数
3
解决办法
8169
查看次数

在 GitHub Actions 工作流程中重用作业

我\xe2\x80\x99m 将管道从 Circle CI 迁移到 Github Actions,我发现有点奇怪,我只能运行作业一次而不是创建作业,然后从工作流程部分调用它,从而可以调用多次作业,而无需重复该作业中的命令/脚本。

\n

我的管道将代码推送到三个环境,然后对每个环境运行灯塔扫描。在 Circle ci 中,我有 1 项工作将代码推送到我的环境,还有 1 项工作来运行 lighthouse。然后,从我的工作流程部分,我只需调用作业 3 次,并将 env 作为参数传递。我是否遗漏了一些东西,或者没有办法在 github actions 中做到这一点?我是否只需在每个作业中写 3 次命令?

\n

github github-actions

6
推荐指数
2
解决办法
3821
查看次数