本文解释了如何在 OSX 上安装 Exec Runner。Exec Runner 以二进制格式打包并作为 Github Release 分发。
下载 Exec Runner 程序
下载并解压二进制文件。你将需要修改以下命令以使用最新版本。
$ curl -L https://github.com/drone-runners/drone-runner-exec/releases/latest/download/drone_runner_exec_darwin_amd64.tar.gz | tar zx
sudo cp drone-runner-exec /usr/local/bin
配置 Exec Runner
Exec Runner 是使用环境变量文件配置的。环境文件位置由运行进程的用户决定。如果用户是 root:
/etc/drone-runner-exec/config
如果用户不是 root 用户:
~/.drone-runner-exec/config
该文件应使用语法 <variable>=value
将变量设置为指定值,并使用 #
表示注释。请注意,这不是 bash 文件。不支持 Bash 语法和 Bash 表达式。
DRONE_RPC_PROTO=https
DRONE_RPC_HOST=drone.company.com
DRONE_RPC_SECRET=super-duper-secret
DRONE_RUNNER_PATH=/usr/local/bin:/usr/bin:/usr/sbin:/sbin
本文引用了以下配置选项。有关配置选项的完整列表,请参阅 配置。
-
- DRONE_RPC_HOST
- 提供
Drone Server
的主机名(和可选端口)。Runner 连接到指定主机地址的 Server 以接收 Pipeline 以执行。: 提供Drone Server
的主机名(和可选端口)。Runner 连接到指定主机地址的 Server 以接收 Pipeline 以执行。
-
- DRONE_RPC_PROTO
- 提供用于连接
Drone Server
的协议。该值必须是http
或https
。
-
- DRONE_RPC_SECRET
- 提供用于向
Drone Server
进行身份验证的共享密钥。这必须与你的 Drone Server 配置中定义的 Secret 匹配。
-
- DRONE_RUNNER_PATH
- 为你的 Pipeline 步骤提供 PATH 环境变量。此参数是可选的,但建议使用。你可能会发现默认系统 PATH 环境变量不包含许多命令,从而导致找不到命令错误。
日志记录
Exec Runner 将日志写入主机上的文件。在启动服务之前,应在环境文件中配置日志文件位置。文件位置由运行该进程的用户决定。如果用户是 root:
DRONE_LOG_FILE=/var/log/drone-runner-exec/log.txt
如果用户是非 root 用户:
DRONE_LOG_FILE=/Users/<user>/.drone-runner-exec/log.txt
日志文件的存放目录必须在启动服务之前先创建好:
mkdir /var/log/drone-runner-exec
mkdir .drone-runner-exec/
安装 Exec Runner
使用以下命令安装 Exec Runner 并启动服务。
drone-runner-exec service install
drone-runner-exec service start
如果用户是非 root 用户,你可能仍需要以 root 用户身份安装它,但你可以将服务配置为以你的用户身份运行:
sudo drone-runner-exec service install --config=/Users/<user>/.drone-runner-exec/config
sudo defaults write /Library/LaunchDaemons/drone-runner-exec UserName <user>
sudo drone-runner-exec service start
验证安装结果
检查日志并验证 Runner 是否成功建立了与 Drone Server 的连接。如果用户是 root:
$ cat /var/log/drone-runner-exec/log.txt
INFO[0000] starting the server
INFO[0000] successfully pinged the remote server
如果用户是非 root 用户:
$ cat ~/.drone-runner-exec/log.txt
INFO[0000] starting the server
INFO[0000] successfully pinged the remote server