前言
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
二.安裝jenkins
這裏下載war版的jenkins 然後java -jar jenkins.war 就可啓動了,默認是8080端口,貼一下界面,關於插件的安裝,新手推薦默認的選項就好了
三、安裝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這個微服務
效果如圖,自此,項目發佈完成,當然不是特別完善,沒有考慮回滾