在Windows上使用Gitlab CI/CD服务时,由于Gitlab Runner服务使用的是一个特殊的账户,这个账户不会读取到当前登录账户的私有环境变量,也没有私有的用户目录;而go runtime会把缓存目录定向到用户目录下,这个时候就会出现问题导致无法编译,导致CI/CD无法产生正确的产物。同时也会出现go环境变量丢失的现象,同样会导致编译失败。
此时我们需要使用临时环境变量对缓存目录进行重定向操作。在Powershell环境下使用以下语句来指定临时环境变量。
$env:[环境变量名]="[环境变量字符值]"
$env:[环境变量名]=[环境变量数字值]
因此,使用以下脚本来进行go项目的编译。在go版本16.6上测试通过。运行目录位于main.go所在目录。
$env:GO111MODULE="auto"
$env:GOARCH="amd64"
$env:GOENV=
$env:GOCACHE="$env:ALLUSERSPROFILE/goCache"
$env:GOMODCACHE="$env:ALLUSERSPROFILE/goModCache"
$env:CGO_ENABLED=1
$env:GOPROXY="https://goproxy.cn,direct"
$env:CC="gcc"
$env:CXX="g++"
go env
go build -a -o test.exe
go clean -modcache
使用powershell运行该段脚本,即可在Gitlab CI生成对应的可执行文件。