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集成
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了
如下圖: