一键同步git库和文本中commit号到编译服务器

经常要将bmcweb的git库同步到编译服务器上,并更新服务器上的commit号,太繁琐,忍无可忍,拼凑了几个脚本,可以实现自动同步git库和更新commit号的功能,记下来,供大家参考。

主体是4个脚本,不会写大脚本,分开写,再合并为一个脚本命令一键执行,所有脚本创建后都要chmod +x *.sh授予执行权限。

脚本及以下操作都在本地的bmcweb目录中进行。

先查看本地bmcweb中.git/config文件配置如下:

[core]

        repositoryformatversion = 0

        filemode = true

        bare = false

        logallrefupdates = true

[remote "origin"]

        url = git@192.168.x.x:openbmc-v28/github.com.openbmc.bmcweb.git

        fetch = +refs/heads/*:refs/remotes/origin/*

[remote "v28"]

        url = kunlun@192.168.x.18:/home/kunlun/rxsunSource/openbmc-v28/build/downloads/git2/github.com.openbmc.bmcweb.git/

        fetch = +refs/heads/*:refs/remotes/origin/*

[branch "master"]

        remote = origin

        merge = refs/heads/master

[credential]

        helper = store
```

其中的v28远程库对应着编译服务器,origin对应着gitlab开发服务器,这里不用。


第一个脚本01-git-push.sh 是将本地的git库push到服务器上,push的目的地v28,-f选项是强制提交,bios是v28远程库所在机器的用户kunlun的口令

###01-git-push.sh

#!/usr/bin/expect

spawn git push v28 master -f

expect "password"

send "bios\r"

expect eof

第二个脚本02-scp-from-18.sh 是将v28服务器上的bmcweb_git.bb复制到本地bmcweb目录下

###02-scp-from-18.sh

#!/usr/bin/expect

spawn scp kunlun@192.168.x.18:/home/kunlun/rxsunSource/openbmc-v28/meta-phosphor/recipes-phosphor/interfaces/bmcweb_git.bb .

expect "password"

send "bios\r"

expect eof

第三个脚本03-sed-commitId.sh 是将bmcweb_git.bb中commit号替换为最新的commit号,因为sed不能保存,所以重定向到临时文件再重命名

###03-sed-commitId.sh

#!/bin/bash

newCommitId=`git rev-parse HEAD`

originCommitId=`cat bmcweb_git.bb | grep SRCREV | gawk -F= '{ print $2}' | sed 's/"//g'`

echo change $originCommitId to  $newCommitId

sed  "s/$originCommitId/$newCommitId/g"  bmcweb_git.bb > bmcweb_git.bb.tmp

mv bmcweb_git.bb.tmp bmcweb_git.bb

第四个脚本04-scp-to-18.sh 是将改后的bmcweb_git.bb拷贝到远程服务器上,可以覆盖目的地的同名文件

###04-scp-to-18.sh

#!/usr/bin/expect

spawn scp   bmcweb_git.bb  kunlun@192.168.x.18:/home/kunlun/rxsunSource/openbmc-v28/meta-phosphor/recipes-phosphor/interfaces/

expect "password"

send "bios\r"

expect eof

将以上四个脚本的执行命令写到一个文件里,命名为a.sh ,记得执行chmod +x a.sh

./01-git-push.sh && ./02-scp-from-18.sh && ./03-sed-commitId.sh && ./04-scp-to-18.sh

执行时只要./a.sh就可以完成以前的很多步操作。


使用注意事项:

1.配置本地的.git/config文件,添加编译服务器的目录为远程库;

2.将01-git-push.sh中的“spawn git push v28 master -f”的“v28”改自己的远程库名称;

3.在02-scp-from-18.sh、03-sed-commitId.sh和04-scp-to-18.sh中bb文件的位置和名称,要替换成自己工作文件的位置和名称;

4.将所有send后面的bios替换为自己远程库用户的口令;

5.我的有些服务器可接受客户端公钥文件内容到authorized_keys中,免口令scp,也可以先自己服务器上尝试一下;

6.本地机器上需要有expect包,用apt-get install expect安装。

ruixia,sun wechat
生活相关,请扫描wechat帐号获取更多精彩内容。。。。。。
0%