运行 GO111MODULE=on go install 。 ./cmd/... 在云初始化中

Posted

技术标签:

【中文标题】运行 GO111MODULE=on go install 。 ./cmd/... 在云初始化中【英文标题】:run GO111MODULE=on go install . ./cmd/... in cloud init 【发布时间】:2022-01-01 10:07:08 【问题描述】:

我有一个使用 cloud init 部署的 bash 脚本,我的 bash 脚本包含以下部分代码

GO111MODULE=on go install . ./cmd/...

直接在已部署服务器的终端中运行我的 bash 脚本时,它按预期工作。但是当我在云配置中使用 runcmd 运行它时,这部分脚本:

GO111MODULE=on go install . ./cmd/...

没有被执行,有人知道为什么吗?

    runcmd:
  - [ bash, /usr/local/bin/myscript.sh ]

【问题讨论】:

【参考方案1】:

runcmd 中的正确 shell 执行将是(如在 Cloud config examples 中所见):

- [ bash, -c, /usr/local/bin/myscript.sh ]

或:

- [ /usr/local/bin/myscript.sh ]

假设您的脚本以 shebang #!/bin/bash 开头

另外,您需要在脚本中添加任何环境变量,因为Cloud config examples 不包含任何明显的设置方式。

#!/bin/bash
export GO111MODULE=on
export ...

【讨论】:

myscript.sh 使用 runcmd 执行,但是 GO111MODULE=on 的部分没有执行,或者确实执行但路径错误,不确定!!直接在服务器上运行 myscript.sh,工作正常 @iFadi 我将在您的脚本myscript.sh 中添加export GO111MODULE=on inside,并确保使用bash -c 调用所述脚本。 感谢提示,但它仍然不起作用,我在 /var/log/syslog 下发现执行 GO 命令后出现以下错误:build cache is required, but could not be located: GOCACHE is not defined and neither $XDG_CACHE_HOME nor $HOME are defined 我不知道如何修复它. @iFadi 我已经编辑了答案以包含环境变量。【参考方案2】:

感谢 VonC 的提示,我能够解决此问题。我将以下内容添加到 myscript.sh

GOCACHE=/root/.cache/go-build
export GOCACHE
export GO111MODULE=on
go install . ./cmd/...


runcmd:
- [ bash, -c, /usr/local/bin/myscript.sh ]

脚本现在从 cloud-init 部署和运行。

【讨论】:

干得好。赞成。

以上是关于运行 GO111MODULE=on go install 。 ./cmd/... 在云初始化中的主要内容,如果未能解决你的问题,请参考以下文章

GO111MODULE 说明

golang版本管理工具GO111MODULE

go module

go mod使用

go 设置代理访问

VSCODE配置golang插件