2008-11-07 13 views
17

Mucha gente tiene cosas que sus sistemas hacen por ellos o por sus equipos. Los enganches post-commit de control de fuente son un ejemplo estándar: tener un sistema de compilación automatizado que verifica la fuente más reciente, compila, prueba y empaqueta, es un truco de back-office que la mayoría de nosotros probablemente usemos.¿El mejor sistema de IT/back-office hacks?

¿Qué otras cosas interesantes has hecho?

+1

¡La policía wiki ataca de nuevo! No lo cambie a wiki a menos que lo desee. Permita que otros voten a favor o en contra, en función de si creen que está aportando valor, y permita que aquellos que dan buenas respuestas sean recompensados. –

+1

@Davis ¡AMEN A ESE HERMANO! Parece que cualquier publicación que sea remotamente susceptible de generar interés se comunica a wikifi. Según Jeff, el tema del wiki era evitar que una pregunta muy popular desviara la reputación de los puntos técnicos. – Spence

Respuesta

30

Teníamos un desarrollador en nuestro equipo que no estaba familiarizado con el concepto de un conflicto de subversión. Dedujo que si simplemente eliminaba todas esas cosas raras en su código y hacía clic en resolver que todo estaba bien (es decir, anulando todos los demás cambios en el archivo ...)

Sin embargo, después de la quinta vez este ocurrió, y la quinta vez que tuve que explicar por qué el defecto que acabo de cerrar volvía a aparecer, escribí un guión.

Diferiría los cambios en un archivo para ver si la verificación consecutiva borró todos los cambios anteriores y que fueron realizados por el desarrollador sin nombre.

Enviaría un correo electrónico al jefe con una descripción de lo que sucedió y cuánto trabajo se perdió durante el registro.

No se produjo la 7ª incidencia.

9

No contamos con personal las 24 horas, 7 días a la semana, pero tenemos procesos críticos que se ejecutan durante toda la noche. Creamos un sistema interno de alertas para notificarnos problemas serios del sistema, procesos fallidos de misión crítica, etc. Utiliza texto a voz para crear un mensaje descriptivo y luego se conecta a nuestro marcador automático para llamar a las personas adecuadas con el mensaje.

2

Difícilmente un truco, pero de vuelta en el día, en nuestro veloz VAX 11/730, nuestro proceso de un día para otro imprimía el archivo "BLAMMO.TXT" en la impresora si algo iba mal. Todas las mañanas, la primera parada fue la impresora al entrar.

18

Tenemos un semáforo que muestra si nuestra construcción diaria tiene éxito, ha fallado las pruebas o simplemente no se ha construido.

Además, tenemos una barra de luces que se ilumina durante unos segundos cada vez que recibimos una carga de un cliente.

+1

tiene alguna imagen, suena como una configuración divertida –

0

De vuelta en mi trabajo anterior, tuvimos que auditar muchas tablas para cambios de datos (inserciones, actualizaciones y eliminaciones). Nuestro equipo de soporte tuvo que poder buscar a través de estos datos para encontrar los cambios que los usuarios hicieron.

La solución temporal que se había vuelto semipermanente era almacenar cada consulta no seleccionada. Sin embargo, este era un sistema grande, que la tabla crecería alrededor de 1,5 GB por día.

La solución que se me ocurrió fue crear un script que para todas las tablas de una lista externa creara los activadores apropiados que auditaran cada tabla, fila, columna, antes y después, cuándo y quién, y almacenarla en nuestro nueva tabla de auditoría. Esta tabla creció aproximadamente un 10% del tamaño de la versión anterior y almacenó datos mucho más utilizables. Nos permitió crear una interfaz de usuario para buscar y ver cada cambio realizado en nuestros datos, sin requerir ningún conocimiento de SQL para nuestro equipo de soporte o usuarios comerciales.

4

Trabajando en una empresa de diseño web configuré nuestro servidor de desarrollo para que pudiéramos ver una copia de trabajo de un proyecto en tiempo real por un nombre de dominio secundario. Por lo tanto, si su nombre era joe y usted estaba trabajando en Project Jetfuel, iría al joe.jetfuel.test-example.com y podría ver los cambios instantáneamente sin comprometerse.

Esto era un truco simple que utilizaba nombres de dominio secundario como una estructura de directorio parcial. Nuestra ruta htdocs se veía así htdocs/tag/project. Teníamos un script (una aplicación php a la que tendrías acceso por setup.test-example.com) que crearía un nuevo nombre para ti y verificaría la versión que quisieras y llama al script de implementación para ese proyecto. Si tiene éxito, lo reenviará al nuevo subdominio. Entonces podría trabajar en esta nueva copia con un recurso compartido de samba.

Esto funcionó muy bien para nosotros ya que siempre implementamos en la misma versión de Linux y nuestros proyectos tenían requisitos simples de base de datos.

Nuestra razón original para hacer esto fue porque nuestros desarrolladores trabajaron en todo tipo de plataformas diferentes. Además de solucionar este problema de plataforma, esto fue increíble para ver cambios y pruebas. Contamos con todo tipo de etiquetas, desde nombres de personas, versiones de troncales, etiquetas de prueba, hasta prototipos como jquery-menu-hack.jetfuel.test-example.com

Ahora que miro hacia atrás me pregunto cuánto más fácil hubiera sido ejecutar máquinas virtuales.

4

Teníamos un desarrollador que trabajaba en un sitio ASP clásico que no creía en el control de código fuente. El código pasó de su máquina directamente a la caja de producción. Esto conduce a problemas con cambios perdidos o la incapacidad de volver a una versión estable. Como CruiseControl.Net tiene la capacidad de monitorear un directorio, agregué un proyecto que realmente ingresaba los archivos cada vez que se copiaban a la producción. Completamente retrocedido desde la intención original de CC.Net, pero no perdimos más código.

3

No exactamente hacks, pero un par de elementos imprescindibles para la TI dev funciona:

Si está utilizando la subversión, usted tiene que utilizar CommitMonitor. (http://tools.tortoisesvn.net/CommitMonitor) Te permite controlar los repositorios svn para confirmaciones nuevas & y luego revisar las nuevas confirmaciones. Genial si quieres estar al tanto de lo que tu equipo está haciendo. Particularmente si tienes un par de juniors que necesitan ser observados. ;)

Rsnapshot (http://www.rsnapshot.org/) también es invaluable: tenemos instantáneas de copia de seguridad completas de todo nuestro sistema de archivos cada cuatro horas desde hace 2 años, y cada día más. ¡Es como un cubo de datos para su sistema de archivos! La tranquilidad que esto proporciona es pura dicha. :)

4

Poner en un gancho de precompromiso que verifica el comentario de error se refiere a un error abierto, asignado al usuario que realiza el checkin. (SCMBug puede hacer esto).

Luego, para hacer la vida REALMENTE interesante, deletrear revise los comentarios !! El comentario de compromiso y el del código. (hechizo es mi amigo)

Ejecuta el código a través de un formateador de código establecido en compayn estándar; y diferirlo al original: si no está en el formato oficial de la compañía: rechazar la confirmación.

Realice una prueba de cobertura con la compilación de prueba de la unidad.

Correo electrónico todos los errores/errores causados ​​al equipo de desarrollo.

Olvidé el nombre del desarrollador. Ellos saben que lo hicieron.

2

De vuelta en los días dotCom hace unos 9 años, tuve que hackear un sistema de conmutación por error entre dos ubicaciones diferentes. Tuvimos una configuración original con un sitio web de inicio de Powerbuilder y una herramienta de administración de Powerbuilder. Los datos se almacenaron en MSSQL 7.0. Los servidores web usaron IPX para comunicarse con los Servidores SQL (no preguntes). De todos modos, fui responsable de crear un plan de conmutación por error.

Terminé pirateando algunas cajas de linux, y las hice ejecutar nuestro DNS externo. Uno en cada ubicación. Teníamos un sitio remoto w/webserver y un servidor sql. Obtuve la replicación de transacciones SQL trabajando sobre una conexión IPX RDSI de 128k (de todas las cosas). Luego construimos una herramienta de monitoreo en nuestro sitio de producción para enviar paquetes a varias transferencias de red ascendentes. Si experimentamos una interrupción de más del 20% del sitio principal, la herramienta de monitoreo ejecutó un script de Perl en el cuadro de Debian para cambiar el DNS y señalar a nuestro 2ndary. Nuestro secundario tuvo un latido con nuestro DNS principal y una estación de monitoreo. Duplicaría los registros, a menos que perdiera ambas conexiones, luego pasaría a señalar DNS a la ubicación de la copia de seguridad.

El sitio principal cerraría el servidor SQL en la ubicación principal para interrumpir la replicación. Conmutación por error automatizada de sitio a sitio utilizando la conexión 128k ISDN IPX :)

0

Esto es en un nivel menor, pero estoy bastante orgulloso de un archivo make que escribí para compilar el código de mi investigación. Solo necesita tener los nombres de los archivos de origen y encabezado que pueden encargarse del resto por sí solos (aunque supone que uno no compilará ningún archivo de encabezado en los objetos, sino que solo compilarán los archivos fuente). Las otras desventajas son el hecho de que se basa en la segunda función de expansión del programa make de GNU, por lo que no sé si funciona en otros programas make. Además, el compilador utilizado debe admitir algo similar a la característica -MM de gcc. Aquí está la esperanza de que nadie se ría de eso.

-include prereqs.mk 
HEADERS=$(SRC_DIR)/gs_lib.h $(SRC_DIR)/gs_structs.h 
SOURCES=$(SRC_DIR)/main.cpp $(SRC_DIR)/gs_lib.cpp 
OBJECTS=$(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SOURCES)) 

release: FLAGS=$(GEN_FLAGS)$(OPT_FLAGS) 
release: $(OBJECTS) prereqs.mk 
    $(CXX) $(FLAGS) $(LINKER_FLAGS) $(OUTPUT_FLAG) $(EXECUTABLE) $(OBJECTS) 

prereqs.mk: $(SOURCES) $(HEADERS) 
    $(CXX) $(DIR_FLAGS) $(MAKE_FLAG) $(SOURCES) | sed 's,\([abcdefghijklmnopqrstuvwxyz_]*\).o:,\1= \\\n,' > $@ 

.SECONDEXPANSION: 
$(OBJECTS): $$($$(patsubst $(OBJ_DIR)/%.o,%,[email protected])) 
    $(CXX) $(FLAGS) $(NO_LINK_FLAG) $(OUTPUT_FLAG) [email protected] $(patsubst $(OBJ_DIR)/%.o,$(SRC_DIR)/%.cpp,[email protected]) 

Obviamente, se me cayó la definición de una serie de variables, pero creo que hace entender la idea.

Dado que mis herramientas de codificación y estilo son compatibles con los requisitos de este script, me gusta usarlo. Todo lo que necesito hacer para agregar (a) una nueva pieza (s) de código fuente es agregar su nombre (s) a la variable apropiada y el resto se cuida.

0

Tenemos cuentas de Twitter para muchos proyectos que twittean cosas como mensajes de compromiso, avisos de compilaciones, pruebas de unidad fallidas, implementaciones, actividad de seguimiento de errores, cualquier tipo de evento asociado con el proyecto. Ejecutar un cliente como Twitter Gwibber (que muestra una ventana emergente para cada nuevo estado) es una excelente manera de mantenerse en contacto con la actividad en los proyectos que le interesan. Usar Twitter es bueno ya que puedes aprovechar todas las aplicaciones de terceros, como los clientes de iPhone.

-1

En el año 1993, cuando los sistemas de control de fuente eran realmente caros y poco manejables, la empresa con la que trabajé tenía un control de fuente interno construido como scripts 4DOS. No era tan sofisticado como la mayoría de los sistemas de control de fuente actuales, por ejemplo, no tenía ramificaciones o integraciones, pero desempeñaba el trabajo básico de respaldar el historial de revisiones, el checkout/checkin y la resolución rudimentaria de conflictos.

0

Agregue la verificación de commit-hook para archivos de modelo VRML/3d con ruta absoluta a texturas/imágenes. f:/maya/my-textures/newproject/xxxx.png simplemente no pertenece al servidor.

Cuestiones relacionadas