Jenkinsfile
とdocker.image().inside
を使用して、最初のGoプロジェクトをビルドしてデプロイするためにJenkinsパイプラインを設定しようとしています。私はvendor/
ディレクトリの依存関係を拾う方法を理解できません。Dockerを使ってJenkinsのベンダーディレクトリに移動する
私はビルドを実行すると、私はエラーの束を得る:
+ goapp test ./... src/dao/demo_dao.go:8:2: cannot find package "github.com/dgrijalva/jwt-go" in any of: /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
...なぜそれがベンダーのディレクトリを拾っていませんか?私はいくつかのログを投げるとき
、sh "cd /workspace/src/bitbucket.org/nalbion/go-demo"
を実行した後、次のsh
コマンドは、元の${WORKSPACE}
ディレクトリにまだあるようです。私はJenkinsファイルのアイディアが本当に好きですが、それについてはまともな文書が見つかりません。
は(編集 - まともなドキュメントhereがあるが、私のドッカーファイルが似ているdocker.image().inside)
内で動作するようにdir("/workspace/src/bitbucket.org/nalbion/go-demo") {}
いないようです:
FROM golang:1.6.2 # Google's App Engine Go SDK RUN 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 ENV PATH /usr/lib/go_appengine:/go/bin:/usr/local/go/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin ENV GOPATH /usr/lib/go_appengine/gopath # Add Jenkins user RUN groupadd -g 132 jenkins && useradd -d "/var/jenkins_home" -u 122 -g 132 -m -s /bin/bash jenkins
そして、私のJenkinsfile:
node('docker') { currentBuild.result = "SUCCESS" try { stage 'Checkout' checkout scm stage 'Build and Test' env.WORKSPACE = pwd() docker.image('nalbion/go-web-build:latest').inside( "-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 "goapp test ./..." } stage 'Deploy to DEV' docker.image('nalbion/go-web-build').inside { sh "goapp deploy --application go-demo --version v${v} app.yaml" } timeout(time:5, unit:'DAYS') { input message:'Approve deployment?', submitter: 'qa' } stage 'Deploy to PROD' docker.image('nalbion/go-web-build').inside { sh "goapp deploy --application go-demo --version v${v} app.yaml" } } catch (err) { currentBuild.result = "FAILURE" // send notifications throw err } }