我刚开始接触GitHub Actions,并尝试使用不同的选项来找出CI/CD流水线的良好方法。
最初,我将所有的CI步骤放在一个作业中,执行以下操作:
- 从repo检出代码
- lint
- 扫描源代码以检测漏洞
- 构建
- 测试
- 创建映像
- 扫描映像以检测漏洞
- 推送到AWS ECR
然而,其中一些步骤不需要按顺序执行。例如,我们可以并行运行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
- build
- test
- create image
- scan image for vulnerabilities
- await job1 & job2
- push to AWS ECR
}
我有几个问题:
- 是否可以在作业内设置一些
await jobN
规则;即从另一个作业中查看一个作业的状态? - (只有当问题1的答案为
是
时才相关): 是否有任何方法可以立即影响同一工作流程中其他作业的失败? 例如,如果我的检测作业检测到问题,则可以立即将其称为失败,因此希望作业1中的失败立即停止作业2和作业3的运行,因为它们不再增加价值。
需要
它。 - DannyBjob2
未成功或跳过的情况下运行job3
,则可以在job3
上使用if:${{always()}}
。 https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idneeds它仍将强制首先运行job2
。 - gary69