在bash脚本中使用yml变量进行交叉
下面我显示了我的.gitlab-ci.yml文件:在bash脚本中使用yml变量进行交叉,bash,gitlab,Bash,Gitlab,下面我显示了我的.gitlab-ci.yml文件: variables: timezone: "Europe/Vienna" stages: - style - build style: stage: style script: - sudo docker run --rm -v $PWD:/code omercnet/pycodestyle build: stage: build script: blla blla -
variables:
timezone: "Europe/Vienna"
stages:
- style
- build
style:
stage: style
script:
- sudo docker run --rm -v $PWD:/code omercnet/pycodestyle
build:
stage: build
script:
blla blla
- sudo docker exec ${CI_PROJECT_PATH_SLUG} /bin/bash -c "./install.sh"
blla blla
接下来是我的install.sh脚本:
#!/bin/bash
blla blla
echo -e "\nmx_download_url: https://dl.bintray.com/random" >> /etc/random-installer/setup.yml
sed -i s+old text+new text+g etc/random-installer/setup.yml
blla blla
如何使用bash脚本中新文本中yml文件中变量时区的值?
timezone
作为gitlab作业的环境变量可见,但是install.sh
脚本是从另一个上下文运行的,由docker执行。Docker本身有权访问$timezone
,但它使用的容器却没有
要解决您的问题,您可以显式传递它:
- sudo docker exec -e TIMEZONE=$timezone ${CI_PROJECT_PATH_SLUG} /bin/bash -c "./install.sh"
这将为容器内的install.sh设置环境变量
$TIMEZONE
。不幸的是,该变量不起作用。也许我的bash与perl不同,无法识别这些函数……所以我需要在运行程序中将TIMEZONE设置为env变量,然后在这个命令中将其与yml文件中的TIMEZONE变量相关联?我理解正确了吗?environment:.gitlab ci.yml
中的部分已经在为您的作业定义环境变量,这就是我在示例中使用$timezone
(小写)的原因。我将环境部分($timezone
)中的值放入docker容器($timezone
)内的环境变量中。用我提供的示例替换sudo docker exec…
后,您将能够在install.sh
中使用$TIMEZONE
,无需进行额外更改。