Сборки последних ревизий RSDN@Home отныне можно брать здесь:
http://janus.dmitriid.com/
Проверяйте, все ли правильно
Техническая сторона. (для тех, кто, может быть, захочет такое же повторить)
Поддавщись на уговорыАвтор: Andir Дата: 14.08.07 Andir'а, я таки установил CruiseControl.Net, хотя вполне мог бы обойтись Питоном и планировщиком задач Windows Ну, не страшно.
Следуя иснтрукциям (слегка, кстати, устаревшим), устанавливается CruiseControl.
Таски для него такие:
<cruisecontrol>
<project name="Janus">
<sourcecontrol type="svn">
<executable>C:\Program Files\Subversion\bin\svn.exe</executable>
<workingDirectory>path_to\CI\Janus\build</workingDirectory>
<trunkUrl>svn://rsdn.ru/Janus/trunk</trunkUrl>
<autoGetSource>true</autoGetSource>
</sourcecontrol>
<tasks>
<exec>
<executable>path_to\CI\Janus\build\build-release.bat</executable>
<baseDirectory>path_to\CI\Janus\build</baseDirectory>
</exec>
<exec>
<executable>path_to\CI\Janus\build\Build\upload.bat</executable>
<baseDirectory>path_to\CI\Janus\build\Build</baseDirectory>
</exec>
</tasks>
<modificationDelaySeconds>10</modificationDelaySeconds>
</project>
</cruisecontrol>
upload.bat содержит
del Janus.zip
"C:\Program Files\7-Zip\7z.exe" a -r -tzip Janus.zip "Release"
python start.py
ну а start.py содержит код, закидывающий в базу данных и на Amazon S3 все, что надо (используются mysql-python, boto)
import string
from datetime import datetime
from boto.s3.connection import S3Connection
from boto.s3.key import Key
import MySQLdb
from subprocess import Popen,PIPE
import re
class RsdnAuto:
def __init__(self, ):
self.s3service = None
self.bucket = None
self.DBConn = None
print 'Getting S3 service'
self.s3service = S3Connection(key1, key2)
print 'Getting bucket mamut-janus-builds'
self.bucket = self.s3service.get_bucket('mamut-janus-builds');
print 'Connecting database'
self.DBConn = self.connectDatabase(host, user, password, database)
def go(self):
if self.s3service and self.bucket and self.DBConn:
rev = self.working_revision()
date_string = datetime.now().strftime('%Y%m%d-%H%M');
print 'Sending data to S3 (may take a while)'
k = Key(self.bucket)
k.key = 'janus-%s-r%s.zip' % (date_string, rev)
k.set_contents_from_filename('Janus.zip')
self.bucket.set_acl('public-read', k.key)
print 'Inserting data into database'
cursor = self.DBConn.cursor()
cursor.execute("INSERT INTO janus_builds(build_date, revision) VALUES('%s', %s)" % (date_string, rev))
cursor.close()
else:
print 'Connection to S3 or database has failed'
def connectDatabase (self, host, user, password, db):
return MySQLdb.connect (host = host,
user = user,
passwd = password,
db = db)
def working_revision(self):
revWorking = 0
try:
p = Popen("svn info path_to\\CI\\Janus\\build", shell=True,stdout=PIPE,stderr=PIPE)
out = string.join(p.stdout.readlines() )
r = re.search('^\sLast Changed Rev: (\d+)', out, re.MULTILINE)
revWorking = r.group(1)
except:
revWorking = 0
return revWorking
# --------------------------------------------------------------------
if __name__ == "__main__":
ra = RsdnAuto()
ra.go()
Как видно из working_revision, можно было действительно обойтись только Питоном, вызвав svn info второй раз для svn://rsdn.ru/janus/trunk Ну да ладно |