一、安裝Python(我裝的python3.6.4)
(一)裝包、解tar包 編譯 安裝
yum install -y gcc gcc-c++ zlib-devel openssl-devel readline-devel libffi-devel sqlite-devel tcl-devel tk-devel
(二)配置pip(國內鏡像 我使用的是豆瓣的)
mkdir ~/.pip
vim ~/.pip/pip.conf
[global]
index-url = http://pypi.douban.com/simple
[install]
trusted-host=pypi.douban.com
二、安裝jenkins
下載地址:wget https://pkg.jenkins.io/redhat-stable/jenkins-2.204.1-1.1.noarch.rpm
(一)安裝 rpm -iv jenkins-2.204.1-1.1.noarch.rpm 啟動
(二)Jenkins 默認端口為8080 web打開 http://ip:8080
1.

復制上面的目錄查看初試密碼 cat /var/lib/jenkins/secrets/initialAdminPassword
2.選擇插件安裝

3.選擇無 不安裝任何插件 點擊安裝 Jenkins的 初試插件地址是官方的 下載很慢

4.選擇admin賬戶繼續

5.保存完成 。開始使用jenkins,更改密碼可以點擊右上方admin -> 設置 -> 進行密碼設置
6.



修改 下載站點為清華站點(也可以更改為其他的站點) https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json 點擊提交
7.下載插件
(1)ssh
(2)git Parameter
(3)Localization: Chinese (Simplified)
點擊安裝,點擊下方小正方形

8. 返回首界面開始構建任務,給任務起一個名字,選擇自由風格的項目

9. 選擇 參數化構建過程,選擇git參數

10.使用http的協議 如果是ssh的 需要密鑰 下面$web 就是上面git 參數的名字 構建的名字 會以傳參的形式 創建
目錄名字比如( tags:1.0 名字是web-1.0)

11.構建使用shell 執行下面的shell語句
deploy_dir = /var/www/html/deploy/pkgs #定義變量 cp -r web-$web $deploy_dir #拷貝軟件目錄到web目錄 cd $deploy_dir #切換到web目錄 rm -rf web-$web /.git #刪除版本庫文件 tar czf web-$web.tar.gz web-$web #打包壓縮 rm -rf web-$web #刪除軟件目錄,只保留壓縮包 md5sum web-$web.tar.gz | awk '{print $1}' > web-$web.tar.gz.md5 #計算壓縮包的md5值 #生成last_ver和live_ver文件 cd.. [ -f live_ver ] && cat live_ver > last_ver echo $webver > live_ver
12.點擊build with Parameters

二、安裝gitlab (我用的是 docker 鏡像)
(一)安裝docker
導入鏡像。運行 -p 映射端口 -v 映射目錄
docker run -d -h gitlab --name gitlab -p 443:443 -p 80:80 -p 22:22 --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v/srv/gitlab/data:/var/opt/gitlab 鏡像
(二)進入之后 點擊左上的扳手 創建項目 創建用戶 創建組
每次上傳代碼的時候都需要 密碼 可以點擊右上方的 用戶頭像設置 有ssh密鑰
創建密鑰 ssh-keygen -f /root/.ssh/id_ras -N ''
把/root/.ssh/id_ras.pub 文件中的 內容全部復制在 ssh密鑰框中那
(1)創建組
(2)創建項目
為組創建項目 下面又運行 gitlab的 命令 可根據自己的情況運行下面命令
(3)創建用戶

在上傳代碼的時候 記得吧 tags 一起上傳 就是最后這么命令 git push -u origin --tags
(三)在服務器上編寫代碼
import os
import requests
import hashlib
import tarfile
def has_new_ver(ver_url, ver_fname):
# '有新版本返回True,否則返回False'
# 如果本地沒有版本文件,則為True
if not os.path.isfile(ver_fname):
return True
# 取出本地版本
with open(ver_fname) as fobj:
local_ver = fobj.read()
# 本地版本與網上版本比較,如果不一致返回True
r = requests.get(ver_url)
if local_ver != r.text:
return True
else:
return False
def file_ok(md5_url, fname):
# '如果文件已損壞返回False,否則返回True'
# 計算本地文件的md5值
m = hashlib.md5()
with open(fname, 'rb') as fobj:
while 1:
data = fobj.read(4096)
if not data:
break
m.update(data)
# 取出網上的md5值,進行比較
r = requests.get(md5_url)
if m.hexdigest() == r.text.strip():
return True
else:
return False
def deploy(app_fname):
# '部署軟件'
deploy_dir = '/var/www/deploy'
dest = '/var/www/html/nsd1906'
# 解壓
tar = tarfile.open(app_fname)
tar.extractall(path=deploy_dir)
tar.close()
# 取出軟件目錄名
app_dir = app_fname.split('/')[-1]
app_dir = app_dir.replace('.tar.gz', '') #把 .tar.gz 變為空值
app_dir = os.path.join(deploy_dir, app_dir)
# 如果目標鏈接文件已存在,先刪除
if os.path.exists(dest):
os.remove(dest)
# 創建軟鏈接
os.symlink(app_dir, dest)
if __name__ == '__main__':
# 判斷是否有新版本,沒有則退出
ver_url = 'http://192.168.4.6/deploy/live_ver'
ver_fname = '/var/www/deploy/live_ver'
if not has_new_ver(ver_url, ver_fname):
print('未發現新版本。')
exit(1)
# 下載新版本軟件
r = requests.get(ver_url)
ver = r.text.strip() # 把額外的\n刪除,得到版本
app_url = 'http://192.168.4.6/deploy/pkgs/web-%s.tar.gz' % ver #ip為web服務器的ip
down_dir = '/var/www/download'
wget.download(app_url, down_dir)
# 校驗。如果下載的文件已損壞,刪除它
md5_url = app_url + '.md5'
app_fname = app_url.split('/')[-1]
app_fname = os.path.join(down_dir, app_fname)
if not file_ok(md5_url, app_fname):
os.remove(app_fname)
print('文件已損壞。')
exit(2)
# 部署軟件
deploy(app_fname)
# 更新live_ver文件的版本
if os.path.exists(ver_fname):
os.remove(ver_fname)
wget.download(ver_url, ver_fname)
