当我试图使用CodeBuild golang映像1.10构建我的golang项目时,它失败了,无法找到子包。一些背景:
申请的组织方式如下:
/go/src/company/app
/go/src/company/app/sub1
/go/src/company/app/sub2
etc...这在我的开发机器上构建得很好。然而,当被代码构建所拉动时,它会被拉到一个不同的目录(/codebuild/output/srcNNN/src/<some path>)中,其中<some path>会根据触发构建的原因而有所不同。
我最初是通过将代码复制到golang目录(/codebuild/output/srcNNN)来工作的,但是由于GOPATH目录的CodeBuild环境变量在前面插入了/go:(/go:/codebuild/output/srcNNN),所以我使用了观察到的./.复制。然而,这是丑陋的,并失败了,因为我一开始就以另一种方式启动了构建。
我的问题是,是否有一个好的方法使这一工作?我的下一个想法是将字符串操作应用于观察到的路径,并在那里进行复制,以获得(希望)更高的可靠性。但这只有在GOPATH符合我的假设的情况下才能奏效。
任何想法都将不胜感激。
说明:在代码中导入包时,导入外部包的步骤如下:
import (
"context"
...
}子包不是显式导入的,而是在部署代码时发现的,如上面所示(/go/src/company/app)。然而,AWS CodeBuild并不以这种方式引入代码。
发布于 2019-06-07 01:08:17
这就是我所采取的方法。
version: 0.2
env:
variables:
PACKAGE: "github.com/rhyselsmore/foo"
phases:
install:
commands:
# AWS Codebuild Go images use /go for the $GOPATH so let's copy our
# application source code into that directory structure.
- mkdir -p "/go/src/$(dirname ${PACKAGE})"
- ln -s "${CODEBUILD_SRC_DIR}" "/go/src/${PACKAGE}"
- # Make sure we're in the package directort within our GOPATH
- cd "/go/src/${PACKAGE}"现在假设包变量是您正在构建的存储库的根,我们可以发出go命令。让我们一条条地把它拆开。
- mkdir -p "/go/src/$(dirname ${PACKAGE})"这将在GOPATH中为您的包创建一个新目录。
- ln -s "${CODEBUILD_SRC_DIR}" "/go/src/${PACKAGE}"这将从CodeBuild项目的根创建一个符号链接到Go包。
- cd "/go/src/${PACKAGE}"这将启动在Go包的CWD中执行的代码构建操作的其余部分。
https://stackoverflow.com/questions/53382185
复制相似问题