文档显示如何将文件设置为秘密envvar http://readme.drone.io/0.5/secrets/
有没有方便的方法来做相反的事情?例如让这个ssh密钥在.ssh / id_rsa中可用,并具有所有正确的权限。
并且通过"方便"我显然无需输入mkdir
,>
或chmod
答案 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
例如,如果使用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