Joh*_*van 4 github github-actions
我是 GitHub Actions 的新手,使用各种选项来制定 CI/CD 管道的好方法。
最初,我将所有 CI 步骤放在一项工作中,执行以下操作:
不过,其中一些步骤不需要按顺序完成;例如,我们可以在构建的同时运行 linting 和源代码漏洞扫描;节省时间(如果我们假设这些步骤将会通过)。
即基本上我希望我的管道做这样的事情:
job1 = {
- checkout code from repo #required per job, since each job runs on a different runner
- lint
}
job2 = {
- checkout code from repo
- scan source for vulnerabilities
}
job3 = {
- checkout code from repo
- lint
- scan source for vulnerabilities
- build
- test
- create image
- scan image for vulnerabilities
- await job1 & job2
- push to AWS ECR
}
Run Code Online (Sandbox Code Playgroud)
我有一些问题:
await jobN在作业中设置一些规则;即从另一份工作中查看一份工作的状态?Yes):有没有办法让一项工作的失败立即影响同一工作流程中的其他工作?即如果我的 linting 工作检测到问题,那么我可以立即称其为失败,因此希望 job1 中的失败立即停止工作 2 和 3 消耗额外时间,因为它们不再增加价值。理想情况下,您的一些作业应该封装在它们自己的工作流中,例如:
然后,让这些工作流相互依赖,或者使用不同的触发器来触发。
不幸的是,至少就目前而言,工作流依赖性不是现有功能(参考)。
尽管我觉得将您提到的所有作业包含在单个工作流中会创建一个冗长且难以维护的文件,但我相信您仍然可以通过使用 GitHub 操作语法提供的一些条件来实现您的目标。
可能的选项:
使用后者,示例语法可能如下所示:
jobs:
job1:
job2:
needs: job1
job3:
needs: [job1, job2]
Run Code Online (Sandbox Code Playgroud)
这是一个准备用于测试上述方法的工作流。在此示例中,作业 2 将仅在作业 1 完成后运行,而作业 3 将不会运行,因为它依赖于失败的作业。
name: Experiment
on: [push]
jobs:
job1:
name: Job 1
runs-on: ubuntu-latest
steps:
- name: Sleep and Run
run: |
echo "Sleeping for 10"
sleep 10
job2:
name: Job 2
needs: job1
runs-on: ubuntu-latest
steps:
- name: Dependant is Running
run: |
echo "Completed job 2, but triggering failure"
exit 1
job3:
name: Job 3
needs: job2
runs-on: ubuntu-latest
steps:
- name: Will never run
run: |
echo "If you can read this, the experiment failed"
Run Code Online (Sandbox Code Playgroud)
相关文档:
| 归档时间: |
|
| 查看次数: |
5905 次 |
| 最近记录: |