企業運維實戰--jenkins持續集成快速入門并結合ansible進行簡單部署
- 前言-jenkins簡介
- 一、jenkins安裝
- 二、jenkins插件安裝
- 三、jenkins專案創建
- 1.簡單專案--連接gitlab并自動觸發
- 2.jenkins自動構建鏡像,并上傳至harbor倉庫
- 3.jenkins拉取harbor倉庫鏡像
- 4.SSH方式進行jenkins操作
- 五、jenkins節點管理--添加agent節點
- 六、jenkins用戶管理
- 七、jenkins結合ansible
- 1.gitlab創建playbook專案并完善
- 2.jenkins創建ansible專案
- 八、jenkins結合k8s
- 筆記補充
前言-jenkins簡介
Jenkins是開源CI&CD軟體領導者, 提供超過1000個插件來支持構建、部署、 自動化, 滿足任何專案的需要,
? Jenkins用Java語言撰寫,可在Tomcat等流行的servlet容器中運行,也可獨立運 行,
? CI(Continuous integration持續集成)持續集成強調開發人員提交了新代碼之后, 立刻進行構建、(單元)測驗,

CD(Continuous Delivery持續交付) 是在持續集成的基礎上,將集成后的代碼部 署到更貼近真實運行環境(類生產環境),

一、jenkins安裝
準備一臺全新的虛擬機server3,火墻和selinux全部關掉,
需要聯網
下載地址:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/
安裝jdk
rpm -ivh jdk-8u171-linux-x64.rpm

安裝依賴性,前往阿里云鏡像站下載,
再裝jenkins
rpm -ivh daemonize-1.7.7-1.el7.x86_64.rpm
yum install -y jenkins-2.306-1.1.noarch.rpm


開啟服務
systemctl start jenkins

訪問訪問:172.25.9.3:8080
使用默認初始密碼登陸,初始密碼位于
cat /var/lib/jenkins/secrets/initialAdminPassword

登陸成功,
更新插件源
mkdir /var/lib/jenkins/update-center-rootCAs
wget https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/rootCA/update-center.crt -O /var/lib/jenkins/update-center-rootCAs/update-center.crt
chown jenkins.jenkins -R /var/lib/jenkins/update-center-rootCAs

給定權限


查看哪個鏡像站的速度快
curl -sSL https://cdn.jsdelivr.net/gh/lework/jenkins-update-center/speed-test.sh | bash

在設定中找到Update Site,將快的url填入

查看鏡像源檔案,已更改
cat /var/lib/jenkins/hubson.model.UpdateCenter.xml

二、jenkins插件安裝
Dashboard ----> Plugin Manager

點擊available,搜索中文插件,點擊install


重繪后即可查看中文版本,部分仍然為英文是因為插件不完整

安裝pipeline流水線插件

三、jenkins專案創建
1.簡單專案–連接gitlab并自動觸發
安裝好流水線插件后即可創建專案
新建一個freestyle型別的專案名為demo

為專案配置git倉庫,安裝gitlab插件

配置名為demo的專案,在原始碼管理一欄添加私有git url
私有git路徑:git@172.25.9.2:root/demo.git

報錯,因為Jenkins本機未安裝git
yum install -y git
安裝完成后,報錯發生變化

報錯原因,git倉庫無法和Jenkins進行SSH免密連接,解決方法:
首先將server3的公鑰上傳到git


然后將公鑰上傳到Jenkins,選擇ssh方式上傳,報錯解決,

構建觸發器,測驗輪詢為每分鐘,格式見圖

設定shell
ls -l

測驗:git端添加測驗檔案index.html,察看是否同步

添加完成后記得push!!

查看demo專案控制臺輸出

index檔案已檢測到
gitlab自動觸發jenkins
首先打開git設定----網路----外發請求, 允許Webhooks和服務對本地網路的請求
在專案設定----Webhooks添加策略

其中token的獲取方式為

成功添加策略,也可點擊測驗進行測驗,
2.jenkins自動構建鏡像,并上傳至harbor倉庫
git端編輯Dockerfile,定義拉取的測驗鏡像

push

jenkins端查看同步后的Dockerfile

下載插件
將配置好的harbor倉庫啟動
在server3端安裝docker并連接到server1 harbor倉庫中,步驟忽略

配置專案demo,按圖中要求即可

添加連接倉庫的鑰匙,采用用戶名密碼的方式登陸harbor倉庫,此處用戶名密碼為harbor倉庫密碼
添加成功顯示:

修改套接字檔案權限

關閉配置中強制拉取這一選項

運行專案,查看控制臺輸出,成功運行

成功運行,在harbor/library/demo中查看上傳的鏡像,以任務執行名來命名的鏡像
jenkins自動構建鏡像,并上傳至harbor倉庫完成,
3.jenkins拉取harbor倉庫鏡像
創建一個docker專案,型別為freestyle

構建觸發器,當demo專案完成后,進行docker專案
執行shell命令,拉取倉庫鏡像
完成配置后點擊專案后的按鈕進行執行

執行完畢查看Bulid History的控制臺輸出
顯示結果為成功

在server3中查看docker容器

改進:每次實行都生成新的容器,修改shell命令一欄即可
執行查看控制臺

4.SSH方式進行jenkins操作
安裝ssh插件

添加ssh全域屬性
Dashboard----配置----全域屬性
此處添加密鑰為需要ssh登陸操作的服務器的賬號和密碼

添加完成

配置docker專案
選擇構建步驟,采用ssh


打開虛擬機172.25.9.4, 主機名為server4,并配置好docker,連接harbor倉庫,添加好決議,

只需將原來的docker組態檔scp過去即可,此處操作忽略,
配置好server4后 執行docker專案,查看控制臺輸出結果,
使用ssh方式操作jenkins成功,
五、jenkins節點管理–添加agent節點
將server4配置成jenkins的agent端
server4安裝jdk

節點管理----新建節點


安裝agent插件


安裝成功顯示

測驗,關閉master節點,運行專案,查看控制臺輸出


測驗結束后記得打開master節點,避免影響后續實驗,
六、jenkins用戶管理
創建新用戶hyl,默認創建用戶會給定全部權限



默認創建用戶會給定全部權限


顯然這樣是不安全的,
安裝插件Role 安裝后通過插件授權

設定全域安全配置----授權策略----Role-Based Strategy,設定后除了admin用戶以外,其他用戶均需要授權才可進行操作



管理角色


分配角色


創建專案demo.01 ,測驗查看用戶hyl的權限



可以看到,hyl用戶只能看到demo.* 開頭的專案,
七、jenkins結合ansible
在ansible和saltstack之間,通常幾百個節點用ansible,因為ansible用ssh連接、幾萬個節點用saltstack,訊息佇列更加輕量級,
1.gitlab創建playbook專案并完善

clone到server2編輯組態檔
編輯README.md檔案測驗git倉庫是否能夠成功push
git clone git@172.25.9.2:root/playbook.git
cd playbook/
touch README.md
git add README.md
git commit -m "add README.md"
git push -u origin master

編輯playbook
vim playbook.yaml
---
- hosts: all
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: configure apache
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache
- name: start apache
service:
name: httpd
enabled: yes
state: started
handlers:
- name: restart apache
service:
name: httpd
state: restarted
編輯ansible.cfg組態檔
vim ansible.cfg
[defaults]
command_warnings=False
remote_user=devops
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
創建清單,一個用于測驗,一個用于部署
mkdir inventory
cd inventory/
vim prod
vim test
cat *
[root@server2 playbook]# cat inventory/prod
server5 http_port=80
[root@server2 playbook]# cat inventory/test
server4 http_port=8080

修改apache組態檔的jinja2模板,使用清單中定義的變數傳值
mv httpd.conf httpd.conf.j2
vim httpd.conf.j2

查看目錄整體結構
yum install -y tree
tree .

交付修改后的檔案
git add .
git status -s
git commit -m " v1"
git push -u origin master

此時git倉庫成功配置
2.jenkins創建ansible專案

配置git倉庫

先查看連接是否正常
shell查看檔案是否通過jenkins

執行專案,

成功,說明ansible專案gitlab與jenkins連接成功,

對ansible待操作的節點需要一些簡單配置:
jenkins端,使用jenkins用戶進行操作,需要給一個互動式bash
server4/5:
創建用戶并修改密碼,需要兩節點的用戶id相同
useradd devops
id devops
echo westos | passwd --stdin devops

sudo授權
visudo
# 大約100行左右進行如圖所示的授權
devops ALL=(ALL) NOPASSWD: ALL


server3:(jenkins端),切換用戶到jenkins,免密登錄ansible的node節點
usermod -s /bin/bash jenkins
su - jenkins
cd /var/lib/jenkins/workspace/ansible
ssh-keygen
ssh-copy-id devops@server4
ssh-copy-id devops@server5


準備作業完成,開始在jenkins中晚上配置ansible專案
選擇引數化構建程序----選項引數:添加引數名、被選擇的引數為按ansible執行清單


構建
執行shell
cd $WORKSPACE
ansible-playbook -i inventory/$deploy playbook.yaml

選擇引數執行專案
先測驗test

結果顯示無錯誤,

且test節點httpd服務已啟動,

后部署prod

顯示成功

prod節點部署httpd服務成功,

八、jenkins結合k8s

方法一:
ssh方式連接k8s master節點,然后執行kubectl命令即可,
方法二:
使用插件的方式管理k8s,
筆記補充
gitlab訪問報錯502
報錯原因:8080埠被java占用
方法1:kill掉java行程,多載gitlab
方法2:修改gitlab組態檔vim /etc/gitlab/gitlab.rb 添加一個未使用的埠
external_url ‘http://172.25.9.2:8099’
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/293841.html
標籤:其他
