virtualBox+centos7+jenkins+ansible部署项目

前言

ansible+jenkins可以轻松实现持续集成,写文章的之前本人利用三台虚拟机搭建成功,主要记录关键步骤和坑,记性不如烂笔头。

一、环境准备

1.virtualBox的下载和安装

这个没什么坑的,我的电脑是win10系统,现在对应的virtualBox即可,为什么选择virtualBox,开源免费且轻量化。

2.centos镜像文件的下载和安装

这里注意一下下载centos镜像文件的min版本就可以,无需界面化等其他软件。

关于网络的设置,本人踩得坑还挺多

a.使用桥接模式,此模式更加接近真实环境,而且可以上网,也可以宿主机交互

b.界面名称选择图中的,不要选择真实的无限网卡或有线网卡,亲身经历,当你的宿主机网络发生变化时,有可能连不上网,而且也很难设置固定的ip,没有固定的ip不方便以后的调试。

virtualBox+centos7+jenkins+ansible部署项目_第1张图片

c.win10如何添加虚拟网卡环回适配器,百度Microsoft loopback Adapter的安装即可,win10中没有Microsoft loopback Adapter,而是环回适配器,名称不一样注意一下。

d.如何使用这个配置这个环回适配器实现虚拟机可以上网,在真实的网卡属性里面有共享设置共享的网络,配置环回适配器,固定ip,后面设置虚拟机的固定ip会用到

virtualBox+centos7+jenkins+ansible部署项目_第2张图片

e.虚拟机的网络设置

ifconfig在最小安装没有该命令,使用 ip addr即可,

vi /etc/sysconfig/network-script/ifcfg-xxxx   这里贴一下关键配置  然后systemctl restart network 

关于禁用防火墙  systemctl disable firewalld

virtualBox+centos7+jenkins+ansible部署项目_第3张图片

f.域名解析的配置

vi /etc/resolv.conf 配置也粘一下,配置一下谷歌的域名解析,然后就可ping baidu.com了

g.win10宿主机上为方便访问虚拟机,修改hosts文件,win10找不到hosts文件百度,路径为 C:\Windows\System32\drivers\etc\hosts

二.安装jenkins

这里下载war版的jenkins 然后java -jar jenkins.war 就可启动了,默认是8080端口,贴一下界面,关于插件的安装,新手推荐默认的选项就好了

virtualBox+centos7+jenkins+ansible部署项目_第4张图片

三、安装ansible

yum install ansible 就可以了,关于ansible的指令这里不做介绍,它的原理基于ssh的,无需后天进程守护,也无需客户机安装任何东西,打开ssh就可以了。

四、jenkins+ansible持续集成

这里记录成功的一个job pipeLine-test2,该job的主要流程,使用的jenkins pipeline

1.从gitee上拉代码,github太慢了

2.maven构建项目,打成jar包

3.拷贝jar包到ansible的服务器

4.利用ansible服务器发布项目到其他两台服务器

a.这里的pipeline使用的声明式的pipeline,这里主要用了dir和git

dir是改变当前jenkins的工作目录,git是拉代码,credentialsId是在jenkins凭据里配置用户名和密码生成的id

pipeline {
   agent any

   stages {
       //拉取代码
      stage('Pull Source Code') {
         steps {
            dir("appEureka"){
               git(credentialsId: 'be1fa9f2-1a50-4dc5-aa6d-e77bcdad43a1', url: 'https://gitee.com/dahaizhenqiang/app_eureka.git')  
            }
         }
      }
      //构建
       stage('build appEureka') {
         steps {
            dir("appEureka"){
                sh 'mvn -Dmaven.test.skip=true clean install'
                sh "cp target/*.jar ${JENKINS_HOME}/workspace/${MCS_NAME}/"
            }
         }
      }
      //复制
       stage('copy package to ansible server') {
         steps {
             node(label:'centos7-2'){
                sh "mkdir -p /tmp/${JOB_NAME}-${BUILD_NUMBER}"
             }
             echo "starting copy "
			 sh "sshpass -p 'rbzOFbcvnsPgNlEG' scp ${JENKINS_HOME}/workspace/${MCS_NAME}/*.jar songhq@centos7-2:/tmp/${JOB_NAME}-${BUILD_NUMBER}/"
             node(label: 'centos7-2') {
    			sh "rm -rf ~/${MCS_NAME}"
                sh "ln -s /tmp/${JOB_NAME}-${BUILD_NUMBER} ~/${MCS_NAME}"
                sh "cp ~/${MCS_NAME}/*.jar ~/${MCS_NAME}/pkg.ready"
			}
         }
      }
     stage('use ansible playbook to restart server') { 
		steps {
            node(label: 'centos7-2') {
				sh "ansible-playbook -i /home/songhq/deploy_playbook/app_eureka_host /home/songhq/deploy_playbook/app_eureka.yaml"
            }
		}
    }
     
   }
   environment {
	MCS_NAME = 'pipeLine-test2'
  }
}

b.这里ansible使用的是ansible-playbook ,这里贴一下app_eureka.yaml文件和app_eureka_host文件

---
- hosts: all
  user: songhq
  tasks:
    - name: backup app_eureka module package
      shell: mkdir -p /home/songhq/app/app_eureka.backup;mkdir -p /home/songhq/app/app_eureka;if [-f "/home/songhq/app/app_eureka/app_eureka-0.0.1-SNAPSHOT.jar"];then c
p /home/songhq/app/app_eureka/app_eureka-0.0.1-SNAPSHOT.jar /home/songhq/app/app_eureka/app_eureka-0.0.1-SNAPSHOT.jar$(date +%Y%m%d%H%M);fi
    - name: copy lastest app_eureka module package
      copy:
        src: /home/songhq/pipeLine-test2/pkg.ready
        dest: /home/songhq/app/app_eureka/app_eureka-0.0.1-SNAPSHOT.jar
        owner: songhq
        group: songhq
        mode: 0777
    - name: copy module shell
      copy:
         src: /home/songhq/deploy_playbook/restart.sh
         dest: /home/songhq/app/app_eureka/restart.sh
         owner: songhq
         group: songhq
         mode: 0777
    - name: restart app_eureka
      shell: /home/songhq/app/app_eureka/restart.sh

[all:vars]
ansible_ssh_user='songhq'
ansible_ssh_pass='xxxxx'

[app_eureka]
centos7-1
centos7-3

最后的结果就是在centos7-1和centos7-3两台的机器上部署app_eureka这个微服务

效果如图,自此,项目发布完成,当然不是特别完善,没有考虑回滚

virtualBox+centos7+jenkins+ansible部署项目_第5张图片

virtualBox+centos7+jenkins+ansible部署项目_第6张图片

 

你可能感兴趣的:(virtualBox+centos7+jenkins+ansible部署项目)