[Fuego] Similar Jenkins-based framework

daniel.sangorrin at toshiba.co.jp daniel.sangorrin at toshiba.co.jp
Thu Feb 7 08:15:10 UTC 2019


Hello Rafael,

> From: Rafael Gago Castano <RGC at hms.se>
> 
> > By "the GIT repository" do you mean the Fuego core (fuego-core) repository or
> > are you talking about the fuego-ro folder where the board files are?
> 
> It was this thread:
> 
> https://lists.linuxfoundation.org/pipermail/fuego/2017-June/000717.html
> 
> I don't have the whole picture of that evaluation on my mind now, as it was
> long ago, but our conclusion was that there was no way for multiple people to
> safely develop on the server at the same time without external coordination.
> 
> If I remember correctly:
> 
> -The board code was sourced, modifications there had to be coordinated.
True, the board file is sourced. My understanding then is that you wanted to have the board file embedded in the job. But what happens then when two developers want to use the same job with slightly different board code? What do you do to avoid collisions between them? Are the "namespaces (folders)" that you mention below related to that? Are the jobs (the name that appears on the jenkins interface) named with some specific syntax (e.g.: username-testname-boardname)?

> -Running on the same board required external coordination to don't collide as
>  there was no scheduler/board allocation.
hmm the Jenkins scheduler serializes the execution of tests to the same board, so they are not supposed to collide.
I guess you mean something that happens when using Jenkins labels to schedule a job among multiple boards of the same type/label, don't you?.

> On Hottest the tests are stored on the server, but there are three features
> that allow to safely develop tests on the server for multiple people:
> 
> -Test jobs can be uploaded to own temporary folders (namespaces) to do some
>  trial work and then deleted (this should be easy for Fuego too).
> 
> -The boards are allocated dinamically, so you know for sure that when you run
>  some test for some board you don't collide with another user.
> 
> -The board code is not sourced, but dummy copied on each test.
> 
> > Thanks a lot for releasing it as open source. It looks quite clean and nicely written.
> > My only concern is further fragmentation in the Linux testing arena. It would be nice to share some parts to
> avoid redundant work.
> > https://elinux.org/Automated_Testing_Summit
> 
> You're welcome. I agree. I wouldn't have gone this way if I could. maybe I was
> wrong, but I thought that we needed some major changes and that you guys had
> already some systems deployed already working, so pushing all those changes
> would require a lot of coordination and risk of not being accepted. If Fuego at
> some point can do what we need I'd prefer to join efforts of course.

Understanding what your needs are and possible problems in Fuego is actually very useful.

> > Q: can you use it without jenkins, from the command line alone?
> 
> I guess not, at least not for now. Jenkins is used for dynamic board allocation.
> 
> If I added a trivial modification on the generation tool generate a script file
> containing all the parameter values and Jenkins variables it could work provided
> that:
> 
> -They source that file.
> -They have access to all the Jenkins variables that make possible to locate
>  required small tools.
> 
> But there is no use case for us requiring this and we'd lose the Jenkins
> scheduler.
> 
> > I guess that this is similar to the prolog.sh in Fuego, isn't it?
> 
> It's a more powerful mechanism IMO. You write the board and tests starting from
> 0. Then you can combine individual chunks (piece of code) for e.g.:
> 
> -powering "on" and "off" your relays.
> -fetch files through wget
> -Flash e.g. via tftp (not provided as of now, as we use an internal tool) and
>  boot.
> -ssh transport.
> 
> Then all that logic gets into your test. Your test gets all the Jenkins parameters
> too e.g. which relay line are you using, the url of the files to get when flashing,
> the tftp addresses, the ssh parameters, etc.
> 
> 
> E.g. take a look att chunks/util/communication/booted-ssh-board[.sh|.json],
> any test including this gets the related parameters.

Mmm this really sounds very similar to prolog.sh. I guess I would need to go into the details to understand the difference.

> The default value of those Jenkins parameters can be configured at the
> generation stage, so it isn't required to enter it any time.

Is the "generation stage" what we call the "run" stage? In other words, each test run/execution has different parameters (called dynamic variables in Fuego)?
Or is it what we call "add-job" stage, when you select the spec/parameters for your job but they are not changed on each run?

> All these inclusions the only thing they did was to add funcions att specific
> test steps/milestones, e.g. fetching calls "add_step_before_power_on", flashing
> calls "add_step_after_power_on", etc.

hmm ok, I guess the difference then is that the test.sh works like the director of an orchestra, somehow like Fuego's main.sh. In other workds, in Fuego we call main.sh which executes the test's phases (build, deploy, run, parse..). In your case, you would call test.sh directly and test.sh would decide what to do by using functions from the library. Is my understanding correct?
Sounds like an object oriented approach (Fuego) vs an function oriented approach (Hottest). If I understood that correctly, probably your approach is more flexible. In fact, it looks like LAVA tests which define all of the stages.
In Fuego, we just ask the test developers to "fill" a set of functions/hooks. I guess there is a trade-off there.

> > In Fuego you can choose and existing transport but you are also able to override the functions as well thanks
> to the overlays (ov) system.
> > ov_transport_cmd, ov_transport_get, ov_transport_put
> 
> Yeah, but aren't you choosing something that you aren't goint to use just to
> make Fuego happy and then using shell function shadowing?
I guess that happens because we use this kind of object oriented approach and function overriding.

> > Nice. Fuego also allows powering on and off the board (still a bit experimental, we want to use the pdudaemon)
> but not flashing it.
> > Apart from flashing, can it also provision (deploy the kernel and rootfs) the board using tftp and a network
> filesystem like LAVA?
> 
> Anything that can be done with shell can be done, as the design is completely
> modular it's just a matter of adding the right steps at the right place. Useful
> modules can always be made part of the core if they are generic enough.

I see, I think I understand what you mean.

> > Is this part what enables having "multiple users developing on the same server"?
> 
> No, It was having dynamic board allocation + namespacing (folders) + the board
> code duplicated into each test.
> 
> Having the include directories allows you to keep your own server definitions,
> boards and modules (e.g. for own tools that no one is interested about) on
> private repositories.
> 
> > Interesting approach. What happens when you want to update the job? Do you need to remove the previous
> results?
> 
> No, it just updates, the results stay there. You get an automatic backup from
> the tool each time you upload something too.
> 
> > Nice, I think that Jan-Simon used Jenkins labels for dynamic board scheduling in Fuego as well. But I have
> never tried it because I don't have the need.
> 
> Yeah. This is how it's done on Hottest. This is a must for ourselves, both for
> allowing multiple users without board synchronization and to be able to speed up
> the nightly testing by throwing more hardware.
> 
> > Sounds good.
> > We are planning to use a different approach. Basically it would be a fuego test calling fuego tests in order. This
> is possible because we can call tests from the command line.
> 
> If a sizeable amount of tests are scheduled at the same time point, how are
> tests made not to collide when allocating boards to run in?

Assuming that you run the testplan from jenkins using labels:
- the build/deploy phase is shared between jobs but protected by a file lock.
- there are separate log folders for each run (build id)
- Jenkins serializes the tests for a single board/node
What collisions in particular are you thinking about?

> > Default plugins: do you mean the "recommended plugins" button that appears the first time you run jenkins?
> 
> Yes.

OK, maybe you want to add that to the README ("install suggested plugins") because in the README it says "no plugins" and that was the reason for my first try to fail. Now I have a different error (see below).

> > Another posibility is to send the results to Squad using a REST API as we can do now in Fuego. Squad has a
> nicer interface than Jenkins.
> 
> What is Squad?
https://squad.readthedocs.io/en/latest/

> > PS: the error
> 
> I tried to reproduce by reinstalling from 0 by downloading a recent Jenkins war
> and everything worked.

I think this was because of not installed the "suggested plugins".
Btw, it may be a good idea to create a Dockerfile instead of documenting how to install. For example, I had to install jsonschema as a dependency and that is not written in the README.
 
> I catched some dumb bugs on the install script that are fixed though.
> 
> Are you installing as instructed on the "install" section of the main
> "README.md"? The Jenkins install filesystem requires access to some tools (e.g.
> serio).
yes.

I run the example without "dry-run"
$ scripts/cli/sync.py http://localhost:8080 $USER 118aeaa7sdf2ca9ec52060e404eb316a7bc sync -f example-cfg/sync/localsetup.json -c chunks -I example-cfg -r test

Now I can see some offline nodes and a "test" folder in jenkins (if i click there is an error).
Also i get these errors below but I suppose this was not expected to work, was it?

Thanks,
Daniel

backing up server state to folder: "hottest.bak/localsetup.json-2019-02-07_15-37-46"
backup done
node "dummyboard-4": generating
node "dummyboard-3": generating
node "dummyboard-2": generating
node "dummyboard-1": generating
node "dummyboard-4": creating
node "dummyboard-3": creating
node "dummyboard-2": creating
node "dummyboard-1": creating
job "test/jobs/dummyboard/dummy-2": generating
job "test/jobs/dummyboard/dummy-3": generating
job "test/jobs/dummyboard/dummy-1": generating
job "test/jobs/dummyboard/dummy-4": generating
job "test/jobs/dummyboard/dummy-2": added non-existent Jenkins folder: "test/jobs/dummyboard"
job "test/jobs/dummyboard/dummy-2": creating
job "test/jobs/dummyboard/dummy-3": creating
job "test/jobs/dummyboard/dummy-1": creating
job "test/jobs/dummyboard/dummy-4": creating
pipeline "test/testplans/daily-dummy": generating
WARNING: On pipeline "test/testplans/daily-dummy". Non-existant job in server or serial branch: "test/jobs/dummyboard/dummy-1". This WARNING can be ignored on a dry-run.
WARNING: On pipeline "test/testplans/daily-dummy". Non-existant job in server or serial branch: "test/jobs/dummyboard/dummy-2". This WARNING can be ignored on a dry-run.
WARNING: On pipeline "test/testplans/daily-dummy". Non-existant job in server or serial branch: "test/jobs/dummyboard/dummy-3". This WARNING can be ignored on a dry-run.
WARNING: On pipeline "test/testplans/daily-dummy". Non-existant job in server or serial branch: "test/jobs/dummyboard/dummy-4". This WARNING can be ignored on a dry-run.
Traceback (most recent call last):
  File "scripts/cli/sync.py", line 691, in <module>
    main()
  File "scripts/cli/sync.py", line 688, in main
    args.func (args)
  File "scripts/cli/sync.py", line 570, in run_sync
    args.item_whitelist)
  File "scripts/cli/sync.py", line 525, in jenkins_sync
    srv, sync, root_folder, pipeline_dirs, whitelist)
  File "scripts/cli/sync.py", line 352, in gen_and_sync_pipelines
    lambda name, jobset: pipeline_validation (name, jobset, srv, pddict))
  File "scripts/cli/sync.py", line 243, in srv_sync_jobs
    if srv_add_folder (srv, srvjobs[JENKINS_FOLDER_CLASS], dirsplit[0]):
  File "scripts/cli/sync.py", line 208, in srv_add_folder
    srv.create_job (current, gen.FolderData())
  File "scripts/cli/sync.py", line 33, in create_job
    name, job_data.get_jenkins_xml())
  File "/usr/local/lib/python2.7/dist-packages/jenkins/__init__.py", line 987, in create_job
    raise JenkinsException('job[%s] already exists' % (name))
jenkins.JenkinsException: job[test] already exists


Feb 07, 2019 3:37:46 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-4
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:46 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-4
Feb 07, 2019 3:37:46 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-4
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-3
Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-4
Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-3
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-4
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-3
Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-4
Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-3
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-4
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-2
Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-3
Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-4
Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-2
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-3
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-4
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-2
Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-3
Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-3
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-2
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-1
Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-2
Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-3
Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-1
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-2
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-3
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-1
Feb 07, 2019 3:37:47 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-2
Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-1
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:37:47 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-2
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:38:07 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-1
Feb 07, 2019 3:38:07 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-2
Feb 07, 2019 3:38:07 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-1
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more

Feb 07, 2019 3:38:07 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-2
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more




Feb 07, 2019 3:40:07 PM hudson.slaves.SlaveComputer tryReconnect
INFO: Attempting to reconnect dummyboard-1
Feb 07, 2019 3:40:07 PM hudson.slaves.CommandLauncher launch
SEVERE: Unable to launch the agent for dummyboard-1
java.io.IOException: Cannot run program "hottest/noderun.sh": error=2, No such file or directory
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at hudson.slaves.CommandLauncher.launch(CommandLauncher.java:147)
	at hudson.slaves.SlaveComputer$1.call(SlaveComputer.java:294)
	at jenkins.util.ContextResettingExecutorService$2.call(ContextResettingExecutorService.java:46)
	at jenkins.security.ImpersonatingExecutorService$2.call(ImpersonatingExecutorService.java:71)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: error=2, No such file or directory
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
	... 8 more




> 
> 
> 
> ________________________________
> 
> From: daniel.sangorrin at toshiba.co.jp <daniel.sangorrin at toshiba.co.jp>
> Sent: Wednesday, February 6, 2019 9:59:07 AM
> To: Rafael Gago Castano; fuego at lists.linuxfoundation.org
> Subject: RE: Similar Jenkins-based framework
> 
> Hello Rafael,
> 
> I tried the example in the Readme but I got an error (I put it at the end of this email).
> 
> > From: fuego-bounces at lists.linuxfoundation.org <fuego-bounces at lists.linuxfoundation.org> On Behalf Of
> > Rafael Gago Castano
> > You probably remember me. If you don't, I was on this list evaluating Fuego
> > some time ago (Spring-Summer 2017) because we had a LAVA setup that had become
> > hard to work with, but at the end we didn't switch because on Fuego the GIT
> > repository was mounted on the Jenkin's instance filesystem, this prevented
> > multiple users to develop on the same server.
> 
> By "the GIT repository" do you mean the Fuego core (fuego-core) repository or are you talking about the
> fuego-ro folder where the board files are?
> 
> > I still found Fuego superior to LAVA on a lot of aspects for our use case, so
> > taking time from here and there I developed similar Jenkins-based framework that
> > has a very similar philosophy: A very-thin wrapper that delegates the hard work
> > to Jenkins, but adds some features from LAVA like dynamic board scheduling.
> >
> > Luckily my company has allowed me to open-source it, so because this framework
> > is inspired in Fuego (some code is a direct copy) I thought that it would be a
> > good idea to share it with you here. If you think there are cool ideas/concepts
> > you have a reference implementation. If we get some criticism from experts on
> > the field it is very welcome.
> 
> Thanks a lot for releasing it as open source. It looks quite clean and nicely written.
> My only concern is further fragmentation in the Linux testing arena. It would be nice to share some parts to avoid
> redundant work.
> https://elinux.org/Automated_Testing_Summit
> 
> > https://github.com/HMSAB/hottest
> >
> > I will try to make a list of the most important features/differences:
> >
> > -Like Fuego, it has small tooling coded in Python, tests are written in shell
> >  and uses Jenkins too.
> 
> Q: can you use it without jenkins, from the command line alone?
> 
> > -Test are generated by using shell script pieces (with json metadata for
> >  Jenkins consumption) that support including (copy pasting) other pieces for
> >  building a script and accumulating all the Jenkins metadata (e.g. each of these
> >  pieces can define parameters for Jenkins).
> 
> I guess that this is similar to the prolog.sh in Fuego, isn't it?
> 
> > -There is an API containing a few board functions that the user has to provide
> >  (dut_cmd, dut_get, dut_put), so board functions are abstracted and tests are
> >  shareable. All the transports on Fuego are(were) part of the core, on hottest
> >  they are a "module", so the user can implement them or select one of the
> >  transports available.
> 
> In Fuego you can choose and existing transport but you are also able to override the functions as well thanks to
> the overlays (ov) system.
> ov_transport_cmd, ov_transport_get, ov_transport_put
> 
> > -There are predefined milestones on the test sequence. The test writer can add
> >  functions before or after each of the milestones dinamically, e.g. you can call
> >  "add_step_before_power_on" and pass a function that crosscompiles a small
> >  executable and then call "add_step_before_test" and pass a function that copies
> >  the executable to the device, then use the executable inside a test.
> >
> > -Allows powering on and off the boards and flashing.
> 
> Nice. Fuego also allows powering on and off the board (still a bit experimental, we want to use the pdudaemon)
> but not flashing it.
> Apart from flashing, can it also provision (deploy the kernel and rootfs) the board using tftp and a network
> filesystem like LAVA?
> 
> > -The generator supports include directories, so the board, powering, lab setup
> >  and firmware flashing implementation can be left on separate user-private
> >  repositories while still using shared tests.
> 
> Is this part what enables having "multiple users developing on the same server"?
> 
> > -All the jobs(tests) are self-contained, they embed the board code into the job.
> >  This avoids having to mount git repositories on the server's filesystem at the
> >  expense of code duplication on Jenkins (handled by the tool, HDD is cheap). It
> >  allows tests from older versions to coexist unmodified on the same server too.
> 
> Interesting approach. What happens when you want to update the job? Do you need to remove the previous
> results?
> 
> > -It adds a mapping between boards and Jenkins nodes, so you can have some tests
> >  written for a specific board and some boards connected to the server. When you
> >  schedule a lot of tests for the same board Jenkins spreads the workload between
> >  all idle boards. This uses Jenkins labels under the hood.
> 
> Nice, I think that Jan-Simon used Jenkins labels for dynamic board scheduling in Fuego as well. But I have never
> tried it because I don't have the need.
> 
> > -The testplans are implemented as Groovy pipelines that schedule a series of tests
> >  in parallel. These pipelines can have some tests serially executed in a well defined
> >  order, useful for cases where e.g. there is only one hardware resource/dongle on
> >  the test PC that many tests use.
> 
> Sounds good.
> We are planning to use a different approach. Basically it would be a fuego test calling fuego tests in order. This
> is possible because we can call tests from the command line.
> 
> > -For now, it has no extra Jenkins dependencies, so it works with a bare modern
> >  Jenkins install with default plugins.
> 
> Default plugins: do you mean the "recommended plugins" button that appears the first time you run jenkins?
> 
> > -Reporting is in a minimum-viable state now, it just generates a Junit report
> >  and builds a trivial gnuplot graph as a Jenkins artifact.
> 
> Another posibility is to send the results to Squad using a REST API as we can do now in Fuego. Squad has a nicer
> interface than Jenkins.
> 
> Thanks,
> Daniel
> 
> PS: the error
> 
> host$ scripts/cli/sync.py http://localhost:8090 $USER 1187d61ba0sd7864656758c64827211a2e  sync -f
> example-cfg/sync/localsetup.json -c chunks -I example-cfg -r test
> backing up server state to folder: "hottest.bak/localsetup.json-2019-02-06_17-15-48"
> backup done
> node "dummyboard-4": generating
> node "dummyboard-3": generating
> node "dummyboard-2": generating
> node "dummyboard-1": generating
> node "dummyboard-4": creating
> Traceback (most recent call last):
>   File "scripts/cli/sync.py", line 691, in <module>
>     main()
>   File "scripts/cli/sync.py", line 688, in main
>     args.func (args)
>   File "scripts/cli/sync.py", line 570, in run_sync
>     args.item_whitelist)
>   File "scripts/cli/sync.py", line 519, in jenkins_sync
>     gen_and_sync_nodes (srv, sync, chunk_dirs, param_dirs, whitelist)
>   File "scripts/cli/sync.py", line 417, in gen_and_sync_nodes
>     srv_sync_nodes (srv, syncnodes, whitelist)
>   File "scripts/cli/sync.py", line 384, in srv_sync_nodes
>     launcher_params = { "command": gen.JENKINS_NODE_CMD }
>   File "scripts/cli/sync.py", line 21, in create_node
>     super (JenkinsWrapper, self).create_node(*args, **kwargs)
>   File "/usr/local/lib/python2.7/dist-packages/jenkins/__init__.py", line 1305, in create_node
>     self._build_url(CREATE_NODE, params), b''))
>   File "/usr/local/lib/python2.7/dist-packages/jenkins/__init__.py", line 448, in jenkins_open
>     e.code, e.msg)
> jenkins.JenkinsException: Error in request. Possibly authentication failed [500]: Server Error
> 
> 
> Server
> =====
> 
> Feb 06, 2019 5:15:49 PM org.eclipse.jetty.server.handler.ContextHandler$Context log
> WARNING: Error while serving http://localhost:8090/computer/doCreateItem
> <http://localhost:8090/computer/doCreateItem>
> java.lang.reflect.InvocationTargetException
>         at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:400)
>         at org.kohsuke.stapler.Function$InstanceFunction.invoke(Function.java:408)
>         at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:77)
>         at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)
>         at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:212)
>         at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:145)
>         at org.kohsuke.stapler.MetaClass$11.doDispatch(MetaClass.java:537)
>         at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
>         at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:739)
>         at org.kohsuke.stapler.Stapler.invoke(Stapler.java:870)
>         at org.kohsuke.stapler.MetaClass$2.doDispatch(MetaClass.java:221)
>         at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
>         at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:739)
>         at org.kohsuke.stapler.Stapler.invoke(Stapler.java:870)
>         at org.kohsuke.stapler.Stapler.invoke(Stapler.java:668)
>         at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
>         at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:865)
>         at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1655)
>         at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154)
>         at jenkins.telemetry.impl.UserLanguages$AcceptLanguageFilter.doFilter(UserLanguages.java:128)
>         at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:151)
>         at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157)
>         at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
>         at jenkins.security.ApiCrumbExclusion.process(ApiCrumbExclusion.java:48)
>         at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:73)
>         at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
>         at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:84)
>         at hudson.security.UnwrapSecurityExceptionFilter.doFilter(UnwrapSecurityExceptionFilter.java:51)
>         at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
>         at jenkins.security.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:117)
>         at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
>         at
> org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:1
> 25)
>         at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
>         at
> org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:14
> 2)
>         at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
>         at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
>         at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
>         at jenkins.security.BasicHeaderProcessor.success(BasicHeaderProcessor.java:140)
>         at jenkins.security.BasicHeaderProcessor.doFilter(BasicHeaderProcessor.java:82)
>         at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
>         at
> org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:
> 249)
>         at
> hudson.security.HttpSessionContextIntegrationFilter2.doFilter(HttpSessionContextIntegrationFilter2.java:67)
>         at hudson.security.ChainedServletFilter$1.doFilter(ChainedServletFilter.java:87)
>         at hudson.security.ChainedServletFilter.doFilter(ChainedServletFilter.java:90)
>         at hudson.security.HudsonFilter.doFilter(HudsonFilter.java:171)
>         at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
>         at org.kohsuke.stapler.compression.CompressionFilter.doFilter(CompressionFilter.java:49)
>         at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
>         at hudson.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:82)
>         at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
>         at org.kohsuke.stapler.DiagnosticThreadNameFilter.doFilter(DiagnosticThreadNameFilter.java:30)
>         at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
>         at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
>         at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
>         at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:524)
>         at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
>         at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
>         at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
>         at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
>         at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1340)
>         at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
>         at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
>         at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
>         at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
>         at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1242)
>         at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
>         at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
>         at org.eclipse.jetty.server.Server.handle(Server.java:503)
>         at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:364)
>         at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
>         at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
>         at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
>         at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
>         at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
>         at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
>         at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
>         at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
>         at
> org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
>         at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
>         at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
>         at java.lang.Thread.run(Thread.java:748)
> Caused by: java.lang.Error: Failed to instantiate class hudson.slaves.DumbSlave from
> {"launcher":{"stapler-class":"hudson.slaves.CommandLauncher","command":"hottest/noderun.sh"},"numExe
> cutors":2,"nodeProperties":{"stapler-class-bag":"true"},"name":"dummyboard-4","retentionStrategy":{"stapl
> er-class":"hudson.slaves.RetentionStrategy$Always"},"remoteFS":"/tmp/nodecreate","type":"hudson.slaves.D
> umbSlave$DescriptorImpl","nodeDescription":null,"labelString":null,"mode":"EXCLUSIVE"}
>         at hudson.model.Descriptor.newInstance(Descriptor.java:605)
>         at hudson.model.ComputerSet.doDoCreateItem(ComputerSet.java:300)
>         at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
>         at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:396)
>         ... 81 more
> Caused by: java.lang.IllegalArgumentException: Failed to instantiate class hudson.slaves.DumbSlave from
> {"launcher":{"stapler-class":"hudson.slaves.CommandLauncher","command":"hottest/noderun.sh"},"numExe
> cutors":2,"nodeProperties":{"stapler-class-bag":"true"},"name":"dummyboard-4","retentionStrategy":{"stapl
> er-class":"hudson.slaves.RetentionStrategy$Always"},"remoteFS":"/tmp/nodecreate","type":"hudson.slaves.D
> umbSlave$DescriptorImpl","nodeDescription":null,"labelString":null,"mode":"EXCLUSIVE"}
>         at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:681)
>         at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
>         at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:474)
>         at hudson.model.Descriptor.newInstance(Descriptor.java:597)
>         ... 84 more
> Caused by: java.lang.IllegalArgumentException: Failed to convert the launcher parameter of the constructor
> public hudson.slaves.DumbSlave(java.lang.String,java.lang.String,hudson.slaves.ComputerLauncher) throws
> hudson.model.Descriptor$FormException,java.io.IOException
>         at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:780)
>         at org.kohsuke.stapler.RequestImpl.access$200(RequestImpl.java:83)
>         at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:678)
>         ... 87 more
> Caused by: java.lang.IllegalArgumentException: Failed to instantiate class hudson.slaves.ComputerLauncher
> from {"stapler-class":"hudson.slaves.CommandLauncher","command":"hottest/noderun.sh"}
>         at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:681)
>         at org.kohsuke.stapler.RequestImpl.bindJSON(RequestImpl.java:478)
>         at org.kohsuke.stapler.RequestImpl.instantiate(RequestImpl.java:778)
>         ... 89 more
> Caused by: java.lang.IllegalArgumentException: Class hudson.slaves.CommandLauncher is specified in JSON,
> but no such class found in classLoader hudson.PluginManager$UberClassLoader
>         at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:674)
>         ... 91 more
> Caused by: java.lang.ClassNotFoundException: hudson.slaves.CommandLauncher
>         at hudson.PluginManager$UberClassLoader.findClass(PluginManager.java:1915)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
>         at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
>         at org.kohsuke.stapler.RequestImpl$TypePair.convertJSON(RequestImpl.java:669)
>         ... 91 more
> 



More information about the Fuego mailing list