版本控制系統 Gitlab Github 持續集成工具 Jenkins 部署工具 Ansible Saltstack Chef
本文經過Jenkins + Ansible + Gitlab
實現自動化部署。html
Jenkins是一個開源可擴展的,持續集成、交付、部署(軟件/代碼的編譯、打包、部署)工具,由Java開發,它提供了軟件開發的持續集成服務,支持主流軟件配置管理、配合實現軟件配置管理及持續集成功能。java
1. 主流的運維開發平臺,兼容全部主流開發環境 2. 插件市場可與海量業內主流開發工具實現集成 3. Job爲配置單位與日誌管理,使運維與開發人員協同工做 4. 權限管理劃分不一樣的Job不一樣角色 5. 強大的負載均衡功能,保障項目的可靠性
3臺機器須要作環境準備。node
Jenkins + Ansible 192.168.30.128 test host 192.168.30.129 gitlab 192.168.30.130
# systemctl stop firewalld && systemctl disable firewalld# setenforce 0 && sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
# vim /etc/hosts192.168.30.128 jenkins.lzxlinux.com 192.168.30.129 test.lzxlinux.com 192.168.30.130 gitlab.lzxlinux.com
在Windows電腦hosts文件中添加本地dns:linux
192.168.30.128 jenkins.lzxlinux.com 192.168.30.129 test.lzxlinux.com 192.168.30.130 gitlab.lzxlinux.com
# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo# cat /etc/yum.repos.d/jenkins.repo[jenkins]name=Jenkins baseurl=http://pkg.jenkins.io/redhat gpgcheck=1 #爲1時會檢測key# rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
# yum install -y java# java -versionopenjdk version "1.8.0_222"OpenJDK Runtime Environment (build 1.8.0_222-b10)OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)
# yum install -y jenkins
# useradd deploy
# vim /etc/sysconfig/jenkinsJENKINS_USER="deploy" #保證jenkins啓動用戶與ansible部署用戶一致JENKINS_PORT="8080"# chown -R deploy:deploy /var/lib/jenkins# chown -R deploy:deploy /var/log/jenkins# chown -R deploy:deploy /var/cache/jenkins
# systemctl start jenkins && systemctl enable jenkins# netstat -lntp |grep 8080tcp6 0 0 :::8080 :::* LISTEN 1441/java
打開網頁,訪問jenkins.lzxlinux.com:8080
。git
查看/var/lib/jenkins/secrets/initialAdminPassword
,複製密碼登陸。shell
選擇安裝推薦的插件
apache
建立admin用戶,自定義密碼vim
url保持默認,進入jenkins頁面。安全
jenkins的每一個job表明一個任務或項目,它是可配置與可執行的。執行job後的記錄稱之爲build(構建)。bash
jenkins job分爲兩種:freestyle job
與pipeline job
。
freestyle job: 1. 需在頁面添加模塊配置項與參數完成配置 2. 每一個job僅能實現一個開放功能 3. 沒法將配置代碼化,不利於job配置遷移與版本控制 4. 邏輯相對簡單,無需額外學習成本 pipeline job: 1. 全部模塊、參數配置均可以體現爲一個pipeline腳本 2. 可定義多個stage構建一個管道工做集 3. 全部配置代碼化,方便job配置遷移與版本控制 4. 須要pipeline腳本語法基礎
# echo '192.168.30.130 gitlab.lzxlinux.com' >> /etc/hosts
# yum install -y git curl
# git config --system http.sslVerify false
系統管理
→ 系統設置
→ Git plugin
,填入user與email
憑據
→ 全局
→ 添加憑據
,類型爲Username with password
, 範圍爲全局
點擊新建任務
,任務名稱輸入test-freestyle-job
,選擇自由風格的軟件項目
。
添加描述信息:This is my first test freestyle job
,勾選參數化構建過程
,添加選項參數
和文本參數
接着源碼管理
,勾選Git
,寫入以前gitlab的test-repo這個項目地址,而後選擇前面添加的git憑據
接着構建
→ 增長構建步驟
→ 執行 shell
,寫入下面內容
#!/bin/bashexport PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"# Print env variableecho "[INFO] Print env variable"echo "Current deployment environment is $deploy_env" >> test.propertiesecho "The build is $version" >> test.propertiesecho "[INFO] Done..."# Check test propertiesecho "[INFO] Check test properties"if [ -s test.properties ]then cat test.properties echo "[INFO] Done..."else echo "test.properties is empty"fiecho "[INFO] Build finished..."
點擊應用
,再點擊保存
。
點擊Build with Parameters
,選擇對應的選項參數
,選擇好後點擊開始構建
。
等待構建完成,查看控制檯輸出
能夠看到,構建的工做區路徑爲/var/lib/jenkins/workspace/test-freestyle-job
,該job的配置文件都會保存在該路徑中。
git部分至關於對gitlab的test-repo項目倉庫作了git clone
操做,接着執行了定義的shell腳本,最終的構建結果是SUCCESS。
1. 全部代碼包裹在pipeline{}層內 2. stages{}層用來包含該pipeline全部stage{}子層 3. stage{}層用來包含具體須要編寫任務的steps{}子層 4. steps{}層用來添加具體須要調用的模塊語句
agent區域 agent定義pipeline在哪裏運行,可使用any、none或具體的jenkins node主機名 environment區域 "變量名稱=變量值",定義環境變量。可在pipeline{}層定義全局環境變量,應用於全部stages任務 steps區域 echo模塊:打印輸出 sh模塊:調用linux系統shell命令 git url:調用git模塊進行git相關操做 script區域(可選) 該區域定義在steps{}層內,可編寫groovy腳本語言,用來進行腳本邏輯運算
點擊新建任務
,任務名稱輸入test-pipeline-job
,選擇流水線
。
添加描述信息:This is my first test pipeline job
接着定義Pipeline script
,寫入下面內容
#!groovypipeline { agent {node {label 'master'}} environment { PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" } parameters { choice ( choices: 'dev\nprod', description: 'choose deploy environment', name: 'deploy_env' ) string ( name: 'version', defaultValue: '1.0.0', description: 'build version' ) } stages { stage("Checkout test repo") { steps { sh 'git config --global http.sslVertify false' dir ("${env.WORKSPACE}") { git branch: 'master', credentialsId: "00ee2c7c-c475-440c-a88f-dd6c9a49f669", url: 'https://root@gitlab.lzxlinux.com/root/test-repo.git' } } } stage("Print env variable") { steps { dir ("${env.WORKSPACE}") { sh """ echo "[INFO] Print env variable" echo "Current deployment environment is $deploy_env" >> test.properties echo "The build is $version" >> test.properties echo "[INFO] Done..." """ } } } stage("Check test properties") { steps { dir ("${env.WORKSPACE}") { sh """ echo "[INFO] Check test properties" if [ -s test.properties ] then cat test.properties echo "[INFO] Done..." else echo "test.properties is empty" fi echo "[INFO] Build finished..." """ } } } }}
上面的credentialsId即00ee2c7c-c475-440c-a88f-dd6c9a49f669
,是複製憑據頁面建立該憑據(gitlab管理員全局憑據)時自動生成的憑據id。
點擊應用
,再點擊保存
。
點擊當即構建
,等待構建完成,會發現構建失敗,緣由是第一次構建時選項參數
沒有引入到當前的pipeline job中。
點擊test-pipeline-job
回到該項目中,會發現當即構建
變成了Build with Parameters
,選擇對應的選項參數
,選擇好後點擊開始構建
。
第二次構建則成功了,查看控制檯輸出
經過前面兩次構建,對比freestyle job和pipeline job,能夠看到,pipeline job將全部配置代碼化,方便job配置遷移與版本控制,pipeline job更具備優點。
# cd /software# wget https://www-eu.apache.org/dist/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz# tar zxf apache-maven-3.6.2-bin.tar.gz# mv apache-maven-3.6.2 /usr/local/maven# echo 'PATH=$PATH:/usr/local/maven/bin' >> /etc/profile# source /etc/profile# mvn --versionApache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00)Maven home: /usr/local/maven Java version: 1.8.0_222, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.222.b10-1.el7_7.x86_64/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-1062.1.1.el7.x86_64", arch: "amd64", family: "unix"
JAVA_HOME
及MAVEN_HOME
:系統管理
→ 全局工具配置
→ 新增JDK
,填入內容
接着新增Maven
,填入內容
點擊應用
,再點擊保存
。
後續在打包時,構建
這一步選擇調用頂層 Maven 目標
,版本選擇maven3.6.2
,目標填入package
便可。
# su - deploy$ vim testservers[testserver]test.lzxlinux.com ansible_user=root
點擊新建任務
,任務名稱輸入test-freestyle-job
,選擇自由風格的軟件項目
。
添加描述信息:This is my first ansible job
,接着構建
→ 增長構建步驟
→ 執行 shell
,寫入下面內容
#!/bin/bashset +x #關閉命令行擴展環境功能source /home/deploy/.py3-a2.8-env/bin/source /home/deploy/.py3-a2.8-env/ansible/hacking/env-setup -qcd /home/deploy ansible --version ansible-playbook --versioncat testservers ansible -i testservers testserver -m command -a "ip addr"set -x
點擊應用
,再點擊保存
。
點擊當即構建
,查看控制檯輸出
能夠看到,shell腳本中執行的命令在控制檯中輸出。