经常要将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安装。