我正在尝试将CI工作流程从CircleCI迁移到GitHub Actions。我面临的最后一个主要困难是部署。
目前,我的工作流程是,当我将标签推入GitHub存储库时,它将运行测试,然后运行部署。唯一的问题是CircleCI过滤器标签仅在标签与正则表达式/v[0-9]+(\.[0-9]+)*/
相匹配时才运行作业。
在运行部署之前,如何检查确保推送的标签与上面的正则表达式模式匹配?
我目前有以下GitHub Actions yml文件:
name: CI
on: [create]
jobs:
# ...
deploy:
runs-on: ubuntu-latest
if: github.event.ref_type == 'tag' && github.event.ref == SOMETHING HERE
steps:
- uses: actions/checkout@v1
# ...
在if
块下,我需要将github.event.ref == SOMETHING HERE
更改为其他名称。我查看了Contexts and expression syntax for GitHub Actions文档页面。但是由于GitHub Actions的灵活性和强大性,似乎应该有一种方法或方法来执行此操作,或者至少应采取某种解决方法。
如何确保标签(github.event.ref
)与正则表达式(/v[0-9]+(\.[0-9]+)*/
)相匹配?
答案 0 :(得分:4)
根据docs,您可以执行以下操作:
(gdb) layout asm
Undefined command: "layout". Try "help".
我尝试了上面的方法,可以确认它是否有效。这不是完整的正则表达式功能,但足以满足您的需求。
答案 1 :(得分:2)
我设法通过两部分方法来实现这一目标。第一部分包括过滤要运行的标签。第二部分是为您的deploy
工作创建条件。
工作流程的简化版本如下:
name: CI-CD
on:
push:
branches:
- stable
tags:
- '[0-9]+.[0-9]+.[0-9]+'
- '[0-9]+.[0-9]+.[0-9]+rc[0-9]+'
pull_request:
branches:
- stable
jobs:
test:
steps:
...
deploy:
needs: test
if: startsWith(github.ref, 'refs/tags')
steps:
...
我在推,标签和拉请求到特定分支上运行我的工作流。您可以创造性地了解要如何精确地过滤标签。 Check out the filter patterns。
我苦苦挣扎的部分是如何设置正确的条件来运行deploy
作业。我决定满足以下条件:
needs: test
确保仅在test
作业成功后才能运行。
然后我滥用了一个事实,即github.ref
在推送到分支时将'refs/heads/stable'
,在推送标签时将'refs/tags/<your tag>'
。因此,我简单地通过以下条件测试这种差异。
if: startsWith(github.ref, 'refs/tags')
对我来说,工作很吸引人,但可能取决于您的设置。
当然,您也可以创建单独的工作流程,但就我而言,我一直想先运行测试套件。
答案 2 :(得分:0)
不幸的是,我认为尚无任何方法可以对char buffer[16] = { 0 };
strcat(buffer, "one");
write(fd,buffer,16);
条件表达式进行正则表达式匹配。
一种选择是对if
事件使用过滤。
push
另一种选择是在单独的步骤中进行正则表达式检查,并在on:
push:
tags:
- 'v*.*.*'
条件下检查结果。
if