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


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

    软件包准备:
    在这里插入图片描述

    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当前身份设置
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

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

    cat > my_flask.py << EOF
    from flask import Flask
    app = Flask(__name__)
    
    @app.route('/')
    def index():
     return '

    我左手一式太极拳,右手一剑刺身前,扫腿这招叫清雪,破轻功飞燕~

    '
    if __name__ == '__main__': app.run(host = '0.0.0.0', port = 7777, debug = True ) EOF
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    4.删除文件

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

    git rm --cached <file>
    
    • 1

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

    git rm <file>  # 从工作区和暂存区删除某个文件
    
    git commit -m "" # 再次提交到仓库
    
    • 1
    • 2
    • 3

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

    git checkout -- <file>
    
    • 1

    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 .
    
    • 1

    在这里插入图片描述

    2、代码仓库gitlab部署

    1.安装

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

    在这里插入图片描述

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

    gitlab启停相关命令:

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

    修改gitlab url

    [root@release opt]# vim /etc/gitlab/gitlab.rb
    
    external_url 'http://192.168.230.111'
    
    • 1
    • 2
    • 3

    在这里插入图片描述

    gitlab-ctl reconfigure    #会比较久
    
    • 1

    在这里插入图片描述

    gitlab-ctl start
    
    • 1

    在这里插入图片描述

    gitlab-ctl sttatus
    
    • 1

    在这里插入图片描述

    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  #查看版本
    
    • 1

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

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

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

    3、jenkins部署

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

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

    1、软件包准备:

    在这里插入图片描述

    2、安装jdk

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

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

    在这里插入图片描述

    3、安装jenkins

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

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

    在这里插入图片描述

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

    在这里插入图片描述

    [root@release opt]# systemctl start jenkins    #启动jenkins
    
    [root@release opt]# yum install net-tools -y  
    
    [root@release opt]# netstat -tunlp | grep 18080    #查看18080端口
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    打开网页  http://192.168.230.111:18080/
    
    [root@release opt]# cat /var/lib/jenkins/secrets/initialAdminPassword
    6f1827645cda468092ebac236ff29aa9
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    [root@release opt]# yum install ntpdate
    
    [root@release opt]# ntpdate -u ntp.aliyun.com
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    4、安装jenkins插件

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

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

    [root@release opt]# cd plugins/     
    
    [root@release plugins]# mv ./* /var/lib/jenkins/plugins   #移动解压出来的插件到jenkins插件目录下
    
    [root@release plugins]# systemctl restart jenkins   重启jenkins
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

    5、搭建逻辑图:

    在这里插入图片描述

    6、创建jenkins任务

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

    yum install git -y
    
    • 1

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

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

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

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

    在这里插入图片描述

    编写免密脚本

    for ip in 112 113
    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连接确认信息
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

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

    ssh-copy-id root@免密机子ip
    
    
    • 1
    • 2

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

    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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

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

    在这里插入图片描述

    在这里插入图片描述

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

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

    10、结合ansible查询机器状况

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

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

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    11、升级gitlab⾃动化构建webhook

    1、jenkins添加触发器

    在这里插入图片描述

    复制下来
    http://192.168.230.111:18080/project/flask_python
    
    e12e87f4a10c21574be56b158adef32b
    
    • 1
    • 2
    • 3
    • 4

    2、gitlab设置push事件钩⼦

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

    3、模拟开发推送代码

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

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

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

    k8s持续集成架构图

    在这里插入图片描述

  • 相关阅读:
    ASP.NET超市便利店在线购物商城源码,针对周边配送系统
    uniapp快速入门系列(3)- CSS技巧与布局
    Python 爬取 "王者荣耀.英雄壁纸" 过程中的矛和盾
    微服务技术发展
    leetcode897. 递增顺序搜索树(java)
    Array and Set work process
    面向过程 VS 面向对象
    如何优雅的在Column中嵌入横向滚动的 ListView
    如何在填报场景中使用数据绑定获取数据源
    何为链表、链表示例以及翻转链表
  • 原文地址:https://blog.csdn.net/weixin_48609917/article/details/126203767