如何使用bash cli(无需ruby)为Travis CI配置加密API密钥?

4
我一直在阅读Travis CI文档关于API访问密钥的加密,他们建议使用他们的ruby gem。是否有其他方法可以做到这一点,以便我不必安装整个ruby环境并使用我的GitHub凭据登录?
此处所述,公钥可以轻松下载。是否有可能使用openssl等工具,并获得与使用travis encrypt相同的结果?

我不确定是否应该在这里发布还是在Superusers上发布:S - Robin
这个问题有点棘手,因为Travis有点跨足两个领域。据我所知,travis命令是基于Ruby的,所以你必须依赖Ruby,除非你能找到一个兼容的替代品。 - tadman
认为加密代码是AES,如此展示:https://github.com/travis-ci/travis-core/blob/fd905d451087627e1d7320585b10c5bf75d6ad40/lib/travis/model/encrypted_column.rb#L67(然后第75行是它的base64编码)。但我不使用travis,所以我不能确定... - Joe
1个回答

3
为了解决这个问题,我创建了一个小的bash脚本:
#!/bin/bash

usage() { echo -e "Travis Encrypt Script\nUsage:\t$0 \n -r\t<username/repository> \n -e\t<string which should be encrypted>" 1>&2; exit 1; }

while getopts ":r:e:" param; do
  case "${param}" in
    r)
      r=${OPTARG}
      ;;
    e)
      e=${OPTARG}
      ;;
    *)
      usage
      ;;
  esac
done
shift $((OPTIND -1))

if [ -z "${r}" ] || [[ !(${r} =~ [[:alnum:]]/[[:alnum:]]) ]] || [ -z "${e}" ]; then
  usage
fi

key_match="\"key\":\"([^\"]+)\""
key_url="https://api.travis-ci.org/repos/${r}/key"
request_result=$(curl --silent $key_url)

if [[ !($request_result =~ $key_match) ]]; then
  echo "Couldn't retrieve key from ${key_url}. "
  usage
fi

echo -n "${e}" | openssl rsautl -encrypt -pubin -inkey <(echo -e "${BASH_REMATCH[1]}") | openssl base64 -A
echo

它还可以在这个Github Gist中找到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接