这里主要是为了记录在使用 CICD 的时候遇到的问题及其处理解决方法。
1. GoCD 执行命令报错
注意在 GoCD 中执行系统命令的方法
- [问题起因] 需要在
GoCD
的agent
机器上面,执行etcd
服务设置对应的键值对,但是通过在Command
中设置之后,提示了如下报错。提示在系统的PATH
中并没有找到对应的etcdctl
命令,但是直接在节点手动执行的话,却是没有问题的。
# 报错信息
# --user=xxx:xxxxxx --endpoints=xxx.xxx.xxx.xxx:xxx
[go] Task: ETCDCTL_API=3 etcdctl put name ${name:0:8}took: 0.24s
Error happened while attempting to execute 'ETCDCTL_API=3 etcdctl put name ${name:0:8}'.
Please make sure [ETCDCTL_API=3 etcdctl put name ${name:0:8}] can be executed on this agent.
[Debug Information] Environment variable PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
[go] Task status: failed, took: 0.24s
[go] Current job status: failed
- [解决方法] 后来在其
github
的issus-810
和issus-4313
中,找到了解决方法。原来是因为通过agent
执行的默认shell
并不是系统常见的/bin/bash
而是/bin/sh
的终端,在其$PATH
中没有找到对应命令的安装路径,所以会提示并没有知道对应的命令。官方开发者建议,如果客户需要大量执行命令的话,可以将其保存到文件中去,然后再进行执行。或者直接通过bash -c
进行声明式终端执行对应命令。
#!/bin/bash
ETCDCTL_API=3 etcdctl version