简体   繁体   English

构建使用 go 模块的项目时,权限被拒绝在 Jenkins 中创建 /go 目录

[英]Permission denied creating /go directory in Jenkins when building a project that uses go modules

When I try to build a go Jenkins project that uses go modules, I see this error:当我尝试构建一个使用 go 模块的 go Jenkins 项目时,我看到以下错误:

go: writing go.mod cache: mkdir /go: permission denied

I also see a similar error for every import:对于每次导入,我也看到类似的错误:

project-name/cmd imports
    github.com/antonfisher/nested-logrus-formatter: mkdir /go: permission denied
project-name/cmd imports
    github.com/gorilla/mux: mkdir /go: permission denied
project-name/cmd imports
    github.com/pkg/errors: mkdir /go: permission denied
project-name/cmd imports
    github.com/sirupsen/logrus: mkdir /go: permission denied
project-name/cmd imports
    github.com/spf13/cobra: mkdir /go: permission denied
project-name/cmd imports
    github.com/spf13/viper: mkdir /go: permission denied
project-name/cmd imports
    k8s.io/api/core/v1: mkdir /go: permission denied
project-name/cmd/cli/backup imports
    github.com/vmware-tanzu/velero/pkg/apis/velero/v1: mkdir /go: permission denied
project-name/cmd/cli/backup imports
    github.com/vmware-tanzu/velero/pkg/backup: mkdir /go: permission denied
project-name/cmd/cli/backup imports
    github.com/vmware-tanzu/velero/pkg/builder: mkdir /go: permission denied
project-name/cmd/cli/backup imports
    k8s.io/apimachinery/pkg/apis/meta/v1: mkdir /go: permission denied
project-name/cmd/cli/csisnaprestore imports
    github.com/gosuri/uitable: mkdir /go: permission denied
project-name/cmd/cli/csisnaprestore imports
    github.com/kubernetes-csi/external-snapshotter/v2/pkg/apis/volumesnapshot/v1beta1: mkdir /go: permission denied
project-name/cmd/cli/csisnaprestore imports
    k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset: mkdir /go: permission denied
project-name/cmd/cli/csisnapshot imports
    k8s.io/apimachinery/pkg/apis/meta/v1/unstructured: mkdir /go: permission denied
project-name/cmd/cli/csisnapshot imports
    k8s.io/apimachinery/pkg/util/wait: mkdir /go: permission denied
project-name/cmd/cli/initz imports
    k8s.io/api/apps/v1: mkdir /go: permission denied
project-name/cmd/cli/px/appbackup imports
    github.com/libopenstorage/stork/pkg/apis/stork/v1alpha1: mkdir /go: permission denied
project-name/cmd/cli/px/credentials imports
    github.com/libopenstorage/openstorage/api: mkdir /go: permission denied
project-name/cmd/cli/repository imports
    gocloud.dev/blob: mkdir /go: permission denied
project-name/cmd/cli/snaprestore imports
    k8s.io/apimachinery/pkg/labels: mkdir /go: permission denied
project-name/cmd/cli/snapshot imports
    k8s.io/apimachinery/pkg/runtime/schema: mkdir /go: permission denied
project-name/cmd/cli/snapshot imports
    k8s.io/client-go/dynamic: mkdir /go: permission denied
project-name/cmd/cli/veleroutil imports
    k8s.io/apimachinery/pkg/api/errors: mkdir /go: permission denied
project-name/cmd/cli/version imports
    k8s.io/apimachinery/pkg/util/intstr: mkdir /go: permission denied
project-name/pkg/cli imports
    github.com/go-openapi/swag: mkdir /go: permission denied
project-name/pkg/cli imports
    github.com/spf13/pflag: mkdir /go: permission denied
project-name/pkg/cli imports
    k8s.io/client-go/kubernetes: mkdir /go: permission denied
project-name/pkg/cli imports
    k8s.io/client-go/rest: mkdir /go: permission denied
project-name/pkg/cli imports
    k8s.io/client-go/tools/clientcmd: mkdir /go: permission denied
project-name/pkg/cli imports
    k8s.io/client-go/tools/clientcmd/api: mkdir /go: permission denied
project-name/pkg/core/framework imports
    github.com/hashicorp/go-version: mkdir /go: permission denied
project-name/pkg/core/framework imports
    k8s.io/api/batch/v1: mkdir /go: permission denied
project-name/pkg/core/framework imports
    k8s.io/api/batch/v1beta1: mkdir /go: permission denied
project-name/pkg/core/framework imports
    k8s.io/apimachinery/pkg/util/rand: mkdir /go: permission denied
project-name/pkg/core/loader imports
    k8s.io/apimachinery/pkg/util/validation: mkdir /go: permission denied
project-name/pkg/hook imports
    k8s.io/client-go/kubernetes/scheme: mkdir /go: permission denied
project-name/pkg/hook imports
    k8s.io/client-go/tools/remotecommand: mkdir /go: permission denied
project-name/pkg/ioutil imports
    github.com/gofrs/flock: mkdir /go: permission denied
project-name/pkg/ioutil imports
    golang.org/x/sys/unix: mkdir /go: permission denied
project-name/pkg/kube imports
    github.com/ghodss/yaml: mkdir /go: permission denied
project-name/pkg/kube imports
    k8s.io/api/storage/v1: mkdir /go: permission denied
project-name/pkg/kube imports
    k8s.io/apimachinery/pkg/api/meta: mkdir /go: permission denied
project-name/pkg/kube imports
    k8s.io/apimachinery/pkg/api/resource: mkdir /go: permission denied
project-name/pkg/kube imports
    k8s.io/apimachinery/pkg/fields: mkdir /go: permission denied
project-name/pkg/kube imports
    k8s.io/apimachinery/pkg/runtime: mkdir /go: permission denied
project-name/pkg/kube imports
    k8s.io/apimachinery/pkg/types: mkdir /go: permission denied
project-name/pkg/kube imports
    k8s.io/client-go/informers: mkdir /go: permission denied
project-name/pkg/kube imports
    k8s.io/client-go/tools/cache: mkdir /go: permission denied
project-name/pkg/kube imports
    k8s.io/client-go/tools/portforward: mkdir /go: permission denied
project-name/pkg/kube imports
    k8s.io/client-go/transport/spdy: mkdir /go: permission denied
project-name/pkg/objectstore imports
    github.com/aws/aws-sdk-go/aws: mkdir /go: permission denied
project-name/pkg/objectstore imports
    github.com/aws/aws-sdk-go/aws/credentials: mkdir /go: permission denied
project-name/pkg/objectstore imports
    github.com/aws/aws-sdk-go/aws/endpoints: mkdir /go: permission denied
project-name/pkg/objectstore imports
    github.com/aws/aws-sdk-go/aws/session: mkdir /go: permission denied
project-name/pkg/objectstore imports
    github.com/aws/aws-sdk-go/service/s3: mkdir /go: permission denied
project-name/pkg/objectstore imports
    github.com/aws/aws-sdk-go/service/s3/s3manager: mkdir /go: permission denied
project-name/pkg/objectstore imports
    gocloud.dev/blob/fileblob: mkdir /go: permission denied
project-name/pkg/objectstore imports
    gocloud.dev/blob/s3blob: mkdir /go: permission denied
project-name/pkg/px imports
    github.com/libopenstorage/openstorage/api/client: mkdir /go: permission denied
project-name/pkg/px imports
    github.com/libopenstorage/openstorage/api/client/cluster: mkdir /go: permission denied
project-name/pkg/px imports
    github.com/libopenstorage/openstorage/api/client/volume: mkdir /go: permission denied
project-name/pkg/px imports
    github.com/libopenstorage/openstorage/cluster: mkdir /go: permission denied
project-name/pkg/px imports
    github.com/libopenstorage/openstorage/volume: mkdir /go: permission denied
project-name/pkg/px imports
    google.golang.org/grpc: mkdir /go: permission denied
project-name/pkg/px imports
    google.golang.org/grpc/credentials: mkdir /go: permission denied
project-name/pkg/px imports
    google.golang.org/grpc/status: mkdir /go: permission denied
project-name/pkg/quiesce imports
    github.com/deckarep/golang-set: mkdir /go: permission denied
project-name/pkg/quiesce imports
    github.com/drone/envsubst: mkdir /go: permission denied
project-name/pkg/stork imports
    github.com/libopenstorage/stork/pkg/client/clientset/versioned/typed/stork/v1alpha1: mkdir /go: permission denied
project-name/pkg/utils imports
    k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1: mkdir /go: permission denied
project-name/pkg/velero imports
    github.com/vmware-tanzu/velero/pkg/generated/clientset/versioned: mkdir /go: permission denied

I am using the Go Jenkins plugin to change the Go version.我正在使用Go Jenkins 插件来更改 Go 版本。

Here is how I am using it in a Jenkins pipeline:这是我在 Jenkins 管道中使用它的方式:

def root = tool name: 'Go 1.14', type: 'go'

withEnv(["GOROOT=${root}", "PATH+GO=${root}/bin", "GOBIN=${root}/bin"]) {
  sh 'go version'
  sh './build.sh'
}

Note: ./build.sh builds the project using modules注意: ./build.sh使用模块构建项目

What is happening, and how can I get my build to work?发生了什么,我怎样才能让我的构建工作?

The issue was that GOPATH is still defined as /go .问题是 GOPATH 仍然定义为/go The build process tries to create this directory, but Jenkins does not have access to create it.构建过程尝试创建此目录,但 Jenkins 无权创建它。

To resolve this issue, define GOPATH in your withEnv call, so the final withEnv code block would look like:要解决此问题, GOPATH在您的withEnv调用中定义GOPATH ,因此最终的withEnv代码块将如下所示:

withEnv(["GOROOT=${root}", "PATH+GO=${root}/bin", "GOBIN=${root}/bin", "GOPATH=${root}/go"]) {
  sh 'go version'
  sh './build.sh'
}

The documentation did not mention defining "GOPATH" here, so it took me a few days to discover this.文档没有提到在这里定义“GOPATH”,所以我花了几天时间才发现这一点。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM