79

I have a job called "development" and another project called "code analysis". At the moment we have two different jobs and different workspaces, but same code; is there any way we could use the same workspace for multiple jobs?
I checked the plugins available in Jenkins but I haven't found any suitable one.

dr_
  • 2,400
  • 1
  • 25
  • 39
Scg
  • 989
  • 1
  • 7
  • 14
  • 3
    you can use a custom workspace http://stackoverflow.com/questions/20537137/custom-workspace-in-jenkins – KeepCalmAndCarryOn Feb 03 '14 at 07:05
  • 4
    If you do use the same workspace, you will want to make sure you don't have concurrency and that you can properly track revisions between the two. A concurrency could happen if you are in the process of analyzing code when the development job starts checking code out. There are plugins (and answers) on how to prevent the issues on this site. (Full disclosure: We tried a common workspace and decided it worked better for us to use the clone workspace plugin with separate workspaces.) – jwernerny Feb 03 '14 at 13:15
  • 1
    To do this concurrency easily, trigger the analysis job from the development job, and check the Advanced Project Option "Block build when upstream project is building" on the analysis job. – Paul Hicks Feb 03 '14 at 23:04

4 Answers4

89

Suppose your "development" Jenkins job workspace is /var/workspace/job1. In the "code analysis" job configuration page, under the tab General click on Advanced... and select the option Use custom workspace and give the same workspace /var/workspace/job1 as of your "development" job.

VLL
  • 9,634
  • 1
  • 29
  • 54
Dipu H
  • 2,372
  • 15
  • 24
  • 25
    This is a decent path... but I'd take it once step closer and use the https://wiki.jenkins-ci.org/display/JENKINS/inheritance-plugin to inherite ${WORKSPACE} so it doesn't have to be hardcoded in all the jobs - it will be cleaner to maintain. – thekbb Feb 03 '14 at 16:33
  • 5
    @thekbb, that would be an option, except for the Stack Overflow that occurs when used in conjunction with JobConfigHistory plugin. Until the maintainer corrects that issue, it's useless to anyone that needs the JobConfigHistory plugin for jobs that *don't* use inheritance... – Jon L. Oct 07 '14 at 13:57
  • The workspace directories differ between master (job//workspace) and slave nodes (workspace/. So the hardcode involves a script as well as the plugin. – rickfoosusa Jul 08 '15 at 18:43
  • It would appear that the stackoverflow is still an issue according to https://wiki.jenkins-ci.org/display/JENKINS/inheritance-plugin – Rob Kielty Mar 22 '16 at 12:13
  • 1
    FYI that in Jenkins version 2.147 to set custom workspace go to `General` tab of your project, than click `Advanced...` button and you will see "Use custom workspace" check box. – Lyserty Mar 11 '19 at 20:57
8

if you were not able to find Use custom workspace you can located it under your project configure>General>Advanced>Use custom workspace

Terefe
  • 199
  • 2
  • 5
6

There is a Jenkins Plugins which enables you to create a shared workplace a setup them on every job which need the files from that given repository.

Use Case:

Similar to what you need, first create two jobs from the same Git Repository, then go to "Manage Jenkins" and you create a Shared Workspace. And point to it, on every job you need to read from that files.

Jenkins Plugin

https://wiki.jenkins-ci.org/display/JENKINS/Shared+workspace+plugin#


PS: You should look into "Known Issues" could be a deal breaker for your needs.

sometimes, on fresh copied job, shared-space url parameter not saving to config on first "save", you should save job twice to be sure.

^^ This one it's still unresolved, I tried and still happens. After some several saves (just to be sure) the job runs perfectly.

Paulo Oliveira
  • 2,411
  • 1
  • 31
  • 47
2

I tried the inheritance plugin and whoa! that thing is a sledgehammer when all I have is a tiny nail.

I ended up adding a Post-build Action of "Trigger parameterized build on other projects" with "Build on the same node" and a "Predefined parameter". The downstream job needs to have a parameter of the same name defined (WORKSPACE_PARENT) but you can leave it blank. You then define the downstream job with a custom workspace (under General > Advanced)

I chose a post-build action because the actual success of the build job is independent on the results of the downstream build (for now). If you want to bump the results of the downstream job up to the parent job, you need to add it as a build task, not a post-build action.

It works great for what I need.

Parent's post-build task: Parent's post-build task

Child's custom workspace: Child's custom workspace

harperville
  • 6,921
  • 8
  • 28
  • 36
  • Simple, elegant solution! Note for others: This solution requires you to install the Parameterized Trigger plugin https://plugins.jenkins.io/parameterized-trigger/ – Perspectivus Nov 25 '21 at 17:51