如何在 gitlab-ci.yml 文件中通过 ssh 设置变量值
Posted
技术标签:
【中文标题】如何在 gitlab-ci.yml 文件中通过 ssh 设置变量值【英文标题】:How to set variable value over ssh in gitlab-ci.yml file 【发布时间】:2021-11-13 20:54:48 【问题描述】:我正在尝试为我的 GitLab Runner 设置一个环境变量,我使用 ssh 命令检索该值。我厌倦了在workflow
中设置变量,如下所示。问题是ssh命令没有执行,被当作字符串处理。
workflow:
rules:
- if: $CI_PIPELINE_SOURCE == "schedule"
when: always
variables:
TABLE_STATUS: ssh gitlab-runner@$TARGET_HOST "source $DRIVE_PATH/config/.config && mysql -u $USER -p$PASSWORD -e \"SELECT IF(MONTH(datetime) = MONTH(NOW()), IF(status = 1, 'TRUE', 'FALSE'), 'FALSE') FROM schema.table WHERE table_name = 'tbl_name';\" "
BRANCH: prod
DRIVE_PATH: /path/to/prod
- when: always
ssh 命令在脚本中工作,但我不知道如何在脚本之前将值分配给变量。
【问题讨论】:
【参考方案1】:在你的变量中直接使用字符串命令确实有可能导致……一个字符串值。
执行命令应该涉及到seen here,子shell命令$(xxx)
。
在您的情况下,来自your comment,使用before_script
directive:
before_script:
TABLE_STATUS=$(ssh gitlab-runner@$TARGET_HOST "source $DRIVE_PATH/config/.config && mysql ...)
【讨论】:
使用:
也会产生一个字符串。我将其更改为TABLE_STATUS=$(ssh ...
,并将其从workflow
移至before_script
。现在应该可以了。我接受这个答案,因为您发布的链接正是我想要的。
@luigigi 好的。我已经相应地修改了答案。以上是关于如何在 gitlab-ci.yml 文件中通过 ssh 设置变量值的主要内容,如果未能解决你的问题,请参考以下文章
如何让 gitlab-runner 从指定文件中读取而不是 .gitlab-ci.yml?
如何创建一个工件,以便它可以在 .gitlab-ci.yml 中下载
如何使用 gitlab-ci.yml 在 gitlab 中更新 JSON 文件的内容?
如何在gitlab-ci.yml中将文件从存储库复制到用于作业的docker容器中