Jenkins + Ansible + Gitlab(三)

版本控制系統    Gitlab Github

持續集成工具    Jenkins

部署工具    Ansible Saltstack Chef

本文經過Jenkins + Ansible + Gitlab實現自動化部署。html


Jenkins介紹

Jenkins是一個開源可擴展的,持續集成、交付、部署(軟件/代碼的編譯、打包、部署)工具,由Java開發,它提供了軟件開發的持續集成服務,支持主流軟件配置管理、配合實現軟件配置管理及持續集成功能。java

  • jenkins的優點:
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

  • 關閉防火牆和selinux:
# systemctl stop firewalld && systemctl disable firewalld# setenforce 0 && sed -i 's/=enforcing/=disabled/g' /etc/selinux/config

  • 添加本地dns:
# 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


Jenkins安裝配置

  • 添加yum倉庫源:
# 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

  • 安裝java(java版本在8.0及以上):
# 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)

  • 安裝jenkins:
# yum install -y jenkins

  • 建立jenkins系統用戶:
# useradd deploy

  • 更改jenkins啓動用戶與端口:
# 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

  • 啓動jenkins並開機啓動:
# systemctl start jenkins && systemctl enable jenkins# netstat -lntp |grep 8080tcp6       0      0 :::8080                 :::*                    LISTEN      1441/java

打開網頁,訪問jenkins.lzxlinux.com:8080git

在這裏插入圖片描述

查看/var/lib/jenkins/secrets/initialAdminPassword,複製密碼登陸。shell

選擇安裝推薦的插件apache

在這裏插入圖片描述

建立admin用戶,自定義密碼vim

在這裏插入圖片描述

url保持默認,進入jenkins頁面。安全


Jenkins Job介紹

jenkins的每一個job表明一個任務或項目,它是可配置與可執行的。執行job後的記錄稱之爲build(構建)。bash

jenkins job分爲兩種:freestyle jobpipeline job

  • 二者區別:
freestyle job:
    1. 需在頁面添加模塊配置項與參數完成配置
    2. 每一個job僅能實現一個開放功能
    3. 沒法將配置代碼化,不利於job配置遷移與版本控制
    4. 邏輯相對簡單,無需額外學習成本

pipeline job:
    1. 全部模塊、參數配置均可以體現爲一個pipeline腳本
    2. 可定義多個stage構建一個管道工做集
    3. 全部配置代碼化,方便job配置遷移與版本控制
    4. 須要pipeline腳本語法基礎

  • jenkins環境準備:
  1. 配置jenkins server本地gitlab dns
# echo '192.168.30.130 gitlab.lzxlinux.com' >> /etc/hosts

  1. jenkins server安裝git client、curl工具依賴
# yum install -y git curl

  1. jenkins server關閉系統git http.sslVerify安全認證
# git config --system http.sslVerify false

  1. 添加jenkins後臺git client user與email

系統管理系統設置Git plugin,填入user與email

在這裏插入圖片描述

  1. 添加jenkins後臺git credential憑據

憑據全局添加憑據,類型爲Username with password, 範圍爲全局

在這裏插入圖片描述


Freestyle Job配置與構建

  • 配置freestyle job:

點擊新建任務,任務名稱輸入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..."

在這裏插入圖片描述

點擊應用,再點擊保存

  • 構建freestyle job:

點擊Build with Parameters,選擇對應的選項參數,選擇好後點擊開始構建

在這裏插入圖片描述

等待構建完成,查看控制檯輸出

在這裏插入圖片描述

能夠看到,構建的工做區路徑爲/var/lib/jenkins/workspace/test-freestyle-job,該job的配置文件都會保存在該路徑中。

git部分至關於對gitlab的test-repo項目倉庫作了git clone操做,接着執行了定義的shell腳本,最終的構建結果是SUCCESS。


Pipeline Job構建與配置

  • pipeline基礎架構:
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腳本語言,用來進行腳本邏輯運算

  • 配置pipeline job:

點擊新建任務,任務名稱輸入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:

點擊當即構建,等待構建完成,會發現構建失敗,緣由是第一次構建時選項參數沒有引入到當前的pipeline job中。

在這裏插入圖片描述

點擊test-pipeline-job回到該項目中,會發現當即構建變成了Build with Parameters,選擇對應的選項參數,選擇好後點擊開始構建

在這裏插入圖片描述

第二次構建則成功了,查看控制檯輸出

在這裏插入圖片描述

在這裏插入圖片描述

經過前面兩次構建,對比freestyle job和pipeline job,能夠看到,pipeline job將全部配置代碼化,方便job配置遷移與版本控制,pipeline job更具備優點。


Jenkins Maven集成

  • jenkins server安裝maven:
# 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"

  • jenkins配置JAVA_HOMEMAVEN_HOME

系統管理全局工具配置新增JDK,填入內容

在這裏插入圖片描述

接着新增Maven,填入內容

在這裏插入圖片描述

點擊應用,再點擊保存

後續在打包時,構建這一步選擇調用頂層 Maven 目標,版本選擇maven3.6.2,目標填入package便可。


Jenkins Ansible集成

  • 編輯ansible主機清單:
# su - deploy$ vim testservers[testserver]test.lzxlinux.com ansible_user=root

  • 配置ansible-freestyle-job:

點擊新建任務,任務名稱輸入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

在這裏插入圖片描述

點擊應用,再點擊保存

  • 構建ansible-freestyle-job:

點擊當即構建,查看控制檯輸出

在這裏插入圖片描述

能夠看到,shell腳本中執行的命令在控制檯中輸出。

相關文章
相關標籤/搜索