ansible+jenkins可以轻松实现持续集成,写文章的之前本人利用三台虚拟机搭建成功,主要记录关键步骤和坑,记性不如烂笔头。
1.virtualBox的下载和安装
这个没什么坑的,我的电脑是win10系统,现在对应的virtualBox即可,为什么选择virtualBox,开源免费且轻量化。
2.centos镜像文件的下载和安装
这里注意一下下载centos镜像文件的min版本就可以,无需界面化等其他软件。
关于网络的设置,本人踩得坑还挺多
a.使用桥接模式,此模式更加接近真实环境,而且可以上网,也可以宿主机交互
b.界面名称选择图中的,不要选择真实的无限网卡或有线网卡,亲身经历,当你的宿主机网络发生变化时,有可能连不上网,而且也很难设置固定的ip,没有固定的ip不方便以后的调试。
c.win10如何添加虚拟网卡环回适配器,百度Microsoft loopback Adapter的安装即可,win10中没有Microsoft loopback Adapter,而是环回适配器,名称不一样注意一下。
d.如何使用这个配置这个环回适配器实现虚拟机可以上网,在真实的网卡属性里面有共享设置共享的网络,配置环回适配器,固定ip,后面设置虚拟机的固定ip会用到
e.虚拟机的网络设置
ifconfig在最小安装没有该命令,使用 ip addr即可,
vi /etc/sysconfig/network-script/ifcfg-xxxx 这里贴一下关键配置 然后systemctl restart network
关于禁用防火墙 systemctl disable firewalld
f.域名解析的配置
vi /etc/resolv.conf 配置也粘一下,配置一下谷歌的域名解析,然后就可ping baidu.com了
g.win10宿主机上为方便访问虚拟机,修改hosts文件,win10找不到hosts文件百度,路径为 C:\Windows\System32\drivers\etc\hosts
这里下载war版的jenkins 然后java -jar jenkins.war 就可启动了,默认是8080端口,贴一下界面,关于插件的安装,新手推荐默认的选项就好了
yum install ansible 就可以了,关于ansible的指令这里不做介绍,它的原理基于ssh的,无需后天进程守护,也无需客户机安装任何东西,打开ssh就可以了。
这里记录成功的一个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这个微服务
效果如图,自此,项目发布完成,当然不是特别完善,没有考虑回滚