Pass binary from Jenkins host to agent

Viewed 161

Can you pass a binary from a Jenkins host to an agent?

I've got Jenkins running in Kubernetes, and the terraform plugin installed on my Jenkins master with the binary located at /var/jenkins_home/tools/org.jenkinsci.plugins.terraform.TerraformInstallation/terraform/terraform

I would like to pass this to my Jenkins agent by configuring my pod template and mounting the host volume path /var/jenkins_home/tools/org.jenkinsci.plugins.terraform.TerraformInstallation/terraform/terraform to the agent's path /usr/bin/terraform

But this doesn't seem to work as expected

When I exec into the agent and run a terraform version I get the error bash: terraform: command not found indicating that it doesn't have the binary.

I can see a terraform directory mounted in /usr/bin but without the binary. What I expect is for terraform to be installed on the agent. But my thinking might be incorrect here.

Is it possible to do this, has anyone has any experience with this?

2 Answers

As a @David Maze mentioned binary from Jenkins needs to be manually installed on every node, which can be a difficult to manage. However you can set Jenkins to run pipeline steps inside a container where the image contains the tools you need, which simplifies such case.

Read more: execution-env-jenkins.

One alternative is to use the slaves setup plugin. We use it to install and configure internal tools (and end) on nodes bases on labels. A log less hassle than @Malgorata's (and our previous) manually copy approach

Not sure how well it works with Kubernetes as not in our configuration.

Related