我正在尝试使用一些变量设置我的 ci 文件。我能够像这样生成一个变量;
...
variables:
TARGET_PROJECT_DIR: "${CI_PROJECT_NAME}.git"
但是,我似乎无法做到这一点;
...
variables:
PROJECT_PROTOCOL_RELATIVE_URL: "${CI_PROJECT_URL//https:\/\/}.git"
如果我在 bash 中运行它,我会得到预期的输出,即删除“https://”并附加“.git”。
我的解决方法是将其导出到“脚本”部分,但将其添加到变量部分感觉更整洁,因为这是由实际作业继承的模板的一部分。可以吗?
gitlab.com/my/repo/url.git
Gitlab 输出如下所示:
stages:
- todo
todo-job:
stage: todo
only:
- master
script:
#your question / example
- echo ${CI_PROJECT_URL}
- echo ${CI_PROJECT_URL:8:100}.git
#Because you have the word manipulation in the title, I have some more examples:
#Return substring between the two '_'
- INPUT="someletters_12345_moreleters.ext"
- SUBSTRING=`expr match "$INPUT" '.*_\([[:digit:]]*\)_.*' `
- echo $SUBSTRING
#Store a substring in a new variable and create an output
- b=${INPUT:12:5}
- echo $b
#Substring using grep with regex (more readable)
- your_number=$(echo "someletters_12345_moreleters.ext" | grep -E -o '[0-9]{5}')
- echo $your_number
#Substring using variable and 'grep' with regex (more readable)
- your_number=$(echo "$INPUT" | grep -E -o '[0-9]{5}')
- echo $your_number
#split a string and return a part using 'cut'
- your_id=$(echo "Release V14_TEST-42" | cut -d "_" -f2 )
- echo $your_id
#split the string of a variable and return a part using 'cut'
- VAR="Release V14_TEST-42"
- your_number=$(echo "$VAR" | cut -d "_" -f2 )
- echo $your_number
$ echo ${CI_PROJECT_URL}
https://gitlab.com/XXXXXXXXXX/gitlab_related_projects/test
$ echo ${CI_PROJECT_URL:8:100}.git
gitlab.com/XXXXXXXXXX/gitlab_related_projects/test.git
$ INPUT="someletters_12345_moreleters.ext"
$ SUBSTRING=`expr match "$INPUT" '.*_\([[:digit:]]*\)_.*' `
$ echo $SUBSTRING
12345
$ b=${INPUT:12:5}
$ echo $b
12345
$ your_number=$(echo "someletters_12345_moreleters.ext" | grep -E -o '[0-9]{5}')
$ echo $your_number
12345
$ your_number=$(echo "$INPUT" | grep -E -o '[0-9]{5}')
$ echo $your_number
12345
$ your_number=$(echo "Release V14_TEST-42" | cut -d "_" -f2 )
$ echo $your_number
TEST-42
$ VAR="Release V14_TEST-42"
$ your_number=$(echo "$VAR" | cut -d "_" -f2 )
$ echo $your_number
TEST-42
Cleaning up project directory and file based variables
00:01
Job succeeded
为您提供
CI_PROJECT_PATH
(如果没有额外的命名空间,则仅提供 <namespace>/<project name>
)字符串并且
<project name>
为您提供服务器名称,因此您可以这样做CI_SERVER_HOST
我有类似的设置(也没有引号)。
我不确定这是否适合您,因为我的运行程序和服务器在我的控制之下,并且我不使用外部项目运行管道。 但是您可以通过运行如下作业来获取作业日志中显示的所有可用变量:
variables:
PROJECT_PROTOCOL_RELATIVE_URL: ${CI_SERVER_HOST}/${CI_PROJECT_PATH}.git
同样总是有帮助的是https://docs.gitlab.com/ee/ci/variables/predefined_variables.html
正如您所指出的,可以通过“script:”或“before_script:”部分定义或重新定义
环境变量。如果这原则上有效,您还可以使用继承和 YAML 引用来最大程度地减少丑陋。 但是,如果您不幸并且需要在脚本部分之外使用这些新变量,例如为了为作业选择 docker 映像或定义 Git 标签,则没有解决方案。环境变量不等同于 Gitlab 变量。