一、安装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() # 把额外的 删除,得到版本
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)