如何在gitlab ci/cd中使用自定义变量



我正在与gitlab ci/cd变量作斗争。我看到了很多相互矛盾的例子。无论如何,我想知道的是如何在脚本内外使用变量。

例如,在作业配置中,我可以用bash命令在脚本部分分配一个变量吗?

some-job:
variables:
SOME_VAR: ''
script:
- SOME_VAR = $(<file_with_a_line_of_text.txt)

在上面的情况下,我不确定我是否能做到这一点。但我需要用文件内容(即工件(填充一个变量。此外,我什么时候在变量前面使用"$"?我看到的一些使用这些格式的例子:

"SOME_VAR" #in quotes, no dollar sign
"${SOME_VAR}" #in quotes, with dollar sign and wrapped with curly braces
${SOME_VAR} #no quotes, with dollar sign and wrapped with curly braces
$SOME_VAR #i.e. without the double quotes or curly braces
SOME_VAR #i.e. without the double quotes, dollar sign, and curly braces

我在例子中看到了很多用法的变化,但不知道什么时候该使用每种风格。我在网上找不到一个使用bash命令在脚本中设置自定义变量的例子。

当我在bash中设置变量时,我总是在=:周围没有空格

VAR1="some string"
VAR2=23
VAR3=true
VAR4=$(cat /path/to/file.txt)

让我们一次看一个例子:

  1. 您可以通过在字符串周围使用引号将变量设置为字符串
  2. 您可以将其设置为int(可能也是float,但尚未亲自使用(
  3. 你可以把它设置为bool
  4. 您可以将其设置为命令的输出。该命令位于命令内部:$(#command)

现在让我们使用它们:

echo $VAR1
# some string
echo "This is my variable $VAR1"
# This is my variable some string
echo "This is my variable ${VAR1}"
# This is my variable some string
echo ${VAR1}
# some string
echo "Error code ${VAR2}A"
# Error code 23A
echo "Error code $VAR2A"
# Error code --- Note: the variable $VAR2A dosn't exist
echo "Error code ${VAR2}${VAR1}"
# Error code 23some string
echo VAR1
# VAR1
echo "VAR1"
# VAR1

这说明了不同形式之间的差异,但通常情况下,您使用$+variable-name引用变量的值。执行CCD_ 4或CCD_;SOME_VAR";(即根本不引用变量(。

$SOME_VAR${SOME_VAR}之间的区别在于,后者允许您在变量前后直接存在其他内容时使用它,而不会出错。

如何在gitlab ci/cd中使用自定义变量?

通常类似于任何其他shell。

但请注意,gitlab-ci.yml是一个yaml文件,yaml有特殊的部分。因为在script:中,例如- echo bla- 'echo bla'相同,因为在yaml中,script:的内容是后来由shell吐出的字符串数组。

如何在脚本内外使用变量。

通常类似于任何其他shell脚本。

何时使用每种风格的

"SOME_VAR" #in quotes, no dollar sign
SOME_VAR #i.e. without the double quotes, dollar sign, and curly braces

当您想要一个字符串SOME_VAR

"${SOME_VAR}"

"$SOME_VAR"相同。当您希望SOME_VAR变量的内容按字面意思显示时。

${SOME_VAR} #no quotes, with dollar sign and wrapped with curly braces
$SOME_VAR #i.e. without the double quotes or curly braces

当您想要在分词和文件名扩展后的SOME_VAR变量的内容时。这意味着SOME_VAR='*'echo "$SOME_VAR"将打印*,但echo $SOME_VAR将打印当前目录中的所有文件。您通常总是希望引用展开式。

如果与其他字符串连接,则使用形式${SOME_VAR},例如$SOME_VARbla不是${SOME_VAR}bla

不要在脚本中使用大写变量,而应该使用小写变量。导出的变量更喜欢使用大写变量。注意冲突-COLUMNPATHUSERUID是已使用的变量的示例。

我可以用bash命令在脚本部分分配一个变量吗?

Shell具有空间意识var = val执行名为var的命令,其中包含两个参数=val。CCD_ 32将字符串val分配给名为var的变量。Do:

- SOME_VAR=$(<file_with_a_line_of_text.txt)

在gitlab ci,我更喜欢使用cat,以防我想搬到高山。$(<是bash扩展。

- SOME_VAR=$(cat file_with_a_line_of_text.txt)

在具有variables: SOME_VAR的环境中设置提供SOME_VAR似乎没有任何意义。

何时在变量前面使用"$"?

当您想要触发变量扩展时。变量展开用变量名代替变量值。

使用检查脚本http://shellcheck.net。阅读https://mywiki.wooledge.org/BashGuide一个好的外壳介绍和https://wiki.bash-hackers.org/scripting/obsolete。

最新更新