Jenkins build an image for Docker? - jenkins

I'm a beginner with Jenkins CI integration with Docker.
My virtual machine tcp://192.168.99.100:2376
I created an image "personluz" with my SVN source code and the configuration like this image
image config
But the result is:
error
FATAL: Cannot run program "docker": error=2, No such file or directory
Could anyone have some idea? Thanks

First, the tag highlighted in the first picture is not the one for the personluz image (it is one of a dangling image)
The tag for personluz is b7782bf4cf30.
Second, a Cannot run program "docker": error=2 means that, in the context of the Jenkins slave executing the job, docker is not found in the Jenkins user $PATH. Make sure it is properly installed for that Jenkins user.

Related

Terraform not found by a jenkins pipeline

So I'm running jenkins inside a docker container with terraform installed on it.
I have a pipeline which automate the "Terraform init, plan,..." procedure. However, every time I launch a build, I get this error
"/var/jenkins_home/workspace/Terra_pipeline_main#tmp/durable-1fd048ee/script.sh:
1:
/var/jenkins_home/workspace/Terra_pipeline_main#tmp/durable-1fd048ee/script.sh:
Terraform: not found".
It seems that Terraform isn't found even though it's installed (I checked on docker container CLI if terraform is really installed with a "terraform --help" and it worked).
I can't figure out what's the problem.
enter image description here
Thank you for your help. Indeed I was getting that error due to a typo in my code. I apologize for not adding any images. (It's my first on Stack)
To solve this problem, just write "terraform" instead of "Terraform" with no capital letters. #Matt schuchard

Jenkins throws "Executable not found in $PATH"

I have installed kompose in my Jenkins machine through CLI and it is successfully installed.
I am trying to build a job which uses this "kompose" executable but it fails with "Exectable not found in the $PATH" error.
Error:
+ skaffold init --compose-file docker-compose.yaml
time="2019-11-13T10:39:00Z" level=fatal msg="running kompose: exec: \"kompose\": executable file not found in $PATH"
Please let me know if I need to make anymore changes to communicate the executable to Jenkins
On your Jenkins job has executed, you can review its environment variables (on the left side of the job execution instance page)
Check the PATH value and see if it includes where you have installed kompose.
Check also which user is actually running Jenkins: its $PATH might differ from your current local user.

Creating Docker image and running as service in Jenkins

I have a JSP website. I am building DevOps pipeline. I am looking for help to integrate Jenkins with the Docker.
I already have docker file which does task of Deploying war file to the tomcat server.
(Command1)
Through the command line I can run the docker file and create an image.
I can run created image as a service and able to browse the website.
(Command2)
I want to do these two steps in Jenkins. I need your help to integrate these two commands in Jenkins, so that I need not to run these two commands manually one after other.
I think that you can use the "Docker Pipeline Plugin" for that.
For the first command, you can have a stage that runs:
myImage = docker.build("my-image:my-tag")
If you need you can have another stage where you can run some tests inside the image with:
myImage.inside {
sh './run-test.sh'
}
Finally, you can push the image to the repository to your repository with:
docker.withRegistry('https://your-registry.com', 'credentials_id') { //use a second parameter if you repository requires authentication
myImage.push('new_tag') //You can push it with a new tag
}
Please note that if you wanna use the docker.* methods in a declarative pipeline you must do it inside a script step or in a function.
(More info in the plugin's user guide)
For the second command, you only have to update the running image in the server. For doing that you have a lot of options (docker service update if you're using Docker Swarm, for example) and I think that part is outside of the scope of this post.

Jenkins Pipeline gcloud problems in docker

I'm trying to set up jenkins pipeline according to
this article but instead use google container registry to push the docker images to.
The Problem: The part which fails me is this jenkinsfile stage block
stage ('Push Docker Image To Container Registry') {
docker.image('google/cloud-sdk:alpine').inside {
sh "echo ${env.GOOGLE_AUTH} > gcp-key.json"
sh 'gcloud auth activate-service-account --key-file ./service-account-creds.json'
}
}
The Error:
Please verify that you have permissions to write to the parent directory.)
ERROR: (gcloud.components.update) Could not create directory [/.config/gcloud]: Permission denied.
I can't run any command to do with gcloud as the error above is what i get all the time.
I tried create the "/.config" directory manually logged into the aws instance and open up the permission of the folder to everyone but that didn't help either.
I also can't find anywhere how to properly setup google cloud for jenkins pipeline using docker.
Any suggestions are greatly appreciated :)
It looks like it's trying to write data directly into your root file system directory.
The .config directory for gcloud would normally be in the following locations for username and/or root user:
/home/yourusername/.config/gcloud
/root/.config/gcloud
It looks like, for some reason, jenkins thinks the parent directory should be in /.
I would try checking where your cloud sdk config directories are on the machine you are running this on (and for the user the scripts runs as):
$ sudo find / -iname "gcloud"
And look for location similars to those printed above.
Could it be that the Cloud SDK is installed in a none standard location on the machine?

Jenkins pipeline/docker :Jenkins does not seem to be running inside a container

I'm trying to execute the sample of code found in Jenkins Pipeline here : https://jenkins.io/doc/book/pipeline/docker/
node {
/* Requires the Docker Pipeline plugin to be installed */
docker.image('maven:3-alpine').inside('-v $HOME/.m2:/root/.m2') {
stage('Build') {
sh 'mvn -B'
}
}
}
And give me this error:
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
[Pipeline] // withDockerContainer
I don't know why is it stopping like that without doing anything.
I have already install docker, docker plugin/docker pipeline on the latest version.
In configuration tool, i add the installation root path.
Did I miss something ?
Thanks in advance
This message is a normal debug message, maybe a little confusing, but not an error. As the Jenkins Pipeline code is written, during initialization it checks whether the step is already running in a container. I think the message could be written better.
If you have more problems than this message, please provide the entire log. Sounds like maybe a node cannot be assigned, or the docker client is not installed, or the docker image cannot be pulled.
The issue is a bit old but I faced a similar situation and I want to share.
I noticed that Jenkins mentions the the cause of the issue at the end of the pipeline logs.
For example in my case, the issue states:
java.io.IOException: Failed to run top '0458e2cc8b4e09c53bb89f680026fc8d035d7e608ed0b60912d9a61ebb4fea4d'. Error: Error response from daemon: Container 0458e2cc8b4e09c53bb89f680026fc8d035d7e608ed0b60912d9a61ebb4fea4d is not running
When checking the stage where this happened it's similar to the above you mentioned when using dockerImage.inside(), the reason in my case is that my Dockefile already defines an entrypoint and when using the inside feature jenkins gets confused, so to avoid this try overriding the entrypoint by passing it as a parameter to the inside function as follows:
dockerImage.inside("--entrypoint=''") {
echo "Tests passed"
}
Another good way to find the issue is to access your jenkins server ans list the docker containers with docker ps -a you may find the build container failed, check the logs then you will get a hint, in my case the logs says cat: 1: ./entrypoint.sh: not found.

Resources