如何创建无人机秘密文件?

时间:2016-12-26 12:00:12

标签: drone drone.io

文档显示如何将文件设置为秘密envvar http://readme.drone.io/0.5/secrets/

有没有方便的方法来做相反的事情?例如让这个ssh密钥在.ssh / id_rsa中可用,并具有所有正确的权限。

并且通过"方便"我显然无需输入mkdir>chmod

3 个答案:

答案 0 :(得分:5)

如果要在构建过程中使用ssh密钥,可以使用以下命令将ssh密钥添加到秘密存储区:

drone secrets add --image=<image> <repo> SSH_KEY @/path/to/.ssh/id_rsa

请注意,@表示法与curl类似。此功能存在的原因是因为使用cat(或其他某种管道)创建密码似乎会导致格式错误的文件上传。

添加文件后,您可以在Yaml中引用:

pipeline:
  image: busybox
  environment:
    - SSH_KEY: ${SSH_KEY}
  commands:
    - mkdir /root/.ssh && echo "$SSH_KEY" > /root/.ssh/id_rsa && chmod 0600 /root/.ssh/id_rsa

请注意,为了保留新行,在引号内加SSH_KEY非常重要。

您可能还需要将主机添加到known_hosts以防止主机密钥问题;将bitbucket.org更改为您在下面提取的任何主机,并将其添加到commands 上面显示的命令后,以确保/root/.ssh目录存在):

ssh-keyscan -H bitbucket.org >> /root/.ssh/known_hosts

(您还需要安装openssh-client或同等产品,如果它在构建映像中尚未提供。)

  

通过“方便”我明显意味着无需输入mkdir,&gt;或者chmod

没了

答案 1 :(得分:1)

在Drone 0.7+中使用Github oAuth2对Drone进行身份验证时,它会自动将Github用户名和密码添加到构建return ( <List dataArray={this.props.data} renderRow={(item) => <ListItem> <Text>{item.name}</Text> </ListItem> }> </List> );

密码实际上是一个令牌instead of a password.netrc看起来如此:

.netrc

这意味着您可以通过HTTPS克隆私有Github存储库,而无需指定用户名/密码,即machine github.com login <SOME_SECRET> password x-oauth-basic

您还可以通过添加git clone https://github.com/USER/REPO/git文件并添加类似以下内容来在本地获得相同的效果:

~/.netrc

您必须generate a personal token

例如,如果使用Ruby包管理器bundler,您可以将以下内容添加到Gemfile中:

machine github.com
  login <GITHUB_USERNAME>
  password <GITHUB_PERSONAL_TOKEN>

machine api.github.com
  login <GITHUB_USERNAME>
  password <GITHUB_PERSONAL_TOKEN>

构建可以成功gem 'documas', git: 'https://github.com/Propheris/documas-core.git' ,因为它将使用Github令牌通过HTTPS克隆上述repo。唯一的问题是,当您在本地执行bundle install时,它会要求输入用户名/密码。为了解决这个问题,请按照上面的示例将bundle install文件添加到开发计算机中。

答案 2 :(得分:0)

在0.8+无人机中

首先,如果base64是二进制文件,则需要对其进行编码。

base64 -i yourfile.bin -o base64file.bin

然后将机密添加到无人机:

drone secret add --repository <repo> --name yourname_keys --value @base64file.bin

一旦进入管道,便会发生以下情况:

command:
 - echo "$YOURNAME_KEYS" > some/path/afilebase64
 - base64 -D -i some/path/afilebase64 -o some/path/afilebinary