自動化部署三劍客(三)

jenkins


什麼是jenkins

jenkins是一個開源持續集成工具

開發工具:JAVA

功能:提供了軟件開發的持續集成服務

特點:支持主流軟件配置管理,配置實現軟件配置管理,持續集成功能


Jenkins的優勢和應用場景

它是一個主流的運維發開平臺,兼容所有主流開發環境

插件市場可與海量業內主流開發工具實現集成

以job爲配置單位與日誌管理,使運維與開發人員能協同工作

權限管理劃分不同Job不同角色

強大的負載均衡功能,保證項目的可靠性


jenkins安裝配置管理

1.添加yum源(https://pkg.jenkins.io/redhat/

[root@jenkkins ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo

[root@jenkkins ~]# rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key

2.保證系統java環境爲8.0

[root@jenkins ~]# yum install java -y

[root@jenkins ~]# java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

3.關閉防火牆和selinux

[root@jenkins ~]# systemctl stop firewalld
[root@jenkins ~]# systemctl disable firewalld

[root@jenkins ~]# setenforce 0

[root@jenkins ~]# cat /etc/selinux/config

SELINUX=disabled

jenkins安裝與初始化工作

1.yum安裝jenkins

[root@jenkins ~]# yum install jenkins -y

2.創建jenkins用戶

[root@jenkins ~]# useradd deploy

3.更改jenkins啓動用戶和端口

[root@jenkins ~]# vim /etc/sysconfig/jenkins

JENKINS_USER="deploy"

JENKINS_PORT="8080"

4.更改家目錄和日誌目錄的屬豬和屬組

[root@jenkins ~]# chown -R deploy:deploy /var/lib/jenkins

[root@jenkins ~]# chown -R deploy:deploy /var/log/jenkins

4.啓動jenkins

[root@jenkins ~]# systemctl start jenkins.service 

我發現我修改了啓動用戶,jenkins端口起不來,我又改回去並重啓機器了

據說還要改/var/cache/jenkins/的屬組和屬豬,我沒改下次補上,看行不行

[root@jenkins ~]# lsof -i:8080
COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    1145 jenkins  166u  IPv6  21469      0t0  TCP *:webcache (LISTEN)


登陸web界面:

獲取密碼:

[root@jenkins ~]# cat  /var/lib/jenkins/secrets/initialAdminPassword
eb8de3b50e764410a8bb371aa1b8771d

安裝推薦的插件:

特別的慢:


Jenkins Job介紹

代表一個任務或者項目

可配置與可執行

執行後的記錄稱之爲build

日誌監控與記錄

所有文件集中保存

Freestyle Job:

1.需在頁面添加模塊配置項與參數完成配置

2.每個job只能實現一個開發功能

3.無法將配置代碼化,不利於Job配置遷移與版本控制

4.邏輯相對簡單,無需額外的學習成本

Pipeline Job:匹配持續集成與持續交付的概念

1.所有模塊,參數配置都可以體現爲一個pipeline腳本

2.可以定義多個stage構建一個管道工作集

3.所有配置代碼化,方便Job配置遷移與版本控制

4,需要pipeline腳本語法基礎


Jenkins Job環境準備:

     1.配置Jenkins server本地Gitlab DNS
      2.安裝 git client , curl 工具依賴
      3.關閉系統Git http.sslVerify安全認證
      4.添加Jenkins後臺Git client user 與email
      5.添加Jenkins後臺Git Credential憑據

1.[root@jenkins ~]# echo "10.0.3.81 gitlab.example.com" >> /etc/hosts

2.[root@jenkins ~]# yum install git curl -y

3.[root@jenkins ~]# git config --system http.sslVerify false

4

註冊Git plugin的name和email

系統管理》系統設置》Git plugin

添加Jenkins後臺Git Credential憑據

憑據》系統》全局憑據》添加憑據

這個憑據就是gitlab的賬號和密碼


Jenkins Freestyle Job的構建與配置

1.創建一個freestyle project

2.編輯描述信息:

3.參數配置

4.源碼管理:

如下圖,服務器沒裝git,而且我git忘了關ssl驗證(前面已經補上)

5.build配置

 


Jenkins Pipeline Job構建配置

Jenkins Pipeline Job編寫規範


1.創建一個Pipeline job

2.添加描述信息:

3.pipeline腳本配置

#!groovy

pipeline {
    agent {node {label 'master'}}

    environment {
        PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin"
    }

    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.sslVerify false'
                dir ("${env.WORKSPACE}") {
                    git branch: 'master', credentialsId:"0acf3ea1-05d8-4705-8f9a-d72293a4813f", url: 'https://gitlab.example.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..."
                }
            }
        }
    }
}

4.構建

首次構建pipeline job時,我們的參數沒有引入到當前pipelinejob當中 

5.再次帶有參數的構建

6.單擊藍色小按鈕,查看控制檯日誌

 


Jenkins 應用

如何使用jenkins與我們平時使用的應用工具進行集成使用

編寫job的同時使用任務調取jenkins的基礎應用


Jenkins Linux shell 集成

Jenkins+ Linux shell

1.新建任務

 

2.添加描述

3.添加構建腳本

#!/bin/sh

user=`whoami`

if [ $user == 'deploy' ]
then
	echo "Hello, my name is $user"
else
	echo "Sorry, I am not $user"
fi

ip addr

cat /etc/system-release

free -m

df -h

py_cmd=`which python`

$py_cmd --version

4.保存並退出,開始構建

5.查看控制檯信息

 


Jenkins參數集成

1.新建任務

2.添加描述

3.勾選參數化構建

添加選項參數

添加文本參數

添加布爾值參數:

添加密碼參數

4.添加構建步驟,保存

#!/bin/sh

echo "Current deploy environment is $deploy_env"
echo "The build is $version"
echo "The paasword is $pass"

if $bool
then
	echo "Request is approved"
else
	echo "Request is rejected"
fi

5.開始構建


Jenkins git集成

1.新建任務

2.添加描述

3.源碼管理,添加代碼倉庫,然後保存退出

4.立即構建

第一次,倉庫爲空構建報錯


Jenkins maven集成

https://maven.apache.org/

 1.下載安裝maven

[root@jenkins ~]# wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz

[root@jenkins ~]# tar -zxvf apache-maven-3.6.0-bin.tar.gz -C /opt

[root@jenkins ~]# cd /opt

[root@jenkins opt]# cd apache-maven-3.6.0/bin

[root@jenkins bin]# ./mvn --version
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
Maven home: /opt/apache-maven-3.6.0
Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-862.14.4.el7.x86_64", arch: "amd64", family: "unix"

2.新建任務

3.添加描述

4.源碼管理

5.添加構建步驟,保存

6.配置javahome和maven home

再次配置任務

保存並立即構建

這個構建比較慢

 


Jenkins ansible集成

環境準備:

安裝python3.7,ansible git版本   8步走,如下

按照這篇教程來一般不會有報錯:https://blog.csdn.net/qq_33317586/article/details/87304589

防止意外中斷,可以在screen裏操作

zipimport.ZipImportError: can't decompress data; zlib not available的處理方式:

[root@jenkins Python-3.7.2]# yum install zlib-devel zlib -y

ModuleNotFoundError: No module named '_ctypes'的處理方式

[root@jenkins Python-3.7.2]# yum install libffi-devel -y

 

1,開啓密鑰認證:

jenkins主機下的deploy系統用戶到test.example.com這臺主機的密鑰認證

(.py3-a2.7.8-env) [deploy@jenkins ansible]$ ssh [email protected]
Last login: Sat Feb 23 20:20:52 2019 from 10.0.3.80
[root@client ~]# 

2.deploy目錄下面有個ansible的配置文件

下圖的user寫成了use,圖片就不改了,此處說明一次

3.新建任務

4.添加描述

5.構建>增加構建步驟>執行shell

6.點擊立即構建,發現小圓圈是紅色,點開提示權限不夠,原來jenkins是以jenkins身份運行的,我沒改成deploy用戶

我以爲把/home/deploy下面的文件屬主都改爲jenkins就可以了; 

  • [root@jenkins ~]# chown -R jenkins /home/deploy

再次構建:

終於發現原因了,因爲我當時創建的jenkins是系統用戶,沒有家目錄,密鑰是必須放在家目錄的,我su到jenkins用戶,把deploy密鑰複製過來,修改權限,測試連接test機器再構建就OK了

如下圖:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章