概要
禅道服务器一台,Git服务器一台。禅道服务器集成Git、关联Git服务器的提交日志。
方法为:在禅道上也装一个git服务器,gitServer把代码 push 过来,两台服务器都同时有服务端和客户端。
下文中 zentaoServer 代表禅道服务器,gitServer 代表 git server。
zentaoServer 安装 git server
生成 ssh-key
ssh-keygen cat id_rsa.pub >> ~/.ssh/authorized_keys scp -P 22 id_rsa root@gitServer:/home/git/ # gitServer 用这个私钥 push 过来代码
添加 git 登录权限
sudo adduser -s /usr/bin/git-shell git
初始化 git 库
cd /data/git/ mkdir project.git cd project.git git --bare init sudo chown git:git /data/git -R
最终接收git提交的库的地址为:
ssh://git@zentaoServer:22/data/git/project.git
将 zentaoServer 上的库 clone 到禅道的目录中
cd /data/web/zentaoServer mkdir git && cd git git clone /data/git/project.git # 把 gitServer push 过来的代码 pull 出来备用
启用禅道的Git集成功能
编辑 /data/web/zentaoServer/public_html/module/git/config.php,修改为:
// ... $config->git->client = '/usr/bin/git'; $i = 1; $config->git->repos[$i]['path'] = '/data/web/zentaoServer/git/project'; $config->git->repos[$i]['encoding'] = 'utf-8'; // ...
编辑 /data/web/zentaoServer/public_html/bin/syncgit.sh,内容如下:
#!/bin/bash echo '' echo '>>>> Start: '`date` cd /data/web/zentaoServer/git/project git pull /data/web/zentaoServer/public_html/bin/ztcli 'http://zentaoServer/index.php?m=git&f=run' echo '<<<< End: '`date`
禅道集成git的官方方法在这里,如果找不到 syncgit.sh 可以去看看。
定时从 git 库中取出提交日志给禅道
# crontab -e # 分 时 日 月 周 用户 命令 */5 * * * * /data/web/zentaoServer/public_html/bin/syncgit.sh >> /var/log/zentao_git.log 2>&1
gitServer push 代码给 zentaoServer
配置 push 给 zentaoServer 的权限
cd /home/git mv id_rsa .ssh/ # 配置 zentaoServer 时 scp 过来的有私钥
更新并测试待提交的本地库
yum install git -y mkdir /data/git4zentao cd /data/git4zentao git clone http://gitServer/project.git git remote add zentao ssh://git@zentaoServer:22/data/git/project.git git push zentao
编辑 /data/git4zentao/push2zentao.sh,内容如下:
:: 这是给 windows 弄的,linux 需要根据逻辑自行转换编程语言 @echo off :: 禅道集成git需要从git库里取日志 setlocal set workDir=D:\git4zentao cd /d %workDir%\ycdj_pc_front echo ^>^>^>^> Start: %date% %time% >> %workDir%\push2zentao.log 2>&1 git fetch origin >> %workDir%\push2zentao.log 2>&1 git checkout master >> %workDir%\push2zentao.log 2>&1 git branch -D develop >> %workDir%\push2zentao.log 2>&1 git checkout -b develop origin/develop >> %workDir%\push2zentao.log 2>&1 git pull >> %workDir%\push2zentao.log 2>&1 echo. >> %workDir%\push2zentao.log 2>&1 git push zentao -f >> %workDir%\push2zentao.log 2>&1 echo. >> %workDir%\push2zentao.log 2>&1 echo %date% %time% >> %workDir%\push2zentao.log 2>&1 echo ^<^<^<^< End: %date% %time% >> %workDir%\push2zentao.log 2>&1 echo. >> %workDir%\push2zentao.log 2>&1 exit
添加定时任务
通过 crontab 或 计划任务,每5分钟执行一次 push2zentao.sh
— 完 —
gitServer 上导出的 windows 计划任务“PushProjectToZentao”在这里:
<?xml version="1.0" encoding="UTF-16"?>
<Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">
<RegistrationInfo>
<Date>2019-01-26T11:31:23.1146774</Date>
<Author>VM-TFS\Administrator</Author>
<Description>禅道集成git需要从git库里取日志。
push2zentao.bat 负责同步最新库后push给禅道</Description>
<URI>\PushYCDJToZentao</URI>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<Repetition>
<Interval>PT5M</Interval>
<Duration>P1D</Duration>
<StopAtDurationEnd>true</StopAtDurationEnd>
</Repetition>
<StartBoundary>2019-01-26T00:00:00</StartBoundary>
<Enabled>true</Enabled>
<ScheduleByDay>
<DaysInterval>1</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id="Author">
<UserId>S-1-5-21-2133515309-2052718937-1146641456-500</UserId>
<LogonType>S4U</LogonType>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>
<AllowHardTerminate>true</AllowHardTerminate>
<StartWhenAvailable>false</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>true</StopOnIdleEnd>
<RestartOnIdle>false</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>true</AllowStartOnDemand>
<Enabled>true</Enabled>
<Hidden>false</Hidden>
<RunOnlyIfIdle>false</RunOnlyIfIdle>
<WakeToRun>false</WakeToRun>
<ExecutionTimeLimit>PT0S</ExecutionTimeLimit>
<Priority>7</Priority>
</Settings>
<Actions Context="Author">
<Exec>
<Command>D:\git4zentao\push2zentao.bat</Command>
</Exec>
</Actions>
</Task>