如何将秘密传递给测试?

时间:2020-07-27 15:59:37

标签: ansible continuous-integration github-actions secret-key

我使用ansible-test在github上测试我的收藏集(使用Actions)。对于与外部API的集成测试,它需要一个秘密(令牌)。通常,我将环境变量用于CI中的机密,但是ansible-test在运行任何测试之前会有意清除它们。

我绝对不想使用普通的cat $SECRET > secret,因为它可能会错误地在Galaxy上存档/发布。

有没有安全的方法可以将机密传递给集成角色?

3 个答案:

答案 0 :(得分:1)

我只是花了一些时间试图弄清楚同样的事情。

基本上不可能以安全的方式将 GHA 的机密传递给 ansible-test

环境变量不会暴露给 ansible-test,请参阅:https://docs.ansible.com/ansible/latest/dev_guide/testing_running_locally.html#environment-variables

您也不能将它们作为选项或参数传递给 ansible-test

最好的办法(虽然不安全)是用 integration_config.yml 传递这些变量:https://docs.ansible.com/ansible/latest/dev_guide/testing_integration.html#integration-config-yml

答案 1 :(得分:0)

是的,GitHub为此提供了秘密。 来自https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idstepsenv

steps:
- name: My first action
env:
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  FIRST_NAME: Mona
  LAST_NAME: Octocat

您还可以通过bash将它们传递给任何命令。您最多可以创建100个机密。

答案 2 :(得分:0)

按照与 rndmh3ro 相同的方法,我创建和 integration_config.yml.tpl 文件如下:

---
my_var: ${MY_VAR}
my_other_var: ${MY_OTHER_VAR}

我使用以下 bash 脚本 integration_config.sh

填充它
 #!/bin/bash
cd "$(dirname "$0")"

truncate -s 0 integration_config.yml
while read -r line;
do
    echo $line
    eval 'echo "'"$line"'" >> integration_config.yml'
done < "integration_config.yml.tpl"
# !! Don't forget the trailing blank line in your template

echo ""
echo "=>"
echo ""
cat integration_config.yml

而且效果很好:)