I have a Jenkins pipeline, its output is an ISO file (linux). After getting the file I have to prepare a new VM guest in Virtualbox then attaching the ISO file to that VM and wait till the installation is done to ensure the ISO file does not have any problem which is a quite long process and a time consuming as well, so I am trying to automate this process if possible.
I found virtualBox plugin for Jenkins but it is very old and it is just managing a server (not spinning up a VM from ISO).
As a proof of concept I tried to start VM from the VirtualBox's command line (VirtualBoxManage) but I am getting below error message :
VBoxManage: error: Unattended installation is not supported for guest type 'Linux_64'
I tried Qemu as well but Unfortunately, I am not able to install KVM as all the servers/PCs do not support virtualization !
Any suggestion would be highly appreciated .. Thanks in advance.
Notes:
Jenkin is running in kubernetes but I have no issue to make it runs as a standalone directly in the host.
I am using Jenkins to generate a Linux ISO because I am customizing the basic ISO by adding some RPMs and modifying kickstart file.
Packer by HashiCorp can be used for this job.
I am also create a customize Linux distribution ISO. To achieve this, I have a Jenkins Pipeline with this steps:
Build a linux distribution ISO.
Build and export as OVF a virtual machine on VMware Vsphere using Packer.
Related
I'm currently trying to install an oracle server (11g) in a linux container on ubuntu (following this tutorial (http://www2.hawaii.edu/~lipyeow/ics321/2014fall/installoracle11g.html).
When I try to change the file handler with sysctl, the modifications doesn't save into my container. Moreover, when I make the modification in the main ubuntu kernel, it propagates to the containers, so my question is as follow:
How can I modify the file handlers only in my oracle container ?
Thanks.
Try out the Orabuntu-LXC project code. It supports Ubuntu 16.04, 17.04, 17.10 and is purpose-built for running Any Oracle on Any Linux, including Ubuntu Linux. Note that as you probably already know, Oracle Corp does not formally support or certify Oracle on Ubuntu Linux.
As far as you question about the file handlers, some sysctl values can only be set at the LXC host level, and some can be set in the container.
https://sites.google.com/site/nandydandyoracle/oracle-rac-in-lxc-linux-containers/oracle-lxc-vlc#TOC-Install-the-etc-sysctl.conf-File-Required-for-Oracle
https://github.com/gstanden/orabuntu-lxc
https://sites.google.com/site/nandydandyoracle/
Please note that the step-by-step guides are quite old and that the basic LXC infrastructure together with OpenvSwitch, an LXC-containerized DNS/DHCP, and an optional SCST Linux SAN can all be installed on Ubuntu 16.04, 17.04 and 17.10 with one command:
./anylinux-services.sh
after completion of which all you would need do is download your Oracle database installtion media and install.
I'm able to run the ARM images (eg. hypriot/rpi-node) in Docker on Windows (64bit), but in all linux x86/64 machines I've tried (Debian, CoreOS, Alpine etc) I get the following error - which makes sense to me but I dont get why it'd run in Docker on Windows then, and I wonder whether I'm missing some opportunity to use an x86 machine as a build server for ARM images (ie. the in google/aws cloud/azure). Any ideas how I might be able to?
docker run -ti hypriot/rpi-node ls
standard_init_linux.go:175: exec user process caused "exec format error"
Docker for windows (and docker for mac) both use a linux vm to host containers. However, the difference between the linux vm they use and your linux machines is the fact that their VM has a kernel system called binfmt_misc setup to call qemu whenever it encounters a binary for a foreign architecture (https://github.com/linuxkit/linuxkit/blob/1c552f7a9db7f0660d3c83362d241e54142323ca/pkg/binfmt/etc/binfmt.d/00_linuxkit.conf )
If you were to configure your linux machine appropriately, it could be used as a build server for ARM images. Google qemu-user-static for some ideas of how to set it up.
Note that the linuxkit vm uses the 'F' flag which doesn't seem to be standard when configuring a typical linux environment. Without it, you need to put the qemu binary inside the container. I'm not sure why it isn't standard practice to use 'F' in more places (there does seem to be a debian bug to do so https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=868030 )
On Windows and Mac docker works under Linux VM. So, I think, that for your container under Windows started ARM Linux VM. But under native Linux used native architecture.
The "exec format error" confirms that you are not running your docker image on the correct architecture.
I had this error trying to run a x86 docker image on a Raspberry Pi 2 (Which works with an ARM architecture). I am pretty sure it might be the same error when you do it the other way round.
So, as Kulti said, Windows/MAC must have started an ARM Linux VM.
If you wish to work with ARM docker images on Linux, you may want to try running a linux docker VM manually. I think you can do it using "docker-machine" even on linux : Docker documentation for docker-machine. (Haven't done it myself so I am not sure)
Hope this helps.
Docker on Windows uses a Linux VM which has been configured such that it can run images of other architectures through Qemu user mode emulation. You can configure native linux in a similar way and it too will then run ARM images. There is a well written three part series that describes it all in detail
Main thing to take away from Part#1 is that any file on Linux is executed through an interpreter (even binary files). The choice of interpreter is configurable, through binfmt_misc, based on byte patterns at the beginning of file or filename extension etc.
Part#2 builds on Part#1 to show how to configure Linux kernel (installed on any architecture) to interpret ARM binaries using Qemu User Emulation.
Finally Part#3 shows how to apply the same trick this time to a linux setup in a docker container which means that linux docker container (which could be for any architecture) will be able to execute ARM binaries.
Important thing to note here is that there is nothing special about docker implementation or containerization that allows docker on Windows to be able to execute ARM binaries. Instead any Linux setup (whether on bare metal or in a container) can be configured to execute ARM binaries through Qemu's user mode emulation of an ARM cpu.
I know this post is old but I will post my solution here in case someone came here through Google.
This happen because your Docker host is not able to run images with AMR architecture. To be enable this in your Docker just run:
docker run --rm --privileged hypriot/qemu-register
More info you can find on this post.
You need the kernel configured for qemu's binfmt_misc module, and the container needs to have the static binaries used by qemu available inside the container filesystem.
You can load the files on the host with the hyperiot/qemu-register image, however I prefer the distribution vendor packages when available (ensures that I get patches when I update). For Debian, the imporant packages is qemu-user-static which you can install as root with:
apt-get update && apt-get install qemu-user-static
Ensure the kernel module is loaded (as root):
modprobe binfmt_misc
Then when running the container, you can mount the static qemu binaries into your container rather than packaging them inside your image, e.g. for the arm arch:
docker run -it --rm \
-v /usr/bin/qemu-arm-static:/usr/bin/qemu-arm-static:ro \
hypriot/rpi-node /bin/sh
Docker includes binfmt_misc in the embedded Linux VM's used on Docker for Desktop, and there appears to be some additional functionality to avoid the need to manually mount the static qemu files inside the container.
I want to automate deployment of my project from Jenkins on a Linux server to a Windows server. As I have read, there are some tools to scp from linux to windows. Is there a tool that I can use to push the build from linux using a script?
One solution should be to install a Jenkins slave agent on the Windows machine.
With this solution, you can create a dedicated job and launch it on the Windows node.
This job can get the artefact (or the build result) from the Linux server with the Copy Artifact plugin.
I am using Selenium Webdriver(v 2.47.1) automation tool in windows operating system. I have created one automation script using Eclipse IDE and integrated script with Jenkins CI. In Jenkins I created new job with help of windows batch file. Jenkins job successfully completed.
I have uploaded same set of code(contains src, lib, bin directories..) to Linux server where Jenkins CI is installed and tried to create new work using Jenkins. In Linux OS I have used shell command to build the project. Project not builded successfully..
I don't know where the actual problem is..? Please help me on this
There is few things which can effects scripts in Linux environment
1st is batch file you are using
refer it to resolve it if exist in your case
http://stackoverflow.com/questions/32120102/bash-file-is-running-fine-in-windows-for-testng-but-it-is-not-working-in-linux-m
Another one is if your using chrome then you need to set chrome binary according to linux
http://chromedriver.storage.googleapis.com/index.html?path=2.16/
Hope it will help you :)
If still you are facing problem then please share the error your get on terminal/Jenkins jobs section
I have an issue about Jenkins.I used a freestyle project not a maven project because it's a nodeJS project.
The Workflow is as below :
Jenkins trigger from GitLab Acceptation Merge Event.
Jenkins execute the build for testing integration.
execute shell command (linux) in actual linux OS.
Jenkins deploy the project after test success to a remote Windows Machine.
So what i want is how to deploy to a remote windows machine
Jenkins and Git are in the same machine (linux).
and deployment in a remote machine Windows.
You can plan to use a deployment automation solution like Xebialabs XL Deploy/IBM udeploy/CA Nolio as they are specialised products that will take care of a lot of the use cases related to deployment out of box and you do not have to create a scripted solution in Jenkins.
you can use gitDeploy framework, that always does the job
AFAIK, you can not deploy to a windows remote machine only using Jenkins. There is a Jenkins plugin https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+CIFS+Plugin which might be worth looking, but I doubt if it will solve all the requirements. As it is for copying files to WINS share.
I would suggest you to have a look at Ansible (http://docs.ansible.com/ansible/intro_windows.html), you can install the ansible controller on the Linux along with Git & Jenkins and configure jenkins to trigger the ansible deploy on to the target windows machine.