基于git+gitlab+jenkins实现python项目自动化发布

虚拟机准备:
在这里插入图片描述

软件包准备:
在这里插入图片描述
软件包下载地址:
链接:https://pan.baidu.com/s/1_oWtoLSxHxHqSao6Buu4PQ?pwd=1111
提取码:1111
–来自百度网盘超级会员V1的分享
在这里插入图片描述

1.git部署

git分布式版本控制系统,也就是开发会去⽤,进⾏代码管理,当然运维也会进⾏配置⽂件管理等,git是个神器。

1.git安装
windows:https://git-scm.com/download/win
Centos:yum install git -y

2.git⾝份设置
既然已经在系统上安装了 Git,你会想要做⼏件事来定制你的 Git 环境。
每台计算机上只需要配置⼀次,程序升级时会保留配置信息。 你可以在
任何时候再次通过运⾏命令来修改它们。

git config --global user.name "xuyuhan"
git config --global user.email "xuyuhan@qq.com"
git config --global color.ui true

git config --list    #查看git当前身份设置

3.模拟开发,编写如flask代码,⼀个python主流的web框架

在想要创建代码的位置右键选择 git bash here

cat > my_flask.py << EOF
from flask import Flask
app = Flask(__name__)

@app.route('/')
def index():
 return '<h1>我左手一式太极拳,右手一剑刺身前,扫腿这招叫清雪,破轻功飞燕~</h1>'
if __name__ == '__main__':
 app.run(host = '0.0.0.0', port = 7777, debug = True )

EOF



在这里插入图片描述

4.删除文件

1、如果只想从暂存区删除文件,本地工作区不做出改变,可以:

git rm --cached <file>

2、被提交到仓库的某个文件需要删除,可以使用 git rm 命令:

git rm <file>  # 从工作区和暂存区删除某个文件

git commit -m "" # 再次提交到仓库

3、如果在工作区不小心删错了某个文件,可以用 git checkout 将暂存区的文件覆盖工作区的文件,从而把误删的文件恢复:

git checkout -- <file>

4、用 git rm 删除文件,同时还会将这个删除操作记录下来;

用 rm 删除文件,删除的仅仅是本地物理文件,没有将其从 git 的记录中剔除。

5、git add 和 git rm 有相似的功能,

但 git add 仅能记录添加、改动的动作,删除的动作需靠 git rm 来完成。

在这里插入图片描述

 git status    #git status命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。git status不显示已经commit到项目历史中去的信息。看项目历史的信息要使用git log .

在这里插入图片描述

2、代码仓库gitlab部署

1.安装

[root@release opt]# yum localinstall gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm

在这里插入图片描述

2、gitlab配置、启停相关命令

gitlab启停相关命令:

查看gitlab相关命令: gitlab-ctl --help
启动:gitlab-ctl start
重启:gitlab-ctl restart  #每次修改配置文件后需要重启服务,从而使得配置生效
停止:gitlab-ctl stop

修改gitlab url

[root@release opt]# vim /etc/gitlab/gitlab.rb

external_url 'http://192.168.230.111'

在这里插入图片描述

gitlab-ctl reconfigure    #会比较久

在这里插入图片描述

gitlab-ctl start

在这里插入图片描述

gitlab-ctl sttatus

在这里插入图片描述

3、登录gitlab后台

设置新密码
在这里插入图片描述
默认账号为:root
在这里插入图片描述
在这里插入图片描述
切换简体中文界面:
在这里插入图片描述

4、创建项目

在这里插入图片描述
5、
在这里插入图片描述
在这里插入图片描述

5、error: remote origin already exists.报错解决

如果你clone下来一个别人的仓库,在此基础上完成你的代码,推送到自己的仓库可能遇到如下问题:
error: remote origin already exists.表示远程仓库已存在。
因此你要进行以下操作:
1、先输入git remote rm origin 删除关联的origin的远程库
2、关联自己的仓库 git remote add origin https://gitee.com/xxxxxx.git
3、最后git push origin master,这样就推送到自己的仓库了。

正确添加以后:

git remmote -v  #查看版本

在这里插入图片描述
在这里插入图片描述

 cat ~/.ssh/id_rsa.pub    #查看本地公钥,复制

在这里插入图片描述
在这里插入图片描述
基于git协议复制
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、interactive rebase in progress; onto 44f0093

报错解决

出错原因分析:
进行提交前,需提前拉取远程仓库的代码,拉取之后,需要重新add、commit,避免仓库的数据被修改,但是再次提交之后会出现上图的错误;

原因:
是因为你现在正在编辑的提交将要覆盖在“11ddele commited”,之前使用过git rebase执行过代码的覆盖;

解决方法:

git rebase --continue   #使用该命令继续代码的提交

使用上述代码后,需要重新提交一下,解决代码冲突问题,直至没有rebase提示即正常进行:

git push origin master

在这里插入图片描述

7、error: src refspec mastaer does not match any报错解决

error: failed to push some refs to ‘192.168.230.111:root/my_flask.git’

在这里插入图片描述
不太明白,这里我是把之前提交的代码名字换了名字,提交时出现该报错,把名字改回去就好了
在这里插入图片描述

在这里插入图片描述

3、jenkins部署

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

1、软件包准备:

在这里插入图片描述

2、安装jdk

因为jenkins是JAVA写的,所以需要安装jdk依赖

[root@release opt]# rpm -ivh jdk-8u181-linux-x64.rpm

在这里插入图片描述

3、安装jenkins

既然有了JAVA环境,就可以安装jenkins了

[root@release opt]# yum localinstall jenkins-2.190.1-1.1.noarch.rpm    #或者用rpm -ivh 安装都可以

在这里插入图片描述

[root@release opt]# vim /etc/sysconfig/jenkins   #修改运行用户以及jenkins运行端口

在这里插入图片描述

[root@release opt]# systemctl start jenkins    #启动jenkins

[root@release opt]# yum install net-tools -y  

[root@release opt]# netstat -tunlp | grep 18080    #查看18080端口

在这里插入图片描述

打开网页  http://192.168.230.111:18080/

[root@release opt]# cat /var/lib/jenkins/secrets/initialAdminPassword
6f1827645cda468092ebac236ff29aa9

在这里插入图片描述
在这里插入图片描述
先改个密码
在这里插入图片描述
先更新下系统时间

[root@release opt]# yum install ntpdate

[root@release opt]# ntpdate -u ntp.aliyun.com


4、安装jenkins插件

[root@release opt]# tar -zxvf jenkins_plugins.tar.gz

在这里插入图片描述
在这里插入图片描述

[root@release opt]# cd plugins/     

[root@release plugins]# mv ./* /var/lib/jenkins/plugins   #移动解压出来的插件到jenkins插件目录下

[root@release plugins]# systemctl restart jenkins   重启jenkins

包含汉化插件:
在这里插入图片描述

5、搭建逻辑图:

在这里插入图片描述

6、创建jenkins任务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

yum install git -y

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里引用下老师的图哈,ip地址请忽略

在这里插入图片描述
在这里插入图片描述

7、给两台web机器做免密登录

[root@release ~]# yum install sshpass -y    #在jenkins机子上安装免密工具
[root@release opt]# ssh-keygen    #生成公钥

在这里插入图片描述

编写免密脚本

for ip in 112 113

rm -rf ~/.ssh/id_rsa*
ssh-keygen -f ~/.ssh/id_rsa -P "" > /dev/null 2>&1

do
 sshpass -p 'xuyuhan' ssh-copy-id 192.168.230.${ip} -o StrictHostKeyChecking=no
> /tmp/create_ssh.log 2>&1
 echo "正在验证免密登录结果中...."
 echo "远程获取到主机名: $(ssh 192.168.230.${ip} hostname)"
done

#非交互式分发公钥命令需要用sshpass指定密码,通过-o StrictHostKeyChecking=no   #跳过ssh连接确认信息

很顺利啊兄弟们,测试登录112这台机子免密了~
在这里插入图片描述
脚本失败可手动免密:

ssh-copy-id root@免密机子ip

下边的操作逻辑
在这里插入图片描述

8、编写shell构建脚本

在这里插入图片描述

for i in 112 113

do


#本机拷贝代码到远程机

cd /var/lib/jenkins/workspace/flask_python && scp my_flask.py  root@192.168.230.$i:/opt/
 

#到远程机安装Python运行依赖 

ssh root@192.168.230.$i "yum install python3 python3-devel python3-pip -y >/dev/null 2>&1 

pip3 install flask >/dev/null 2>&1 "


#到远程机先杀掉Python进程,然后后台运⾏代码


ssh root@192.168.230.$i "pkill python3

nohup /usr/bin/python3 /opt/my_flask.py >/dev/null 2>&1 & "


done

翻车,构建失败,构架过程可查看控制台输出,可以拿shell脚本到目标机器是手动测试,排除脚本问题~
在这里插入图片描述
在这里插入图片描述
脚本格式要注意下哦兄弟们,基础不扎实呀,总算成功了~
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

9、尝试改下源代码,重新构建一次

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10、结合ansible查询机器状况

我这里给机子装了ansible,111这台机子做主控端,远程查看两台web机子的7777端口(源代码里对外暴露的端口)是否起来~

[root@release workspace]# ansible xuyuhan -m shell -a 'netstat -tunlp | grep 7777'

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

11、升级gitlab⾃动化构建webhook

1、jenkins添加触发器

在这里插入图片描述

复制下来
http://192.168.230.111:18080/project/flask_python

e12e87f4a10c21574be56b158adef32b

2、gitlab设置push事件钩⼦

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、模拟开发推送代码

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

完成git + gitlab + jenkins 实现Python项目自动化发布

k8s持续集成架构图

在这里插入图片描述


版权声明:本文为weixin_48609917原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。