文档展示了如何将文件设置为秘密环境变量http://readme.drone.io/0.5/secrets/
有没有方便的方法来做相反的事情?例如,让这个 ssh 密钥在 .ssh/id_rsa 中可用,并具有所有正确的权限。
我所说的“方便”显然是指无需键入mkdir
,>
或chmod
文档展示了如何将文件设置为秘密环境变量http://readme.drone.io/0.5/secrets/
有没有方便的方法来做相反的事情?例如,让这个 ssh 密钥在 .ssh/id_rsa 中可用,并具有所有正确的权限。
我所说的“方便”显然是指无需键入mkdir
,>
或chmod
如果您想在构建过程中使用 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
在引号内加上 cat 以保留新行很重要。
您可能还需要添加主机known_hosts
以防止主机密钥问题;在下面更改bitbucket.org
为您要从中提取的任何主机,并将其添加到commands
(在上面显示的命令之后,以确保/root/.ssh
目录存在):
ssh-keyscan -H bitbucket.org >> /root/.ssh/known_hosts
(如果您的构建映像中尚不可用,您还需要安装 openssh-client 或等效项。)
“方便”显然是指无需键入 mkdir、> 或 chmod
不
在 Drone 0.7+ 中,当使用 Github oAuth2 对 Drone 进行身份验证时,它会自动将 Github 用户名和密码添加到构建.netrc
中。
密码实际上是一个令牌而不是密码。将.netrc
如下所示:
machine github.com
login <SOME_SECRET>
password x-oauth-basic
这意味着您可以通过 HTTPS 克隆私有 Github 存储库,而无需指定用户名/密码,即git clone https://github.com/USER/REPO/git
.
您还可以通过添加~/.netrc
文件并添加以下内容在本地获得相同的效果:
machine github.com
login <GITHUB_USERNAME>
password <GITHUB_PERSONAL_TOKEN>
machine api.github.com
login <GITHUB_USERNAME>
password <GITHUB_PERSONAL_TOKEN>
您必须生成个人令牌。
例如,如果使用 Ruby 包管理器bundler,您可以将以下内容添加到 Gemfile:
gem 'documas', git: 'https://github.com/Propheris/documas-core.git'
构建可以bundle install
成功,因为它将使用 Github 令牌通过 HTTPS 克隆上述 repo。唯一的问题是,当您在bundle install
本地进行操作时,它会要求输入用户名/密码。要克服这个~/.netrc
问题,请按照上面的示例向您的开发机器添加一个文件。
在无人机 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