在bash脚本中使用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 -

下面我显示了我的.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
    - 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
,无需进行额外更改。