Сборки последних ревизий 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 Ну да ладно
Автор: Mamut    Оценить