分类 GIT 下的文章

DevOps:加速软件交付和提高团队协作的关键


在现代软件开发中,DevOps已经成为一种流行的方法论。它不仅可以加速软件交付,还可以提高开发团队的协作效率。本文将介绍DevOps的基本概念、核心原则以及一些实践方法。

DevOps的基本概念

DevOps是Development(开发)和Operations(运维)的结合词。它强调开发团队和运维团队之间的紧密合作,通过自动化和持续交付的方式,实现快速、可靠的软件交付。DevOps的目标是缩短软件开发周期,提高软件质量,并增强团队的协作效率。

DevOps的核心原则

DevOps的核心原则包括持续集成、持续交付和持续部署。持续集成指的是开发人员频繁地将代码合并到共享代码库,并通过自动化的构建和测试流程,确保代码的质量和稳定性。持续交付则是指将经过测试的代码部署到生产环境的能力,以便快速响应用户需求。持续部署则更进一步,指的是将代码自动部署到生产环境,实现全自动化的软件交付。

DevOps的实践方法

为了实现DevOps的目标,团队可以采用一些实践方法。首先,使用版本控制系统来管理代码,并建立自动化的构建和测试流程。其次,采用容器化技术,如Docker,来实现应用程序的快速部署和扩展。此外,引入持续集成和持续交付工具,如Jenkins和GitLab CI,可以帮助团队实现自动化的构建、测试和部署。最后,通过监控和日志分析工具,如Prometheus和ELK Stack,可以实时监测应用程序的性能和稳定性。

DevOps作为一种流行的方法论,已经在许多组织中取得了成功。通过加速软件交付和提高团队协作效率,DevOps可以帮助组织更好地满足用户需求,并在竞争激烈的市场中保持竞争优势。然而,实施DevOps并不是一蹴而就的过程,需要团队的共同努力和持续改进。只有不断学习和适应新的技术和方法,才能实现DevOps的最大价值。

希望能够帮助你了解DevOps的基本概念、核心原则和实践方法。如果你有任何问题或需要进一步的信息,请随时提问。


GIT:在 A 项目中引用 B 项目


背景

项目中经常使用别人维护的模块,在git中使用子模块的功能能够大大提高开发效率。

使用子模块后,不必负责子模块的维护,只需要在必要的时候同步更新子模块即可。

本文主要讲解子模块相关的基础命令,详细使用请参考man page。

子模块的添加

添加子模块非常简单,命令如下:

git submodule add <url> <path>

其中,url为子模块的路径,path为该子模块存储的目录路径。

执行成功后,git status会看到项目中修改了.gitmodules,并增加了一个新文件(为刚刚添加的路径)

git diff --cached查看修改内容可以看到增加了子模块,并且新文件下为子模块的提交hash摘要

git commit提交即完成子模块的添加

子模块的使用

克隆项目后,默认子模块目录下无任何内容。需要在项目根目录执行如下命令完成子模块的下载:

git submodule init
git submodule update

或:

git submodule update --init --recursive

执行后,子模块目录下就有了源码,再执行相应的makefile即可。

子模块的更新

子模块的维护者提交了更新后,使用子模块的项目必须手动更新才能包含最新的提交。

在项目中,进入到子模块目录下,执行 git pull更新,查看git log查看相应提交。

完成后返回到项目目录,可以看到子模块有待提交的更新,使用git add,提交即可。

删除子模块

有时子模块的项目维护地址发生了变化,或者需要替换子模块,就需要删除原有的子模块。

删除子模块较复杂,步骤如下:

rm -rf 子模块目录 删除子模块目录及源码
vi .gitmodules 删除项目目录下.gitmodules文件中子模块相关条目
vi .git/config 删除配置项中子模块相关条目
rm .git/module/* 删除模块下的子模块目录,每个子模块对应一个目录,注意只删除对应的子模块目录即可
执行完成后,再执行添加子模块命令即可,如果仍然报错,执行如下:

git rm --cached 子模块名称

完成删除后,提交到仓库即可。


GIT: HEAD处于游离的状态的解决办法


在git下将代码回退到某一历史版本,修改后push提醒detaced head,即处于游离状态,使用 git branch命令(辅助git status查看提交状态)查看:
1.png

在git bash下切换到项目根路径下执行以下步骤来解决:

  1. 创建一个临时分支:
git branch tmp  bf0040f(在游离状态下提交commit会产生新的ID,如图bf0040f,应以新的ID为准)

创建分支的命令:git branch 分支名 操作的ID,此时并没有切换到tmp分支上去,但是tmp分支上的内容就跟最后提交的bf0040f一样。

  1. 切换到需要合并的分支(例如master):
git checkout master
  1. 切换了分支之后我们需要将tmp合并到检出的分支(master):
git merge tmp

最后我们只需要push对应的master分支中提交的信息。

  1. 删除刚刚创建的临时分支
git branch -d tmp

宝塔Webhook脚本实现多git项目自动部署


之前写大部分只能针对一个项目来部署,这回改成多个项目自动部署。

#!/bin/bash
echo ""
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
echo "Start"
#判断宝塔WebHook参数是否存在
if [ ! -n "$1" ];
then
          echo "param参数错误"
          echo "End"
          exit
fi
#解析参数 例abc/efg
param="$1"
obj_user=${param%\/*}
obj_name=${param#*\/}
#git项目路径
gitPath="/www/wwwroot/we7.71yunduan.top/addons/$obj_name/"
if [ ! -d "$gitPath" ]; then
        mkdir $gitPath
fi
#git 网址
gitHttp="git@gitlib.71yunduan.top:$obj_user/$obj_name.git"
 
echo "Web站点路径:$gitPath"
echo "Git项目地址:$gitHttp"
 
#判断项目路径是否存在
if [ -d "$gitPath" ]; then
        cd $gitPath
        #判断是否存在git目录
        if [ ! -d ".git" ]; then
                echo "在该目录下克隆 git"
                git clone $gitHttp gittemp
                mv gittemp/.git .
                rm -rf gittemp
        fi
        #拉取最新的项目文件
        git reset --hard origin/master
        git pull
        #设置目录权限
        chown -R www:www $gitPath
        echo "End"
        exit
else
        echo "该项目路径不存在"
        echo "End"
        exit
fi