Closed MHBauer closed 5 years ago
This all sounds reasonable to me, thanks for all the info!
I think the next step is probably configuring those things and then looking at what sorts of tests (unit, build, e2e?) you would want to migrate to Prow, if any.
/area prow /assign /cc @cjwagner
also, for a complete catalog of plugins and their usage see:
you may want to enable more of these in general for various labeling / automation tasks
@BenTheElder does it make sense to turn tide on without configuring it? I don't want it to accidentally start merging things that aren't ready by our selection.
right now to do a build we rely on docker existing.
Then it's a make build
or some such.
Does this infra support a clone+make type operation? Or do we have to package the repo up into a ready to run image before it's possible to run the build & tests?
@MHBauer:
make build
, probably the best forward thinking way is with a job using the pod utilitiesdocker build
are fine, we have images that support thisI will look at pod utilities. Thank you. Probably not the time to enable tide yet.
We use docker build
two ways. A 'buildimage' for development and compiling of the output binaries, and also for release images.
stream of consciousness while reading...
It looks like I want to write an entry for presubmits in config.yaml https://github.com/kubernetes/test-infra/blob/master/prow/config.yaml#L408 .
I see https://github.com/kubernetes/test-infra/tree/master/prow#how-to-add-new-jobs afterwards.
I think I need a new prowjob. Reading more, I'm not sure if I want a presubmit, postsubmit, periodic, or batch. What is the context of "submit" in presubmit/postsubmit? What's being submitted where?
So as not to waste resources, maybe we can start with a clone job that does not do anything after the clone, or prints out some env-vars? This seems like it would be a good entry point for people starting in the future.
@MHBauer submit
might not be the best term, in this context submit == PR merge. presubmit -> testing PRs before they merge, post-submit -> testing triggered by merges, periodic == just runs on a schedule, used for EG, monitoring that the master branch is healthy with tests that are a bit prohibitive to be presubmits.
So as not to waste resources, maybe we can start with a clone job that does not do anything after the clone, or prints out some env-vars? This seems like it would be a good entry point for people starting in the future.
That sounds doubly excellent. @cjwagner we should put this in the docs. I plan to flesh out the docs around jobs some more once @krzyzacy finishes sorting out support for many job files (so you can just configure your jobs in your file instead of one 16k config...)
Cloning is provided by the pod utilities so your job container doesn't need to do any cloning. You could have a container that just echos some env, but I don't think that would really be all that helpful for future use.
@BenTheElder What exactly should we add to the docs? Are you suggesting adding an echo example? I have some simple examples already here: https://github.com/kubernetes/test-infra/blob/master/prow/pod-utilities.md#how-to-configure I suppose an echo example could be even clearer.
Yeah an echo env (maybe also ls?) would be a pretty harmless example. We should also eventually add more directly useful ones like "use the go image and go test".
On Tue, Jun 19, 2018, 09:14 Cole Wagner notifications@github.com wrote:
Cloning is provided by the pod utilities so your job container doesn't need to do any cloning. You could have a container that just echos some env, but I don't think that would really be all that helpful for future use.
@BenTheElder https://github.com/BenTheElder What exactly should we add to the docs? Are you suggesting adding an echo example? I have some simple examples already here: https://github.com/kubernetes/test-infra/blob/master/prow/pod-utilities.md#how-to-configure I suppose an echo example could be even clearer.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/kubernetes/test-infra/issues/8291#issuecomment-398457409, or mute the thread https://github.com/notifications/unsubscribe-auth/AA4Bq_-Z-up1yLfxM_yHERKiQWDAragvks5t-SNmgaJpZM4UfIkj .
@cjwagner https://github.com/kubernetes/test-infra/issues/8291#issuecomment-398457409
What is my job container
?
Looking at that referenced config, I see image: gcr.io/test-images/bug-finder
Where does that come from? The top of the doc references the utilities as init-containers or sidecars, but I don't see that spec configuration in an example. Are they invisibly added?
@BenTheElder https://github.com/kubernetes/test-infra/issues/8291#issuecomment-398465145 As an example those would be nice. At the current moment, I do not have any idea what I get for free vs what I need to do.
Thanks for the definitions, we should start a test/dev glossary.
Not in any rush yet to start creating a job, so we can wait if necessary for the split support. I do not know what I would put into a job definition right now.
Prow runs jobs as kubernetes pods. The specification for a job includes a pod spec with a single container that runs the test. This is the job container
that I am referring to, but test container
is probably a more appropriate name.
The bug-finder
image doesn't actually exist. That is just an example test container image name.
You don't see specs for the pod utility containers because they are transparently added when plank
creates the pod. Configuration for the pod-utility behavior is exposed through other fields in the job config. The pod utilities are explained here: https://github.com/kubernetes/test-infra/blob/master/prow/pod-utilities.md#pod-utilities This section details the available config fields that you may need or want: https://github.com/kubernetes/test-infra/blob/master/prow/pod-utilities.md#how-to-configure
At the current moment, I do not have any idea what I get for free vs what I need to do.
This section describes exactly that: https://github.com/kubernetes/test-infra/blob/master/prow/pod-utilities.md#what-the-test-container-can-expect If something is missing please let me know and I'll add it.
What is the test container? I am providing an image to run? I do not have one.
Yes, the test container is the main thing that you'll need to provide. It is what actually runs your tests. You may be able to directly use the DinD image that @BenTheElder mentioned or you may need to use that image as a base for your own custom image if you have additional dependencies that are not vendored in the repo.
Okay, all of the reading of this documentation has not been very clear about what I provide and how I provide it. Given that it's got a container/pod-spec, I can make assumptions, but it is much better to be very explicit.
Some statements I now think are true facts:
What is the name of the docker-in-docker image? Are we talking about the standard dind image? Is there a common repo of all test images?
We have some common images in the images/ directory, the bootstrap
image
supports docker in docker amongst other things. We haven't migrated most
jobs to the podutils just yet so it includes some other stuff in the
entrypoint..
We'll need to create new images for use with the podutils specifically soon.
On Tue, Jun 19, 2018 at 2:20 PM Morgan Bauer notifications@github.com wrote:
Okay, all of the reading of this documentation has not been very clear about what I provide and how I provide it. Given that it's got a container/pod-spec, I can make assumptions, but it is much better to be very explicit.
Some statements I now think are true facts:
- I give prow a image, prow runs my image in a pod.
- All the standard pod rules apply, but prow mounts some extra stuff, invisibly to me.
- My image is run as test-container
- the working directory of test-container is the git clone directory by default
What is the name of the docker-in-docker image? Are we talking about the standard dind image? Is there a common repo of all test images?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/kubernetes/test-infra/issues/8291#issuecomment-398550033, or mute the thread https://github.com/notifications/unsubscribe-auth/AA4Bqwojdm9XB3D_JZF6hFS8z__Gnc4bks5t-WsngaJpZM4UfIkj .
I give prow a image, prow runs my image in a pod I give my image to prow by making a prowjob My image is run as test-container
You give Prow an entire Kubernetes PodSpec as part of the job specification. Kubernetes Pods aren't Prow specific so we don't go into detail about how to write them. The only Prow specific rule is that you can only specify one container in the pod (this does need to be better documented).
These docs may also be helpful @MHBauer: https://github.com/kubernetes/test-infra/tree/master/prow#how-to-add-new-jobs
When pod-utilities.md says In addition to normal ProwJob configuration...
this is the normal configuration that it is referring to. That should be linked from pod-utilities.md and could be rephrased now that we intend for this to be the normal way to configure jobs.
All the standard pod rules apply, but prow mounts some extra stuff, invisibly to me. the working directory of test-container is the git clone directory by convention (due to some of those invisible things) prowjobs are defined in config.yaml (for now, to be split up in the future)
These points are already covered in these two documents. If there is something unclear about how they are written I can try and improve the wording. The organization of the main prow README and linking between documents is something I've been meaning to improve.
Actually in addition, the idea is that you create a PodSpec with one container, which must specify the command / entrypoint, and that command should exit 0 on success and anything else on failure.
The podutils stuff adds the sidecar/init containers to the podspec at runtime (prior to scheduling the pod) to handle git checkout, log upload, artifact upload, etc.
I think we could make it clearer that the spec
field is a podspec, and
the requirements on number of containers etc... The pod utilites are still
new. Most old jobs are using the horribly hacky jenkins/bootstrap.py script
for logging etc. still as we are transitioning.
On Tue, Jun 19, 2018 at 4:14 PM Cole Wagner notifications@github.com wrote:
I give prow a image, prow runs my image in a pod I give my image to prow by making a prowjob My image is run as test-container
You give Prow an entire Kubernetes PodSpec as part of the job specification. Kubernetes Pods aren't Prow specific so we don't go into detail about how to write them. The only Prow specific rule is that you can only specify one container in the pod (this does need to be better documented).
These docs may also be helpful @MHBauer https://github.com/MHBauer: https://github.com/kubernetes/test-infra/tree/master/prow#how-to-add-new-jobs When pod-utilities.md https://github.com/kubernetes/test-infra/blob/master/prow/pod-utilities.md says In addition to normal ProwJob configuration... this is the normal configuration that it is referring to. That should be linked from pod-utilities.md and could be rephrased now that we intend for this to be the normal way to configure jobs.
All the standard pod rules apply, but prow mounts some extra stuff, invisibly to me. the working directory of test-container is the git clone directory by convention (due to some of those invisible things) prowjobs are defined in config.yaml (for now, to be split up in the future)
These points are already covered in these two documents. If there is something unclear about how they are written I can try and improve the wording. The organization of the main prow README and linking between documents is something I've been meaning to improve.
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/kubernetes/test-infra/issues/8291#issuecomment-398574624, or mute the thread https://github.com/notifications/unsubscribe-auth/AA4BqzocswrzjxJQvSzgCXJW2xYamd-Nks5t-YW9gaJpZM4UfIkj .
There seems to be a lot of confusion here. @cjwagner @BenTheElder do we feel like we have a high-level document that describes how Prow runs k8s-native tests using plank
? I wasn't expecting there to be uncertainty in that area but perhaps the different available execution backends (Jenkins, k8s simple, k8s decorated) are not laid out anywhere?
Yes, we definitely need more docs regarding that.
On Wed, Jun 20, 2018 at 7:22 AM Steve Kuznetsov notifications@github.com wrote:
There seems to be a lot of confusion here. @cjwagner https://github.com/cjwagner @BenTheElder https://github.com/BenTheElder do we feel like we have a high-level document that describes how Prow runs k8s-native tests using plank? I wasn't expecting there to be uncertainty in that area but perhaps the different available execution backends (Jenkins, k8s simple, k8s decorated) are not laid out anywhere?
— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/kubernetes/test-infra/issues/8291#issuecomment-398767702, or mute the thread https://github.com/notifications/unsubscribe-auth/AA4Bq6p8Asca7uWKXeRxBQGkmwURvai4ks5t-lq0gaJpZM4UfIkj .
I think part of this is "How do I know I want a prowjob at all? Why is it called a job? What even is a job?"
The organization of the main prow README and linking between documents is something I've been meaning to improve.
I think maybe I'm confused by the organization. I seem to end up jumping around a lot. A short tutorial with:
I'm psuedo writing this up as a big checklist myself, but still learning how things are expected to be. I'll read through those two docs again.
you create a PodSpec with one container, which must specify the command / entrypoint, and that command should exit 0 on success and anything else on failure
^ this is very clear and direct statement.
do we feel like we have a high-level document that describes how Prow runs k8s-native tests using plank?
I think the closest thing that we have is the "Life of a ProwJob" document: https://github.com/kubernetes/test-infra/blob/master/prow/architecture.md Its isn't a high level overview of the things that are important for users to know though, its more of a technical overview of how ProwJobs are triggered. It also isn't discoverable.
so the first prowjob is setup, but we need to enable the trigger
plugin to enable triggering presubmit jobs from pull requests. making a PR to do this now...
Added some more questions and discussion topics for the future in the OP. No need to answer, just want to have my thoughts writen down.
/cc @jeremyrickard @nikhita as other interested parties
Recommendation today was configuring tide is our immediate next step.
the result is thus #8710
we're going smoothy. prow/tide/whoever is running nicely. :fire:
Whoo! 🎉
@MHBauer if everything is still running smoothly, can we close this out?
/close I'm going to close this out, please /reopen if there's anything missing
@spiffxp: Closing this issue.
Goals
Current State
manual merges of PRsunit-test & integration-testWants
Use the OWNERS file with APPROVERS and REVIEWERSAmbiguous
first do's
/cc @BenTheElder This is probably missing key info you would like to see, so let me know what else is helpful.
Second Round of Questions from July 2018 - W1
how much load are we allocated?
what are the pod restrictions?
what size are the nodes?
do we need /ok-to-test ? Auto /ok-to-test for people belonging to repo/owners file?
is it better to do a bunch of steps in
can we kick off a chain of jobs? Should we?
test-apiserver.sh questions
e2e tests
final image generation
cross buildability testing
needs rebase
Parallel Tracks of work:
LGTM1
+LGTM2
+/approve
AND NOT/hold
? Then adapt it after the fact? #8710My attempt at an overall document