5

文档展示了如何将文件设置为秘密环境变量http://readme.drone.io/0.5/secrets/

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

我所说的“方便”显然是指无需键入mkdir,>chmod

4

3 回答 3

7

如果您想在构建过程中使用 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

于 2016-12-26T15:36:10.383 回答
1

在 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问题,请按照上面的示例向您的开发机器添加一个文件。

于 2017-08-15T15:37:51.640 回答
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
于 2018-10-15T08:26:30.680 回答