lunes, 19 de agosto de 2013
miércoles, 24 de julio de 2013
NHibernate Atributo Cascada (cascade):
Las Entidades poseen asociaciones con otros objetos, esto puede ser una asociación a un solo elemento (many-to-one) o una asociación a una colección (one-to-many, many-to-any).
Sin embargo cualquiera que sea el caso nosotros somos capaces de indicarle a NHibernate como debe recorrer automáticamente las asociaciones de la entidad y actuar de acuerdo a como se le ha indicado a través del atributo cascada. Por ejemplo si tenemos un objeto padre y este objeto a su vez contiene una colección de objetos hijos asociados a él, cada vez que creamos cada objeto hijo con el atributo de "cascade = save/update" le estamos dando instrucciones a NHibernate de añadir el objeto hijo a dicha colección asociándolo con el padre a través de la llave foránea sin necesidad de instrucciones explicitas de nuestra parte.
A continuación se explican los valores que puede tomar este atributo y su funcionalidad.
- none = no realizar ninguna acción en cascada, dejar que el usuario lo maneje por si solo.
- save-update = cuando un objeto se guarda/actualiza, revisa las asociaciones de ese objeto con otros y guarda/actualiza cualquier objeto que lo requiera.
- delete = cuando el objeto es eliminado se eliminan todos los objetos que están asociados a el.
- all = aplica para todos es decir save-update-delete (revisa las asociaciones que posee el objeto y guarda-actualiza-elimina todos los objetos que encuentre).
jueves, 23 de mayo de 2013
Lanzar Build de Jenkis con Hook de Subversion Edge
Jenkins es un servidor de integración continúa [1] y Subversion Edge [2] es un sistema de control de versiones (SVC) [3] . Ambos pueden trabajar juntos utilizando las funcionalidades API de acceso remoto [4].
Cuando se hace un commit en el SVC es recomendable ejecutar inmediatamente la construcción y las pruebas de las librerías en cuestión. Ciertamente es posible configurar Jenkins para que revise periódicamente si ha habido cambios, pero ¿Cuál es el intervalo de tiempo recomendable para esto?, depende... depende de al frecuencia con la cual el equipo de trabajo hace commits. Pero, y si suceden varios commits antes que se construyan las librerías, esto no permite detectar cualquier error de compilación o ejecución de pruebas a tiempo.
Por suerte, es posible utilizar los Hooks de Subversión [5] en especial post-commit, este se encuentra en la información del repositorio:
Seleccionamos el hook en cuestión y presionamos la opción editar y le agregamos este código:
set REPOS=%1
set TXN=%2
python C:\csvn\bin\call_jenkis.py <nombre del job en jenkins> <token del job> <nombre de usuario> <token del usuario> 1>&2
exit 0
Inicialmente los hooks tienen la extensión tmpl, debemos cambiar esa extensión a .bat y así subversión no lo ignoré y lo ejecute. Si este hook devuelve 1 (exit 1) subversion interpreta que hubo un error, si devuelve 0 (exit 0) la ejecución se realizó correctamente.
En la configuración del job en jenkins obtenemos estos datos:
Además también en jenkis obtenemos el nombre del usuario y el token del usuario:
Y ahora solo queda programar call_jenkins.py
# RestFul Jenkins Client
# autor: Honard Bravo
import urllib2
import base64
import sys
"""
Jenkins usa autenticacionn basica (basic authentication), sin embargo en lugar del password debe enviarse
un token (distinto al token generado por el job), este token se utiliza en lugar del pasword. El token es dado por jenkins en
configuración del usuario.
"""
if __name__ == "__main__":
if len(sys.argv) < 5:
print 'Debe especificarse los siguientes parametros (en este orden): job job_token username apiToken'
exit(1)
job = sys.argv[1]
job_token= sys.argv[2]
username = sys.argv[3]
apiToken = sys.argv[4]
base64string = base64.encodestring('%s:%s' % (username,apiToken))[:-1]
auth_header = 'Basic %s' % base64string
site= 'http://localhost/jenkins/job/'+job+'/build?token='+job_token
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive',
'Authorization': auth_header}
req = urllib2.Request(site, headers=hdr)
try:
response = urllib2.urlopen(req)
print 'Solicitud de build generada con exito'
except urllib2.HTTPError, e:
print 'Error: '
print e.fp.read()
print e
print str(e.headers)
exit(1)
exit(0)
Colocar el archivo en C:\csvn\bin.
Y listo!
[1] http://www.martinfowler.com/articles/continuousIntegration.html
[2] http://www.collab.net/products/subversion
[3] http://es.wikipedia.org/wiki/Control_de_versiones
[4] https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API
[5] http://svnbook.red-bean.com/nightly/en/svn.reposadmin.create.html
Cuando se hace un commit en el SVC es recomendable ejecutar inmediatamente la construcción y las pruebas de las librerías en cuestión. Ciertamente es posible configurar Jenkins para que revise periódicamente si ha habido cambios, pero ¿Cuál es el intervalo de tiempo recomendable para esto?, depende... depende de al frecuencia con la cual el equipo de trabajo hace commits. Pero, y si suceden varios commits antes que se construyan las librerías, esto no permite detectar cualquier error de compilación o ejecución de pruebas a tiempo.
Por suerte, es posible utilizar los Hooks de Subversión [5] en especial post-commit, este se encuentra en la información del repositorio:
Seleccionamos el hook en cuestión y presionamos la opción editar y le agregamos este código:
set REPOS=%1
set TXN=%2
python C:\csvn\bin\call_jenkis.py <nombre del job en jenkins> <token del job> <nombre de usuario> <token del usuario> 1>&2
exit 0
Inicialmente los hooks tienen la extensión tmpl, debemos cambiar esa extensión a .bat y así subversión no lo ignoré y lo ejecute. Si este hook devuelve 1 (exit 1) subversion interpreta que hubo un error, si devuelve 0 (exit 0) la ejecución se realizó correctamente.
En la configuración del job en jenkins obtenemos estos datos:
Además también en jenkis obtenemos el nombre del usuario y el token del usuario:
Y ahora solo queda programar call_jenkins.py
# RestFul Jenkins Client
# autor: Honard Bravo
import urllib2
import base64
import sys
"""
Jenkins usa autenticacionn basica (basic authentication), sin embargo en lugar del password debe enviarse
un token (distinto al token generado por el job), este token se utiliza en lugar del pasword. El token es dado por jenkins en
configuración del usuario.
"""
if __name__ == "__main__":
if len(sys.argv) < 5:
print 'Debe especificarse los siguientes parametros (en este orden): job job_token username apiToken'
exit(1)
job = sys.argv[1]
job_token= sys.argv[2]
username = sys.argv[3]
apiToken = sys.argv[4]
base64string = base64.encodestring('%s:%s' % (username,apiToken))[:-1]
auth_header = 'Basic %s' % base64string
site= 'http://localhost/jenkins/job/'+job+'/build?token='+job_token
hdr = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3',
'Accept-Encoding': 'none',
'Accept-Language': 'en-US,en;q=0.8',
'Connection': 'keep-alive',
'Authorization': auth_header}
req = urllib2.Request(site, headers=hdr)
try:
response = urllib2.urlopen(req)
print 'Solicitud de build generada con exito'
except urllib2.HTTPError, e:
print 'Error: '
print e.fp.read()
print e
print str(e.headers)
exit(1)
exit(0)
Colocar el archivo en C:\csvn\bin.
Y listo!
[1] http://www.martinfowler.com/articles/continuousIntegration.html
[2] http://www.collab.net/products/subversion
[3] http://es.wikipedia.org/wiki/Control_de_versiones
[4] https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API
[5] http://svnbook.red-bean.com/nightly/en/svn.reposadmin.create.html
Suscribirse a:
Entradas (Atom)