尝试使用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) 我将以下 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会安装以下软件包:
gdbgdbserverlibbabeltrace1libc6-dbglibipt1valgrind我知道 Actions 支持缓存特定目录(并且已经有几个已回答的 SO 问题和关于此的文章),但我不确定 apt 安装的所有不同软件包最终在哪里。我假设/bin/或/usr/bin/不是唯一受安装软件包影响的目录。
是否有一种优雅的方法来缓存已安装的系统包以供将来运行工作流?
有什么方法可以在单个运行器中运行多个作业或在作业之间共享 Github 操作工作区?
在我的组织中,开发团队使用由多个团队创建和管理的多个可重用工作流程。团队build创建并管理build.yaml构建应用程序。我的团队创建并管理analysis.yaml对应用程序构建进行数据分析并对构建的工件进行归档。
开发团队计划在他们的应用程序工作流程中使用我们的两个工作流程。为了使我的团队的工作流程正常工作,我的工作流程需要访问构建的代码(构建target目录maven、构建build目录gradle和node_modules构建npm目录)。
upload和cache操作)。是否有其他方法可以完成此任务并在构建运行程序本身上运行可重用工作流程?我有下面的例子。
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) 我在 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) 我\xe2\x80\x99m 将管道从 Circle CI 迁移到 Github Actions,我发现有点奇怪,我只能运行作业一次而不是创建作业,然后从工作流程部分调用它,从而可以调用多次作业,而无需重复该作业中的命令/脚本。
\n我的管道将代码推送到三个环境,然后对每个环境运行灯塔扫描。在 Circle ci 中,我有 1 项工作将代码推送到我的环境,还有 1 项工作来运行 lighthouse。然后,从我的工作流程部分,我只需调用作业 3 次,并将 env 作为参数传递。我是否遗漏了一些东西,或者没有办法在 github actions 中做到这一点?我是否只需在每个作业中写 3 次命令?
\n