Las normas expuestas son de obligado cumplimiento. La STIC podrá estudiar los casos excepcionales los cuales serán gestionados a través de los responsables del proyecto correspondiente y autorizados por el Área de Gobernanza de la STIC. Asimismo cualquier aspecto no recogido en estas normas deberá regirse en primera instancia por las guías técnicas correspondientes al esquema nacional de seguridad y esquema nacional de interoperabilidad según correspondencia y en su defecto a los marcos normativos y de desarrollo software establecidos por la Junta de Andalucía, debiendo ser puesto de manifiesto ante la STIC.
La STIC se reserva el derecho a la modificación de la norma sin previo aviso, tras lo cual, notificará del cambio a los actores implicados para su adopción inmediata según la planificación de cada proyecto.
En el caso de que algún actor considere conveniente y/o necesario el incumplimiento de alguna de las normas y/o recomendaciones, deberá aportar previamente la correspondiente justificación fehaciente documentada de la solución alternativa propuesta, así como toda aquella documentación que le sea requerida por la STIC para proceder a su validación técnica.
Contacto Arquitectura: l-arquitectura.stic@juntadeandalucia.es
Los cambios en la normativa vendrán acompañados de un registro de las modificaciones. De este modo se podrá realizar un seguimiento y consultar su evolución. Ordenándose de mas recientes a menos recientes, prestando especial cuidado a las cabezeras de la tablas dónde se indican las fechas de entrada en vigor y versión.
En el SAS el ciclo de trabajo está basada en Gitflow, aunque se definen algunos puntos para facilitar la integración con el Jira corporativo.
Prerequisitos:
El flujo para realizar las entregas en el repositorio del SAS es el siguiente:
Se adjunta un script que permite realizar todos estos pasos automaticamente, indicando el repositorio de origen y el de destino, o desde un repositorio local existente solo indicando el destino.
Cuando se realice la entrega de una nueva versión en GIT, los criterios que deberá cumplir la entrega por parte del proveedor deberán ser:
Git for Windows: https://git-scm.com/download/win
Git for Windows ya incluye todos los comandos necesarios para trabajar con el workflow de GitFlow desde la versión 2.5.3.
Establecer la opción feature.finish.no-ff a true, lo que permitirá que gitflow cree un commit nuevo cada vez que se realice un merge independientemente de si se puede o no aplicar fast-forward. Esto facilita la revisión del histórico, y agiliza tareas de mantenimiento que requieran excluir features completas.
Para activar el parámetro no-ff basta con ejecutar el siguiente comando por consola y se aplicaría a todos los proyectos:
git config --global gitflow.feature.finish.no-ff TRUE
Si se trabaja con proxys será necesario realizar configuración adicional creando las variables de entorno "HTTP_PROXY" y "HTTPS_PROXY", también se podrán excluir direcciones con la variable global NO_PROXY
Git fue creado pensando en la eficiencia y la confiabilidad del mantenimiento de versiones de aplicaciones cuando éstas tienen un gran número de archivos de código fuente, es decir Git nos proporciona las herramientas para desarrollar un trabajo en equipo de manera inteligente y rápida.
Algunas de las características más importantes de Git son:
Iniciar un repositorio vacío en la carpeta actual.
|
Añadir un archivo especifico.
|
Añadir todos los archivos del directorio act
|
Confirmar los cambios realizados. El "mensaje" generalmente se usa para asociar al commit una breve descripción de los cambios realizados.
|
Revertir el commit identificado por un hash.
|
Subir una rama(branch) al servidor remoto.
|
Mostrar el estado actual de la rama(branch).
|
La principal diferencia con Subversion es que éste es un Sistema Centralizado mientras que GIT es un sistema Distribuido:
En estos sistemas hay un servidor que mantiene el repositorio y en el que cada programador mantiene en local únicamente aquellos archivos con los que está trabajando en un momento dado. Se necesita conectarse al servidor para poder enviar los cambios realizados. Es un sistema donde todo el código del proyecto esta en el servidor únicamente.
En este tipo de sistemas cada uno de los integrantes del equipo mantiene una copia local del repositorio completo. Al disponer de un repositorio local, se pueden hacer commit (enviar cambios al sistema de control de versiones) en local, sin necesidad de estar conectado a Internet o cualquier otra red. En el momento que lo quieras compartir con los demás integrantes del equipo se realiza el registro a nivel de servidor.
La migración de los repositorios actuales que se encuentran en el SVN se realizara de forma progresiva e individualizada por producto a lo largo del tiempo.
En el día a día, el desarrollador trabaja sobre la copia de trabajo en un ciclo de editar ficheros, actualizar la copia con las modificaciones realizadas por otros desarrolladores, y enviar sus modificaciones al repositorio.
En subversion, esto se realiza con los comandos:
|
El flujo de información y los comandos asociados en svn se pueden representar como:
Los comandos equivalentes en git son:
|
y su representación gráfica es:
Como vemos, en el ordenador local existen tres elementos: los ficheros con los que se está trabajando, una "staging area" y un repositorio local, mientras que en svn sólo existen dos, los ficheros con los que se está trabajando, y la "working copy".
Por otra parte, en git lo normal es que existan varios repositorios remotos, y habitualmente uno de ellos es el repositorio compartido en el que se consolidan los cambios realizados por un grupo de desarrolladores. Por lo tanto, para enviar unas modificaciones realizadas localmente al repositorio compartido, en git hay que realizar más pasos que en svn: llevar la modificación a la "staging area" (con un comando add, mv o rm), desde allí al repositorio local (con un comando commit), y desde el repositorio local al repositorio remoto. (con un comando push). Por comodidad, los dos primeros pasos se pueden ejecutar con un sólo comando "commit -a".
Para actualizar la copia local con los cambios realizados en el repositorio remoto, en svn se ejecuta el comando "update". En git, primero hay que actualizar el repositorio local con un comando "fetch", y después actualizar la staging area y los ficheros de trabajo con el comando "merge". Por comodidad, los dos pasos se pueden ejecutar con un único comando "pull".
En ocasiones, se deben añadir ficheros para que queden bajo el sistema de control de versiones, o bien eliminar ficheros que ya no son necesarios. Esto se realiza de una manera muy similar en ambos casos.
En svn:
|
En git:
|
Para deshacer las modificaciones realizadas en un fichero, basta con ejecutar el comando revert:
|
En git, el equivalente a "svn revert fichero" es:
|
En git, para crear un repositorio basta con ejecutar el comando "git init" en el directorio en donde va a estar la copia de trabajo:
|
Esto crea e inicializa el subdirectorio ".git". A continuación, se pueden comenzar a ejecutar comandos "git add", "git commit -a", etc.¿
En git, cada commit se guarda junto con el nombre y el email del usuario que lo realizó. Para establecer un valor de estos parámetros para todos los repositorios, se utilizan los comandos:
|
Para comprobar el valor asignado, se utilizan los mismos comandos sin especificar un nuevo valor. Ejemplo:
|
Para cada repositorio, se puede configurar un valor distinto para estos parámetros, utilizando los comandos sin el modificador "¿global" Crear una copia local de un repositorio remoto En svn, se obtiene una copia de un repositorio en el área de trabajo mediante un "checkout":
|
En git, se realiza una copia del repositorio con el comando "git clone":
|
Gitflow es uno de los muchos workflows que existen para trabajar con GIT. En el SAS se debe de usar este workflow por parte de los proveedores.
Gitflow utiliza un repositorio central como centro de comunicación para los diferentes desarrolladores. Su punto fuerte es la estructura de ramas (branches) que posee para controlar la evolución del proyecto.
Gitflow se caracteriza por el uso de cuatro tipos de ramas diferentes:
CheatSheet: https://danielkummer.github.io/git-flow-cheatsheet/index.es_ES.html
En lugar de trabajar todo desde la rama master, aquí se utilizan dos ramas para registrar el historial de proyecto:
Es recomendable etiquetar todos los commits en la rama master con un número de versión.
En resumen en la rama master no se desarrolla, solamente se registran los diferentes lanzamientos. Todas las integraciones se realizan desde la rama de Develop.
El resto de ramas trabajan alrededor de estas dos.
Cada nueva funcionalidad debe residir en su propia rama, de esta forma en caso de existir problemas es muy rápido volver a versiones anteriores.
Las ramas de nuevas funcionalidades, features, siempre se crean a partir de la rama de develop. Una vez finalizado el desarrollo sobre la feature, se fusiona con la rama de develop , nunca con la rama master.
Una vez el evolutivo se ha finalizado y se acerca la fecha de lanzamiento se crea una rama para éste, release. Las ramas releases son utilizadas para marcar o etiquetar lanzamientos de producto, (evolutivos) y poder tener identificados de forma rápida los cambios de las diferentes releases.
A la rama release no se le pueden añadir nuevos evolutivos de ningún tipo, solamente la documentación asociada al lanzamiento de la release o errores puntuales.
Una vez se finalizan la rama release se tiene que fusionar tanto la rama master como la rama develop. Estas dos, siempre que realicemos una publicación, tienen que estar sincronizadas con el mismo contenido.
La rama maintenance se utiliza cuando se detectan errores críticos de la aplicación.
La forma de trabajar sería crear una rama proveniente de la master, solventar el correctivo y fusionar con la rama master.
Maintenance es la única rama que interactúa directamente con la rama master, todas las demás siempre se trabaja desde la rama de desarrollo.
Una vez se ha solventado el correctivo se tiene también que fusionar con la rama develop, para que el correctivo se mantenga en los diferentes evolutivos.
A continuación se describe el procedimiento de subida a GIT haciendo uso de GIT FLOW tal y como está indicado en la presente normativa. Para ello, el procedimiento será el siguiente:
git flow init
git flow feature start "MYFEATURE"
git flow feature finish "MYFEATURE"
git flow release start "RELEASE"
git flow release finish "RELEASE"
Como interfaz gráfica de Git, en la que apoyarse para gestionar los repositorios, disponemos de Gitlab en su versión Community Edition.
Desde el SAS se aplica una política de seguridad sobre los repositorios de GIT, con el objetivo de mantener su privacidad y que únicamente los miembros del equipo de proyecto tengan acceso al código fuente.
Los permisos sobre GIT tienen la siguiente configuración:
Los permisos más usados serán los de Master y Guest, ya que el repositorio ubicado en el SAS no será usado directamente por los desarrolladores.
La solicitud de permisos se realizara por petición CGES a la OCA, de la misma manera que se realiza actualmente para el SVN
La plataforma Gitlab nos proporciona una integración sencilla para poder enlazar incidencias (Jira) y nuestro repositorio (Gitlab).
Gitlab puede detectar automáticamente enlaces a issues de JIRA. Para ello, sólo tendremos que añadir en los commits, los identificadores de las issues JIRA que deseemos.
De esta forma podremos acceder rápidamente a la issue para ver el detalle.
Ejemplo de comentario: "CHKI-1 Solventado el problema".
https://www.atlassian.com/git/tutorials/comparing-workflows#gitflow-workflow
Para un correcto uso de GIT recomendamos: