- CI
- CD
- IAC
- Docker
- Jira
- Git
- Nexus
- Maven
- Sonarqube
- Jenkins
- Setting up Jira using Docker
- Setting up Nexus Using Docker
- Setting up Sonarqube Using Docker
- Setting up Jenkins using Docker
- Setting up build pipeline
- Setting up jacoco in Jenkins
- Setting up Deployment process in Jenkins
- Setting up Chef,Knife
Continuous Integration (CI) is the process of automating the build and testing of code every time a team member commits changes to version control.
CI encourages developers to share their code and unit tests by merging their changes into a shared version control repository after every small task completion.
Committing code triggers an automated build system to grab the latest code from the shared repository and to build, test, and validate the full master branch
Continuous Delivery (CD) is the process to build, test, configure and deploy from a build to a production environment.
Multiple testing or staging environments create a Release Pipeline to automate the creation of infrastructure and deployment of a new.
Successive environments support progressively longer-running activities of integration, load, and user acceptance testing.
Continuous Integration starts the CD process and the pipeline stages each successive environment the next upon successful completion of tests.
Infrastructure as Code (IaC) is the management of infrastructure (networks, virtual machines, load balancers, and connection topology) in a descriptive model, using the same versioning as DevOps team uses for source code.
Like the principle that the same source code generates the same binary, an IaC model generates the same environment every time it is applied.
IaC is a key DevOps practice and is used in conjunction with continuous delivery.
. Two containerized processes can run side-by-side on the same computer, but they can’t interfere with each other.
. They can’t access each other’s data unless explicitly configured to do so.
. Two different applications can run containers on the same hardware with confidence that their processes and data are secure.
. Shared hardware means less hardware.
. Gone are the days when a company needs thousands of servers to run applications.
. That hardware can be shared between different business units or entirely different enterprise clients.
. The result is massive new economies of scale for private and public centers alike.
. The Docker command-line interface (CLI)
. The Docker Engine
. Faster scaling of systems
. Better software delivery
. Flexibility
. Software-defined networking
. The rise of microservices architecture
I did installed docker on Centos 7
yum update
Install the latest version of Docker CE and containerd, or go to the next step to install a specific version:
sudo yum install docker-ce docker-ce-cli containerd.io
yum list docker-ce --showduplicates | sort -r
Install a specific version by its fully qualified package name,
which is the package name (docker-ce) plus the version string (2nd column) starting at the first colon (:), up to the first hyphen, separated by a hyphen (-).
For example, docker-ce-18.09.1.
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker
Install from a package:
If you cannot use Docker’s repository to install Docker, you can download the .rpm file for your release and install it manually.
You need to download a new file each time you want to upgrade Docker CE.
Go to https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ and download the .rpm file for the Docker version you want to install.
Install Docker CE, changing the path below to the path where you downloaded the Docker package.
sudo yum install /path/to/package.rpm
sudo systemctl start docker
sudo systemctl status docker
sudo systemctl enable docker
Always examine scripts downloaded from the internet before running them locally.
curl -fsSL https://get.docker.com -o get-docker.sh\
sudo sh get-docker.sh
If you would like to use Docker as a non-root user, you should now consider adding your user to the “docker” group with something like:
sudo usermod -aG docker your-user
This is the dominant cloud platform in the IT space but it could not be suitable for each and every project.
Still, for IaaS services, Amazon will continue dominating the market for many years to come. One of the biggest reasons for the
popularity of AWS is the massive scope of operations.
AWS has a massive array of services available so far and it is taken as the biggest network of data centers too.
As per the Gartner report, AWS has the deepest capabilities of governing a large number of users and resources together.
The biggest problem with AWS is its pricing.
However, the Company is lowering down its costs continuously still it is difficult for enterprises understanding its cost structure and managing costs when running a large volume of services.
These cons are quickly outweighed by a perfect range of benefits and Companies of all sizes are using AWS for a variety of workloads.
Microsoft entered the cloud market little late but it took a jump start with its effective range of services and cloud benefits.
The major reason for the popularity of the Azure platform is that many Companies deploy Windows software today.
It can be quickly integrated with other applications and actually makes sense for large organizations.
It is taken as the more loyal platform for Microsoft users.
Also, if you are an existing Microsoft user then you may get attractive discounts on Azure cloud services.
According to Gartner, Azure is not that much perfect as it should be.
The customers are facing problems with documentation, technical support, training materials etc.
Additionally, it does not provide the suitable support to DevOps approaches because of selected automation features and much of management work is completed by the staff itself.
Google is also a strong candidate in the cloud race since it started the Kubernetes in comparison to the AWS and the Azure.
Some of the major offerings of Google Cloud Platform includes machine learning, big data analytics and more.
The other highlights are perfect load balancing, or considerable scaling etc.
GCP has an excellent response time and he knows data centers well.
Google is ranked third in the IT marketplace because it does not provide as many services as AWS or Azure. Soo, it will expand as needed.
According to Gartner, GCP is not a strategic partner but it is taken as the secondary partner only.
If your business competes with Amazon then you can freely choose GCP in that case. This is open source platform that is highly DevOps centric and well-aligned to Microsoft Azure.
Install docker on my linux instance
Reference link : https://www.atlassian.com/software/jira
JIRA is an Incident Management Tool used for Project Management, Bug Tracking, Issue Tracking and Workflow. JIRA is based on the following three concepts – Project, Issue and Workflow.
JIRA is used in Bugs, Issues and Change Request Tracking.
JIRA can be used in Help desk, Support and Customer Services to create tickets and track the resolution and status of the created tickets.
JIRA is useful in Project Management, Task Tracking and Requirement Management.
JIRA is very useful in Workflow and Process management.
docker pull cptactionhank/atlassian-jira ( pulling image from docker hub )
[root@dockerdemo ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE cptactionhank/atlassian-jira latest 4c56f19283ae 4 days ago 507MB
docker run --detach --publish 8080:8081 cptactionhank/atlassian-jira:latest ( running the image)
Go to GCP firewall rules and specify tcp - 8081
http//:35.237.64.4:8081
Jira Core
Server ID - BGIX-SJ2L-FSB3-MZA5
Li35.237.64.4
email - [email protected] username - manishalankala1 Password - Welcome@1234
Url: http://35.237.64.4:8081/secure/WelcomeToJIRA.jspa
Name : AIR Key : AIR Project management
Create two tasks
Go to manage apps in jira
Click on free
Pop up on new Evaluation license & click on generate license Apply license
we can see Your trial is expiring on 30/Jun/19. Buy a license for this app.
Reference link: https://git-scm.com/
Git
. Simultaneous development
. Faster releases
. Built-in integration
. Strong community support
. Git works with your team
. Pull requests
. Branch policies
Go to applications tab on in administration
click on Git repositories tab and click on connect to git repository
Go to git hub and change your pom.xml file and scroll below
https://github.com/manishalankala/helloworld-java-maven/blob/master/pom.xml
Commit changes fix for AIR-1(which is key of the task created )
open the task in dashboard you can see on the tab git commits(reindexing takes a bit moment)
Go to Git repositories tab in application in administration click on actions and reindex(if you find reindexing is slow this for manual process)
Reference link : https://www.sonarqube.org/
SonarQube is an automatic code review tool to detect bugs, vulnerabilities and code smells in your code.
It can integrate with your existing workflow to enable continuous code inspection across your project branches and pull requests.
SonarQube is NOT (only) a static code analyzer :
It’s not a replacement for FindBugs or CPPCheck or any other similar tool.
On the contrary, not only it offers its own static code analysis mechanism that detects coding rules violations but at the same time it’s integrated with external tools like the ones I mentioned.
The result is that you can get, homogenized, in a single report all issues detected by a variety of static and dynamic analysis tools.
SonarQube is NOT a code coverage tool :
Clearly NOT. Again it’s integrated with the most popular test coverage tools like JaCoCo, Cobertura, PHPUnit etc. but it doesn’t compute code coverage itself.
It reads pre-generated unit test report files and displays them in an extremely convenient dasboard.
SonarQube is NOT a code formatter.
It’s not allowed to modify your code in any way. However you can get formatting suggestions by enabling the CheckStyle, CPPCheck, ScalaStyle rules you want to follow.
SonarQube is NOT a continuous integration system to run your nightly builds :
You can integrate it with the most popular CI Engines to apply Continuous Inspection but it’s not their replacement.
SonarQube is NOT just another manual code review tool. Indeed SonarQube offers a very powerful mechanism that facilitates code reviews but this is not a standalone features.
It’s tight to the issues detection mechanism so every code review can be easily associated to the exact part of the problematic code and the developer that caused it.
sonar src code -
sonar runner or scanner - 2.6.1
docker pull sonarqube
docker run -d --name sonarqube -p 8082:9000 sonarqube
#(docker run -d --name sonarqube -p 9000:9000 sonarqube -p 9092:9092 sonarqube)#
Login sonarqube
username - admin password - admin
https://github.com/manishalankala/java-sonar-runner-simple
took src folder copied to my ops folder remaining files deleted
go to cmd
L:\ops\sonarsrc
then
L:\ops\sonar-scanner-cli-3.3.0.1492-windows\sonar-scanner-3.3.0.1492-windows\bin\sonar-scanner.bat
Its need to tell the scanner to know its path in conf folder (sonar-scanner-properties)
L:\ops\sonarsrc contains (sonar-project.properties)
"Nexus is a repository manager. It allows you to proxy, collect, and manage your dependencies so that you are not constantly juggling a collection of JARs.
It makes it easy to distribute your software.
Internally, you configure your build to publish artifacts to Nexus and they then become available to other developers.
Will get the benefits of having your own 'central', and there is no easier way to collaborate."
"what is Nexus?" for the Non-programmer
think of it as a library. You can ask it for "artifacts", it will store and retrieve them and assign a standard coordinate system to the artifacts it stores.
If you are developing software, having this facility available allows you to catalog and store your own artifacts using the same "numbering" system that the library uses.
When a group develops a new system or a library, they submit it to the repository manager.
Other groups then have a standard way to access these libraries. This standard for cataloging and addressing files brings efficiency.
Source control systems, issue trackers, mailing lists, continuous integration servers, wikis, integrated development environment, and repository managers.
Maven leverages the concept of a repository by retrieving the artifacts necessary to build an application and deploying the result of the build process into a repository.
Maven uses the concept of structured repositories so components can be retrieved to support the build.
These components or dependencies include libraries, frameworks, containers, etc.
Maven can identify components in repositories, understand their dependencies, retrieve all that are needed for a successful build, and deploy its output back to repositories when the build is complete.
Maven is a "build management tool", it is for defining how your .java files get compiled to .class, packaged into .jar (or .war or .ear) files, (pre/post)processed with tools, managing your CLASSPATH, and all others sorts of tasks that are required to build your project. It is similar to Apache Ant or Gradle or Makefiles in C/C++, but it attempts to be completely self-contained in it that you shouldn't need any additional tools or scripts by incorporating other common tasks like downloading & installing necessary libraries etc.
It is also designed around the "build portability" theme, so that you don't get issues as having the same code with the same buildscript working on one computer but not on another one (this is a known issue, we have VMs of Windows 98 machines since we couldn't get some of our Delphi applications compiling anywhere else).
Because of this, it is also the best way to work on a project between people who use different IDEs since IDE-generated Ant scripts are hard to import into other IDEs, but all IDEs nowadays understand and support Maven (IntelliJ, Eclipse, and NetBeans). Even if you don't end up liking Maven, it ends up being the point of reference for all other modern builds tools.
. Maven will (after you declare which ones you are using) download all the libraries that you use and the libraries that they use for you automatically. This is very nice, and makes dealing with lots of libraries ridiculously easy. This lets you avoid "dependency hell". It is similar to Apache Ant's Ivy.
. It uses "Convention over Configuration" so that by default you don't need to define the tasks you want to do. You don't need to write a "compile", "test", "package", or "clean" step like you would have to do in Ant or a Makefile. Just put the files in the places in which Maven expects them and it should work off of the bat.
. Maven also has lots of nice plug-ins that you can install that will handle many routine tasks from generating Java classes from an XSD schema using JAXB to measuring test coverage with Cobertura. Just add them to your pom.xml and they will integrate with everything else you want to do.
docker pull sonatype/nexus
docker run -d -p 8083:8081 --name nexus sonatype/nexus:oss
http://35.237.64.4:8083/nexus/
Credentials admin / admin123
pom.xml settings.xml
provide the url in pom.xml after the creating the repository in nexus
java install on jdk-8u92-linux-x64.tar.gz
mv jdk1.8.0_92 jdk1.8
export JAVA_HOME="/opt/jdk1.8 export PATH=$JAVA_HOME/bin:$PATH
Two things we need to change pom.xml and settings.xml
Created two repositories Release and snapshot in nexus and add in pom.xml after download from https://github.com/manishalankala/helloworld-java-maven
http://35.237.64.4:8083/nexus/content/repositories/airsnapshot/ http://35.237.64.4:8083/nexus/content/repositories/apache-snapshots/
In settings.xml under C:\Tools\apache-maven-3.6.1\conf
deployment admin admin123changing the Id to deploymentRepo from sym in pom.xml
deployment release softx http://35.237.64.4:8083/nexus/content/repositories/airrelease/ deployment snapshot softx http://35.237.64.4:8083/nexus/content/repositories/airsnapshot/Go to secruity tab and click on users and right click on deployment --- set password = repopwd repopwd
go to cmd and go to the specified path (L:\ops\tonexus) and type mvn deploy
mvn release:clean release:prepare
Error :Missing required setting: scm connection or developerConnection must be specified.
Go to secruity tab and click on users and right click on deployment --- set password = repopwd repopwd
L:\ops\tonexus>mvn deploy -X
After mvn deploy -X in Windows cmd
Below the execution results
L:\ops\tonexus>mvn deploy -X Apache Maven 3.6.1 (d66c9c0b3152b2e69ee9bac180bb8fcc8e6af555; 2019-04-04T21:00:29+02:00) Maven home: C:\Tools\apache-maven-3.6.1\bin.. Java version: 1.8.0_212, vendor: AdoptOpenJDK, runtime: C:\Program Files\AdoptOpenJDK\jdk-8.0.212.03-hotspot\jre . . . . [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ [INFO] Total time: 13.810 s [INFO] Finished at: 2019-06-03T16:47:50+02:00 [INFO] ------------------------------------------------------------------------
Reference link : https://jenkins.io/
Jenkins is a powerful application that allows continuous integration and continuous delivery of projects, regardless of the platform you are working on.
It is a free source that can handle any kind of build or continuous integration.
You can integrate Jenkins with a number of testing and deployment technologies
docker pull jenkins/jenkins
docker run -d -p 8084:8080 --name jenkins jenkins/jenkins
but default jenkins port is 8080 downloaded for windows https://jenkins.io/download/ if password not working go to C:\Program Files (x86)\Jenkins\conf.xml under sercuity make it as false but before we need to stop jenkins after making changes we need to start jenkins
Go to Manage Jenkins ------> Plugin Manager
Go to jenkins ---> global tool configuration and add SonarQube servers
commands to get public and private keys
ssh-keygen -t rsa
copy the public key in github
Go to git hub ---settings ----- ssh and gpg keys
then copy the private key in sonarqube build project where you give credentials
Now i try to buildjob for sonarqube
sonar qube integration can be done by mavaen,Gradle install sonarqube scanner sonarqube is for static code analysis
Create new job in jenkins naming as sonarqube
Go to new item ----> Free style project -----> name it sonarqube
global configuration before running job download plugins sonar and sonar scanner
Now go to configure in the build job
under the build configuration --->
source code management ------> give Repository URL :[email protected]:manishalankala/helloworld-java-maven.git and Credentials :
in source code management click on git icon and give credentials
If you are adding it newly then add the private key
Then go to dashboard and click buildnow and check console output
Another build job
Go to global configuration in jenkins ,select maven and save the version
then build new job
name : build
Tyepe : free style project
then run buildnow
if you run build you get following error
[build] $ mvn compile
FATAL: command execution failed
Then follow below
Jenkins ----> Global tool configuration -----> Maven installations Name: Maven Install automatically\
On build tab ------> invoke top level maven targets ------> maven targets ------> Maven Version: maven Goals : compile
Creating one more build
Name: Unit testing
Type: free style project
goals is mentioned wrong!!!
Then run build now
Check in console output for the success result
Creating one more build
Name: package
Type: multi configuration
run build now
Check in console output for the success result
Creating one more build
Name: DeploytoNexus Type: free style project
Deployment process
sonarqube ---> build ----> unit testing ----> Package -----> DeploytoNexus
Now to do deployment process
go to sonarqube build job and click on configure tab ---> post build actions
go to build job and click on configure tab ---> post build actions
go to Unit Testing build job and click on configure tab ---> post build actions
go to package build job and click on configure tab ---> post build actions
install pipeline plugin
https://wiki.jenkins.io/display/JENKINS/Pipeline+Plugin
we find the + icon then add name sonarbuildphase
(Diffrent ) docker pull jenkins/jenkins
#####Before ###### docker run --name test_jenkins -d -p 80:8080 -p 50000:50000 -v /var/lib/jenkins_docker:/var/jenkins_home jenkins
####After####### docker run --name jm1 -d -p 80:8080 -p 50000:50000 -v /var/lib/docker/volumes/jm1_vol:/var/jenkins_home jenkinsci/blueocean:latest
########Grafana####################### docker run -d --name=grafana -p 3000:3000 grafana/grafana
default it uses syslite database if we want to change we need to chnage grafana.ini file if its not in in the same server mention external
##########Graphite######################
docker pull hopsoft/graphite-statsd
*exposing and running graphite & statsd
docker run -d --name graphite --restart=always-p 81:81 -p 8125:8125/udp hopsoft/graphite-statsd
to change smapling frequency and utention period ,go to docker container ---> docker exec -it graphite bash and look for below file
storage-schemas.conf
vi storage-schemas.conf
for every new configuration for example [shoehub] pattern = shoehub. retentions = 20s:5h
Note: #sonarqube container exited #docker start container id #docker ps -f "status=exited"
Here i used
dockerdemo ---- Master server
jmslave --- node
Create an origanization name
You can download the starter kit
knife command is found when we install the chefdk
Chef server
knife configuration
cookbooks
nodes
wget https://packages.chef.io/files/stable/chefdk/4.0.60/el/7/chefdk-4.0.60-1.el7.x86_64.rpm (Installed on worker machine)
curl -O https://packages.chef.io/files/stable/chefdk/4.0.60/el/7/chefdk-4.0.60-1.el7.x86_64.rpm
yum install chefdk-4.0.60-1.el7.x86_64.rpm
cd
mkdir chef-repo (Created repo)
[root@dockerdemo ~]# ls chefdk-4.0.60-1.el7.x86_64.rpm chef-repo
mkdir cookbooks
mkdir .chef (Created repo)
ssh-keygen -t rsa
place the public key in .chef
it looks for the .chef directory default
[alma252@jmslave1 ~]$ cd ~/.ssh [alma252@jmslave1 .ssh]$ ls known_hosts
vi authorized_keys
copy the public key and save it else can't able to ssh
ssh -i .chef/jmslave [email protected] ( ssh to node )
knife bootstrap 35.211.155.102 --ssh-user alma252 -i .chef/jmslave --sudo --node-name gce-jmslave -VV -y
For Reference here https://linuxacademy.com/community/posts/show/topic/22511-bootstrap-a-node-using-ssh-publicprivate-key-asking-sudo-pwd
https://linuxacademy.com/community/posts/show/topic/22511-bootstrap-a-node-using-ssh-publicprivate-key-asking-sudo-pwd https://docs.chef.io/chef_client_overview.html http://blog.asquareb.com/blog/2014/06/09/basic-chef-knife-commands/ https://linoxide.com/linux-how-to/chef-workstation-server-node-centos-7/ https://www.itzgeek.com/how-tos/linux/centos-how-tos/setup-chef-12-centos-7-rhel-7.html https://blog.andreev.it/?p=3522 https://docs.chef.io/knife_node.html https://docs.chef.io/knife_bootstrap.html https://serverfault.com/questions/653543/chef-ssh-without-password
https://api.chef.io/organizations/eurodrone/cookbooks
[root@dockerdemo .chef]# knife client list /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:31: warning: already initialized constant Chef::Knife::Bootstrap::SUPPORTED_CONNECTION_ PROTOCOLS /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:31: warning: previous definition of SUPPORTED_CONNECTION_PROTOCOLS was here /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:32: warning: already initialized constant Chef::Knife::Bootstrap::WINRM_AUTH_PROTOCOL_L IST /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:32: warning: previous definition of WINRM_AUTH_PROTOCOL_LIST was here /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:350: warning: already initialized constant Chef::Knife::Bootstrap::DEPRECATED_FLAGS /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:350: warning: previous definition of DEPRECATED_FLAGS was here eurodrone-validator gce-jmslave
[root@dockerdemo .chef]# knife node list /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:31: warning: already initialized constant Chef::Knife::Bootstrap::SUPPORTED_CONNECTION_ PROTOCOLS /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:31: warning: previous definition of SUPPORTED_CONNECTION_PROTOCOLS was here /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:32: warning: already initialized constant Chef::Knife::Bootstrap::WINRM_AUTH_PROTOCOL_L IST /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:32: warning: previous definition of WINRM_AUTH_PROTOCOL_LIST was here /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:350: warning: already initialized constant Chef::Knife::Bootstrap::DEPRECATED_FLAGS /opt/chefdk/embedded/lib/ruby/gems/2.6.0/gems/chef-15.0.300/lib/chef/knife/bootstrap.rb:350: warning: previous definition of DEPRECATED_FLAGS was here gce-jmslave
[root@dockerdemo .chef]# cat knife.rb
see http://docs.chef.io/config_rb_knife.html for more information on knife configuration options current_dir = File.dirname(FILE) log_level :info log_location STDOUT node_name "manishalankala" client_key "#{current_dir}/manishalankala.pem" chef_server_url "https://api.chef.io/organizations/eurodrone" cookbook_path ["#{current_dir}/../cookbooks"]
knife cookbook site download learn_chef_httpd
tar -xvf learn_chef_httpd-0.2.0.tar.gz
rm -rf learn_chef_httpd-0.2.0.tar.gz
chef generate template httpd_deploy index.html
knife cookbook upload learn_chef_httpd -VV
it didn't worked
chef generate cookbook httpd_deploy [root@dockerdemo chef-repo]# cd cookbooks/ [root@dockerdemo cookbooks]# ls httpd_deploy learn_chef_httpd
knife node run_list add gce-jmslave "recipe[httpd_deploy]"
Errors:
knife ssh 'gce-jmslave' 'sudo chef-client' alma252 --sudo .chef/jmslave -VV
knife ssh 'gce-jmslave' 'sudo chef-client' --ssh-user alma252 -i /root/chef-repo/.chef/jmslave -VV (./chef/jmslave has public key)
Resolution at here is
knife ssh "name:gce-jmslave" "sudo chef-client" -x alma252 -i .chef/jmslave
Observation :
to confirm on node machine
in other screnario we can do this by jenkins
jenkins ---> New Item -----> Free style project ------> name i gave is Deploytochefnodes -----> configure
Then click on build now will get the errors
because
its under root permissions we need to change to chown -r jenkins:jenkins /chef-repo
then try giving build now still we face issue the last step would be mv chef-repo/ /opt/ will fix this
i didn't try this scenario in jenkins
so from chef-repo directory
git init git add -A . git -m commit "chef" git push https://github.com/manishalankala/Google-Cloud-Platform.git
else push to a new repository in git
the git url can be specified
Reference : https://www.jacoco.org/jacoco/trunk/index.html