Daniel Oliveira created BEAM-12001:
--------------------------------------
Summary: Get ValidatesRunner test framework working on Jenkins
Key: BEAM-12001
URL: https://issues.apache.org/jira/browse/BEAM-12001
Project: Beam
Issue Type: Sub-task
Components: sdk-go
Reporter: Daniel Oliveira
Assignee: Daniel Oliveira
_This is an ex-post-facto bug documenting work that should have had it's own
JIRA but didn't. The purpose of this bug is to add a more detailed summary of
work that is already finished._
This work was to be able to run the new ValidatesRunner test script on Jenkins.
Normally that would have been very simple (make a jenkins task and just run
it), but ended up being a challenge because of a small change from the old
script: The new one calls `go test` instead of running an already compiled go
binary, meaning it tries to build the code from the go workspace, which doesn't
contain the vendored code that gogradle has, which means the tests fail to
build. Worse, there was no precedent for using the go workspace directly on
jenkins in the Go SDK yet.
The first major task was figuring out what approach to take to fix this: I
tried finding out if I could substitute a gogradle command for the existing one
(this didn't work. Gogradle has no existing mechanism for adding the flags I
needed, and making a custom gogradle task wasn't possible for the tests).
Trying to create a custom gradle task for this outside of the gogradle plugin
also didn't work, as it lost all the vendoring that gogradle was handling. The
final solution was to see what Jenkins had built-in for Go. Jenkins has its own
Go support, but that support also does not include vendoring as far as I could
tell. The solution that was most likely to work, then, was to work around the
error by creating a temporary GOPATH and copying the Go SDK being tested into
it so the tests could still compile with all the appropriate vendored code.
The second major task then was to actually write the code that would do this.
This involved figuring out the internal structure of Jenkins and what code is
kept between tests, shared between workers, etc. so that each time we run the
tests it's done hermetically. After the research was done, the script needed to
be debugged, and this was a very slow exhausting process, as it involved
running the postcommit and then waiting about 10 minutes each time for
everything to spin up and to eventually get to the error. Ultimately this
approach worked and is what the final PR implements.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)