概要
禅道服务器一台,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>