使用Docker与Jenkins上的“vendor”目录构buildGo应用程序
我试图build立一个Jenkinspipe道来构build和部署我的第一个Go项目,使用Jenkinsfile
和docker.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。/ ... “”” }