tag - ¿Cómo hago que Subversion(SVN) envíe correos electrónicos en checkins?
svn add (16)
Siempre he encontrado que los correos de checkin (commit) son muy útiles para hacer un seguimiento del trabajo que otras personas están haciendo en la base de código / repositorio. ¿Cómo configuro SVN para enviar por correo electrónico una lista de distribución en cada confirmación?
Estoy ejecutando clientes en Windows y el servidor Apache Subversion en Linux. Las respuestas a continuación para varias plataformas probablemente serán útiles para otras personas.
¿Qué plataforma?
En Mac OS XI he instalado msmtp y msmtp creado un script post-commit bajo hooks en el repositorio. Se debe configurar un archivo .msmtprc para el usuario svn
(o www
).
REPOS="`echo $1 | sed ''s///{root of repository}//g''` "
REV="$2"
MSG=`/usr/local/bin/svn log -v -r HEAD https://localhost$REPOS`
/usr/local/bin/msmtp {list of recipients} <<EOF
Subject: SVN-Commit $REPOS#$REV
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8Bit
$MSG
EOF
Haga que {root of repository}
y {list of recipients}
específicos para sus necesidades. Tenga en cuenta que he usado UTF-8 porque tenemos algunos caracteres especiales aquí en Suecia (åäö).
1) Instalar svnnotify en un servidor svn usando sudo apt-get
2) Utiliza el enlace post-commit de tu repositorio (lee en los enganches post-commit en el sitio web de svn)
3) Abra el archivo de enlace post-commit y pegue el siguiente código para enviar un correo electrónico usando el servidor smtp. Usar smtp es sencillo ya que no necesita configurar sendmail.
4) Asegúrese de que después de / (salto de línea) no tenga espacio adicional.
#!/bin/sh
REPOS="$1"
REV="$2"
TO="[email protected]" # who will receive the notifications
FROM="[email protected]" # what will be in "FROM" fields
/usr/bin/svnnotify /
--repos-path "$REPOS" /
--revision "$REV" /
--to $TO /
--from $FROM /
--reply-to $FROM /
--smtp "YOUR.SMTP.MAIL.COM" /
--subject-prefix "[svn commit]" /
--attach-diff -a /
--header ''Message generated on Subversion Check-in.'' /
--footer ''OpenSource Team. '' /
--svnlook "/usr/local/bin/svnlook" /
--handler HTML::ColorDiff # make diff pretty
Como alguien más dijo, ''qué plataforma''. En Windows, he usado ''blat'', que es un programa de envío gratuito de SMTP para hacer esto, junto con un postcompromiso y otro archivo por lotes.
La confirmación de publicación se ve así: (solo llama a otro archivo por lotes)
call d:/subversion/repos/rts/hooks/mail %1 %2
Y mail.bat se veía así:
copy d:/subversion/repos/RTS/hooks/Commitmsg.txt %temp%/commit.txt
copy d:/subversion/repos/RTS/hooks/subjbase.txt %temp%/subject.txt
svnlook info -r %2 %1 >> %temp%/commit.txt
echo Revision %2 >> %temp%/commit.txt
svnlook changed -r %2 %1 >> %temp%/commit.txt
svnlook author -r %2 %1 >> %temp%/subject.txt
c:/utils/blat %temp%/commit.txt -t <[email protected]> -sf %temp%/subject.txt -server ServerName -f "SVN Admin <[email protected]>" -noh2
El mayor problema para escribir ganchos de SVN es que básicamente no tienes ninguna configuración de entorno, ninguna ruta de acceso exe, ninguna ruta de acceso temporal, etc. Aunque tal vez eso haya mejorado en versiones más recientes de SVN.
Consulte el paquete svn-mod-email que se describe here . El svn-mod-email es una poderosa herramienta para la administración de notificaciones de correo electrónico SVN que se entrega como un archivo Debian. Es fácil de instalar, configurar y usar.
Deseará familiarizarse con los enganches del repositorio , particularmente el gancho post-commit .
Eche un vistazo a la herramienta de notificación independiente de Subversion (¡solo Windows!). Puede enviar correos electrónicos en commit y ¡mucho más!
El servidor VisualSVN tiene un VisualSVNServerHooks.exe
notificación de correo electrónico de confirmación útil VisualSVNServerHooks.exe
. Admite diferencias de color y puede enviar notificaciones de compromiso solo cuando la confirmación afecta a cierta ruta de repositorio.
Consulte "Configuración de notificaciones por correo electrónico en el servidor VisualSVN" .
En el directorio "ganchos" de su rama de subversión específica hay 9 archivos de plantilla para comenzar.
Punto clave: subversion no ejecutará ninguno de los archivos hasta que se renombren. Para que post-commit.tmpl se ejecute en Unix, renómbrelo como "post-commit". En Windows, cambie el nombre a "post-commit.bat" o "post-commit.exe". Subversion no ejecutará el archivo si se llama "post-commit.tmpl" o "post-commit.sh" o similar.
Además, asegúrese de que el archivo sea ejecutable por el mismo usuario que ejecuta la subversión.
Hay un ejemplo (grande) escrito en Perl incluido en la fuente de Subversion (se puede ver aquí ).
Hay una pregunta relacionada here en los enganches post-commit. Personalmente, prefiero enviar un mensaje a algo de lo que pueda obtener un feed RSS, ya que un correo electrónico por encargo sobrecargaría mi bandeja de entrada bastante rápido.
Lo hice en el servidor Linux en 3 pasos:
Cree una lista de correo (
[email protected]
) y agregue personas a la lista.Edite
/path_to_your_svn/svn/hooks/svn-notify/mailer.conf
- to_addr = [email protected]
- from_addr =% (autor) [email protected]
- commit_subject_prefix = [XY-SVN]
- Agregue esta línea a su archivo
/path_to_your_svn/svn/hooks/post-commit
:
/path_to_your_svn/svn/hooks/svn-notify/mailer.py commit "$REPOS" "$REV" /path_to_your_svn/svn/hooks/svn-notify/mailer.conf
Puedes usar buildbot . Es una herramienta que puede tomar medidas arbitrarias cada vez que se produce un check-in. Es un sistema de integración continua con todas las funciones, pero si solo quieres correos electrónicos, ciertamente puede manejar eso. Tiene complementos para una variedad de SCM, incluido SVN.
Seconding @ Matt Miller sobre feeds RSS.
Hay una herramienta útil llamada WebSVN que ofrece alimentadores RSS de cada repositorio y ramas / etiquetas / carpetas individuales con mensajes de confirmación completos. También es una excelente interfaz web para buscar rápidamente historiales de archivos y commits / diffs sin tener que ejecutar una actualización y abrir su editor de elección.
También SVNMailer , que funciona en Linux.
Uso un script post-commit similar a este.
Envía un buen correo electrónico HTML. Lo actualicé en algún lugar donde se destaca el código que se eliminó en rojo y se resalta el código que se agregó en azul.
Usas los ganchos post-commit . Aquí hay una guide .
Aquí hay un ejemplo de script de Ruby que envía un correo electrónico después de cada confirmación: commit-email.rb