使用Docker与Jenkins上的“vendor”目录构buildGo应用程序

我试图build立一个Jenkinspipe道来构build和部署我的第一个Go项目,使用Jenkinsfiledocker.image().inside 。 我无法弄清楚如何去获取vendor/目录中的依赖关系。

当我运行构build时,我得到了一堆错误:

 + goapptesting。/ ...
 src / dao / demo_dao.go:8:2:无法在以下任何位置find软件包“github.com/dgrijalva/jwt-go”:
     /usr/lib/go_appengine/goroot/src/github.com/dgrijalva/jwt-go(from $ GOROOT)
     /usr/lib/go_appengine/gopath/src/github.com/dgrijalva/jwt-go(from $ GOPATH)
     /workspace/src/github.com/dgrijalva/jwt-go

…为什么不拿起Vendor目录?

当我抛出一些日志logging时,似乎在运行sh "cd /workspace/src/bitbucket.org/nalbion/go-demo" ,下一个sh命令仍然在原来的${WORKSPACE}目录中。 我真的很喜欢jenkins文件的想法,但我找不到任何像样的文件。

(编辑 – 这里有不错的文档,但是dir("/workspace/src/bitbucket.org/nalbion/go-demo") {}docker.image().inside)

我的Docker文件类似于:

 FROM golang:1.6.2
 #Google的App Engine Go SDK
运行wget https://storage.googleapis.com/appengine-sdks/featured/go_appengine_sdk_linux_amd64-1.9.40.zip -q -O go_appengine_sdk.zip && \
     unzip -q go_appengine_sdk.zip -d / usr / lib / && \
     rm go_appengine_sdk.zip
 / usr / local / sbin:/ usr / local / sbin:/ usr / sbin:/ usr / bin / sbin:/ usr / /箱
 ENV GOPATH / usr / lib / go_appengine / gopath
 #添加Jenkins用户
 RUN groupadd -g 132 jenkins && useradd -d“/ var / jenkins_home”-u 122 -g 132 -m -s / bin / bash jenkins

和我的Jenkinsfile:

节点('docker'){
     currentBuild.result =“SUCCESS”

    尝试{
        阶段“结帐”
        结帐scm

        阶段“构build和testing”
         env.WORKSPACE = pwd()
         docker.image( 'nalbion /去-networkingbuild设:最新的')。里面(
                 “-v $ {env.WORKSPACE}:/ workspace / src / bitbucket.org / nalbion / go-demo”+
                 “-e GOPATH = / usr / lib / go_appengine / gopath:/ workspace”){

             //debugging
             sh'echo GOPATH:$ GOPATH'
             sh“ls -al /workspace/src/bitbucket.org/nalbion/go-demo”
             sh“cd /workspace/src/bitbucket.org/nalbion/go-demo”
             sh“pwd”

             sh“go vet ./src / ...”
             sh“goapptesting。”
         }

        阶段'部署到DEV'
         docker.image('nalbion / go-web-build')。inside {
             sh“goapp deploy --application go-demo --version v $ {v} app.yaml”
         }

        超时(时间:5,单位:'DAYS'){
            input消息:“批准部署?”,提交者:“qa”
         }

        阶段“部署到PROD”
         docker.image('nalbion / go-web-build')。inside {
             sh“goapp deploy --application go-demo --version v $ {v} app.yaml”
         }
     catch(err){
         currentBuild.result =“FAILURE”
         //发送通知
        扔错误
     }
 }

我设法通过在相同的sh语句中包含cd来实现它的工作:

 docker.image( 'nalbion /去-networkingbuild设:最新的')
       .inside(“ -  v $ {env.WORKSPACE}:/ workspace / src / bitbucket.org / nalbion / go-demo”+
               “-e GOPATH = / usr / lib / go_appengine / gopath:/ workspace”){
    sh“”“
        cd /workspace/src/bitbucket.org/nalbion/go-demo
       去兽医./src / ...
        goapptesting。/ ...
       “””
 }