1

我正在使用 travis 客户端编写一个 ruby​​ 脚本来与我的 TravisCI 构建进行交互。我有一个工作 .travis.yml 文件,其中包含一系列加密的环境变量。我正在尝试使用覆盖 travis.yml 中现有加密环境变量之一的新 env_var 从我的脚本触发构建,但我无法覆盖 .yml 配置。

使用 CURL 进行 API 调用时,我可以成功覆盖 env var。

body='{
  "request": {
    "branch":"master",
    "config": {
      "merge_mode": "deep_merge",
      "env": {
        "SOME_ENV_VAR_DEFINED_IN_YML": '"$some_new_value_for_the_old_key"'
      }
    }
  }
}'
curl -s -X POST \
   -H "Content-Type: application/json" \
   -H "Accept: application/json" \
   -H "Travis-API-Version: 3" \
   -H "Authorization: token MYSECRETTOKEN" \
   -d "$body" \
   https://api.travis-ci.com/repo/MYORG%2FMYREPO/requests

这就是我试图在脚本中对客户端执行的操作,但无法做到。

我已经尝试获取 repo 并设置一些环境变量:

my_repo = Travis::Pro::Repository.find("MYREPO")
my_repo.env_vars.upsert("SOME_ENV_VAR_DEFINED_IN_YML", "some_new_value", public: true)

纳达。它在我可以在 travis ui 中看到的 repo 上设置 env var,但不会覆盖 .yml 配置。

我还尝试在我想要的构建上设置配置对象。

build_that_i_am_targeting.config["global_env"][index_of_env_var]="SOME_ENV_VAR_DEFINED_IN_YML=some_new_value"

还有 nada - 在启动构建时,它将全局环境变量重置为以前的版本。

链接到我认为相关的文档:https ://github.com/travis-ci/travis.rb#build-environment-variables

我正在考虑使用客户端会话(就在文档上面的下方),但我觉得我缺少一些更简单的东西。非常感谢任何建议/想法!谢谢!

4

1 回答 1

0

我知道这已经很晚了,但供将来参考。我不完全确定您要做什么,但是我遇到了类似的问题,这里有两种可能的解决方案。

  1. 如果您的 curl 调用按您希望的方式工作,但您只需将其转换为 ruby​​,您可以使用此在线“curl to ruby​​ 转换器”工具:https ://jhawthorn.github.io/curl-to-红宝石/

  2. 如果您想使用 travis ci 在本地将环境变量添加到 .travis.yml 文件中(然后在您准备好后将其推出),您可以执行以下操作:

#your_ruby_script.rb
env=some_value 
travis_cmd = "travis encrypt MY_NEW_ENV=#{env} --add env.global"
system(travis_cmd)

这个答案有更多关于从 ruby​​ 调用 shell 命令的信息:How to call shell commands from Ruby

于 2021-07-29T15:46:56.513 回答