我正在尝试使用rules:参数,以使作业仅在指定用户进行了推送的情况下才会出现在管道中。我不想为每个工作定义用户列表,所以我有以下全局变量:
variables:
USER_LIST: "user1 user2 user3"
在工作中,我有以下内容:
rules:
- if '$USER_LIST =~ /$GITLAB_USER_LOGIN/'
when: on_success
- when: never
这似乎不起作用,因为我怀疑正在使用的正则表达式模式未被替换为变量,而是使用$GITLAB_USER_LOGIN
作为搜索字符串。如果我使用显式搜索:
rules:
- if '$USER_LIST =~ /user1/'
when: on_success
- when: never
然后模式匹配就很好了。
注意:我知道GITLAB_USER_LOGIN
是受保护的变量。我也遇到GITLAB_USER_EMAIL
同样的问题。
问题是,如何将GITLAB预定义变量放入将用于模式匹配的字符串中?
答案 0 :(得分:0)
documentation显示与内容匹配的正则表达式应如下所示:
$VARIABLE =~ /^content.*/
对于您的代码,您需要添加^
和.*
:
rules:
- if '$USER_LIST =~ /^user1.*/'
when: on_success
- when: never
答案 1 :(得分:0)
您在规则中使用的是变量而不是正则表达式。因此,您不需要在$GITLAB_USER_LOGIN
变量周围使用斜线。尝试这样的事情:
rules:
- if '$USER_LIST =~ $GITLAB_USER_LOGIN'