1.安裝
需先下載java環(huán)境
# 拉取庫的配置到本地對應文件
0、wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
1、wget https://pkg.jenkins.io/redhat-stable/jenkins-2.190.1-1.1.noarch.rpm
2、yum install jenkins-2.190.1-1.1.noarch.rpm -y
# 修改配置文件,用戶改成了root,端口8020
3、vim /etc/sysconfig/jenkins
JENKINS_USER="root"
JENKINS_PORT="8020"
4、啟動
systemctl start jenkins
systemctl enable jenkins
5.查看狀態(tài)
[root@iZuf6fy2kg5mx828krkhcuZ qqc_data]# systemctl status jenkins
● jenkins.service - LSB: Jenkins Automation Server
Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled)
Active: active (running) since Sat 2020-10-17 16:24:29 CST; 16s ago
Docs: man:systemd-sysv-generator(8)
CGroup: /system.slice/jenkins.service
└─22749 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar ...
Oct 17 16:24:27 iZuf6fy2kg5mx828krkhcuZ systemd[1]: Starting LSB: Jenkins Automation Server...
Oct 17 16:24:27 iZuf6fy2kg5mx828krkhcuZ runuser[22734]: pam_unix(runuser:session): session opened for user root by (uid=0)
Oct 17 16:24:29 iZuf6fy2kg5mx828krkhcuZ systemd[1]: Started LSB: Jenkins Automation Server.
Oct 17 16:24:29 iZuf6fy2kg5mx828krkhcuZ jenkins[22729]: Starting Jenkins [ OK ]
[root@iZuf6fy2kg5mx828krkhcuZ qqc_data]# ps -aux | grep 8020
root 22749 32.0 14.6 2351276 148728 ? Ssl 16:24 0:12 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8020 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20
root 22907 0.0 0.0 112712 964 pts/2 S+ 16:25 0:00 grep --color=auto 8020
6、訪問
http://www.qqc-home.com:8020/
如下圖顯示即已安裝成功
# 管理員登錄密碼位置:
vim /var/lib/jenkins/secrets/initialAdminPassword
登錄名:admin
![image]()
2、使用
2.1 啰嗦幾句
ps: 配置了半天也沒搞清楚怎么操作,各種選項操作太復雜了;
它的基本流程:手動在服務器執(zhí)行發(fā)布任務命令的過程,進行封裝后,可視化頁面進行一鍵批量調用;
本質上就是干了這么一件事,附加了一些用戶權限,發(fā)布日志記,異常發(fā)郵件等相關功能;
有興趣的同學去jenkins官網(wǎng)(https://www.jenkins.io/zh/doc/)學一下,我暫時學不會啊
2.2 自己實現(xiàn)簡易版發(fā)布接口
目標:在本地起一個flask 服務,寫一個發(fā)布接口
(1) 建一個表,存發(fā)布日志信息,基本信息如:用戶id,發(fā)布描述信息,服務器返回的日志等
(2)連接服務器,執(zhí)行發(fā)布命令,日志信息入庫,返回
邏輯代碼:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2020/12/10 15:28
# @Author : qqc
# @File : release_tool.py
# @Software: PyCharm
import paramiko
import datetime
import json
from utils.connect_mysql import *
class ReleaseTools(object):
def __init__(self, user_id, params):
self.user_id = user_id
self.params = params
@property
def ssh_connect(self):
""" 連接服務器 """
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 通過ssh 私鑰登錄
ssh.connect(hostname='47.102.138.171', username='root', key_filename=r'C:\Users\admin\.ssh\id_rsa')
return ssh
@property
def command(self):
""" 發(fā)布的命令 """
cmds = " cd /object/test_obj/django_test ; " \
"git pull ; " \
"supervisorctl restart test-django:test-django-uwsgi "
return cmds
def create_release_data(self, info_data):
""" 記錄發(fā)布日志 """
sql_str = """
INSERT INTO obj_release
(user_id, params_data, out_data,create_time)
VALUES
({0}, '{1}','{2}', NOW());
""".format(self.user_id, self.params, info_data)
cursor_sql(sql_str)
def obj_release(self):
""" 執(zhí)行入口 """
stdin, stdout, stderr = self.ssh_connect.exec_command(self.command)
out = stdout.readlines()
err = stderr.readlines()
info_data = json.dumps({"out": out, "err": err}, ensure_ascii=False)
self.create_release_data(info_data)
self.ssh_connect.close()
return {"user_id": self.user_id, "params_data": self.params, "out": out, "err": err,
"create_time": datetime.datetime.now()}
調用路由(參數(shù)根據(jù)實際業(yè)務需求調節(jié)):
from flask import Flask, request, jsonify
from utils.release_tool import *
app = Flask(__name__)
@app.route('/get/release')
def release_objects():
user_id = request.args.get("user_id", 0)
params = request.args.get("params", '')
release = ReleaseTools(user_id, params)
res = release.obj_release()
return jsonify(res)
3. 測試
![image]()
![image]()
問題:
1、多臺服務器發(fā)布
2、用戶使用權限配置
3、實際生產過程中,通過跳板機連接到生產服務器;
4、可視化頁面操作
ps:優(yōu)化是沒完沒了的過程,有興趣的伙伴們來完善起來了啊