Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

Contenido:

Tabla de contenidos
maxLevel

5

2
indent20px

exclude(Cumplimiento normativo|Histórico de cambios)


Resumen:

Sugerencia
  • Versión: 
v01r56
  • v01r58
  • Fecha
publicación: Image Removed
  • última actualización:  
  • Entrada en vigor desde:
 
  •   



Cumplimiento normativo


Advertencia

Las normas expuestas son de obligado cumplimiento. La STIC DGSIC 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 STICDGSIC. 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 STICDGSIC.

La STIC DGSIC 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 DGSIC para proceder a su validación técnica.

Contacto Arquitectura: l-arquitectura.stic@juntadeandalucia.es

Histórico de cambios


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 cabeceras de la tablas dónde se indican las fechas de entrada en vigor y versión.


Expandir
titleVersiones de la normativa
Versión
v01r56
v01r58Fecha publicación

 

Fecha entrada en vigor
 
Alcance
  • Versión inicial sobre normativa de git

1. Normativa

Ciclo de trabajo

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.

  • No se permitirá por norma general hacer commits en master, develop o ramas support directamente, se deberán de usar las demás ramas dentro del flujo de Gitflow
  • Cada feature debe asociarse con una tipología concreta de issue de Jira o, en su defecto, con una solicitud CGES. El nombre de dicha feature debe contener, en función de la metodología seguida por el proyecto, lo siguiente:
    • Proyectos Agile
      • Se crearan dos tipos de ramas de feature, una por cada "Mejora", y otra por cada "Historia de Usuario" de esa mejora.
      • Las ramas de "Historia de Usuario" se crearan y finalizaran sobre la rama de "Mejora" correspondiente.
      • Código Jira de la issue de tipo "Mejora", junto un breve texto descriptivo, en la que se basa la feature.
        • Por ejemplo "feature/{Codigo_Jira_Mejora}{_Descripcion}
      • Código Jira de la issue de tipo "Historia de Usuario", junto un breve texto descriptivo, en la que se basa la feature, con el prefijo de su "Mejora".
        • Por ejemplo "feature/{Codigo_Jira_Mejora}/{Codigo_Jira_HistoriaUsuario}{_Descripcion}
    • Proyectos Cascada
      • Código Jira de la issue de tipo "Mejora", junto un breve texto descriptivo, en la que se basa la feature.
        Por ejemplo "feature/{Codigo_Jira}{_Descripcion}
  • En proyectos Agile todas las ramas features serán de mejora o de historia de usuario.
  • No se pueden cerrar historias de usuario hasta que se apruebe su DoD
  • Solo se cerrarán las mejoras cuando vayan a ser incluidas en la siguiente versión del aplicativo.Ejemplo:
    Image Removed
  • Cada commit, incluido en una feature, debe incluir en su comentario el código Jira de la issue que corresponda de acuerdo a la metodología seguida por el proyecto (descritas en el punto anterior). En su defecto, se hará uso del número de solicitud CGES que corresponda.
  • Cada commit, incluido en una release, debe incluir en su comentario lo siguiente:
    • Proyectos Agile
      • Código Jira de la issue de tipo "Version".
    • Proyectos Cascada
      • Código Jira de la issue de tipo "Version".
  • Las ramas de release/hotfix deben de corresponder con la versión del aplicativo.
  • Si el proveedor necesita marcar hitos sobre el desarrollo se realizaran tags con el formato (Version)-[RC|SP](Numero correlativo) que debera de etiquetarse en develop. ejemplos: 1.0.0-SP1, 1.0.0-RC1
  • Cuando el proveedor marque un tag como RC (release candidate) y quiera crear la release final debera de iniciar una release de gitflow teniendo como origen el tag de la RC.
  • Nunca tener  -SNAPSHOT en la rama master, support, release, o hotfix.
  • Siempre tener -SNAPSHOT en el resto de ramas, cuando se vayan a subir los cambios al SAS.
  • Tags: Solo se permiten 3 tipos de tags
    • Tags de version, formato x.x.x.x
    • Tags de Sprint, formato x.x.x-SPx Estos tags se usaran para marcar los fines de spring del desarrollo exclusivamente 
    • Tags de version candidata a lanzamiento, formato x.x.x-RCx Estos tags se usaran exclusivamente para marcar hitos internos para realizar pruebas en desarrollo, nunca para realizar entregas para Pre o Pro, ya que estas entregas se deberan de realizar mediante el flujo de gitflow
  • Deben de existir todos los tags correspondientes a todas las versiones del aplicativo.
  • Ramas: solo se permiten 3 tipos de ramas
    • Rama master (Obligatoria)
    • Rama develop (Obligatoria)
    • Ramas support/*
  • Ramas Support:
    • Deben de seguir la siguiente nomenclatura: X.Z.Y (Y podria ser opcional)
    • La nomenclatura de releases y hotfix no variara aunque esta parta de una rama support
    • Siempre deben de partir del ultimo tag de la version concreta especificada
    • Se considera como si fuera una rama paralela a develop por lo que se deben de aplicar features, releases,y hotfix sobre ella como si fuera la rama develop
  • No aplicar fast-forward en "merges" (git config --global gitflow.feature.finish.no-ff TRUE)
  • Entregas

    Prerequisitos:

    • Se debe estar en la red corporativa.
    • Se debe de tener acceso al repositorio del SAS.
    • El usuario que se use para la entrega tiene que tener los permisos correspondientes en el repositorio.

    El flujo para realizar las entregas en el repositorio del SAS es el siguiente:

    1. El usuario realizara una copia local del repositorio de desarrollo con la opcion --mirror
      • git clone --mirror {url del repositorio de desarrollo}
      • Si ya se tenia anteriormente creada, para actualizarla se usara:
        • git remote update
    2. Se añadira el repositorio del sas al repositorio local.
    3. Se subiran las siguientes ramas:
      • git push sas {rama}
        • master
        • develop
        • support/*
      • Solo se subiran las ramas descritas anteriormente.
    4. Se subiran todos los tags
      • git push --tags sas

    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.

    Criterios a Valorar en una Entrega de Versión

    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:

    1. Uso de GIT FLOW y especificaciones indicadas en la normativa vigente.
      • Fusiones de ramas FEATURE en la rama DEVELOP.
      • Fusión de la rama RELEASE en la rama MASTER, creación del TAG correspondiente y fusión en la rama DEVELOP.
    2. La rama MASTER estará como máximo al mismo nivel que la rama DEVELOP, nunca la rama MASTER podrá estar por encima de la rama DEVELOP. En todo caso la rama DEVELOP sí que podrá estar por encima de la rama MASTER, dado su carácter de rama de trabajo. Esto podrá observarse en el gráfico del proyecto en GIT.
    3. Cuando se realice una entrega de una nueva versión, deberá existir el TAG (desde la rama MASTER) correspondiente a dicha versión.

    Configuración en el equipo

    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

    2. Git

    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:

    • Rapidez en la gestión de ramas.
    • Gestión distribuida.
    • Gestión eficiente de proyectos grandes.
    • Realmacenamiento periódico en paquetes.

    2.1 Ordenes básicas

    Iniciar un repositorio vacío en la carpeta actual.

    git init

    Añadir un archivo especifico.

    git add "nombre_de_archivo"

    Añadir todos los archivos del directorio act

    git add .

    Confirmar los cambios realizados. El "mensaje" generalmente se usa para asociar al commit una breve descripción de los cambios realizados.

    git commit -m "mensaje"

    Revertir el commit identificado por un hash.

    git revert "hash_commit"

    Subir una rama(branch) al servidor remoto.

    git push origin "nombre rama"

    Mostrar el estado actual de la rama(branch).

    git status

    3. SVN vs GIT

    La principal diferencia con Subversion es que éste es un Sistema Centralizado mientras que GIT es un sistema Distribuido:

    Subversion = Sistema centralizado

    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.

    GIT = Sistema distribuido

    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.

    Migracion SVN --> GIT

    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.

    Diferencias

    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:

    ... editar ficheros en la copia local ...
    $ svn update
    $ svn commit -m "descripción de los cambios realizados"

    El flujo de información y los comandos asociados en svn se pueden representar como:

    Image Removed

    Los comandos equivalentes en git son:

    --- editar ficheros en la copia local ...
    $ git commit -m "descripción de los cambios realizados" -a
    $ git pull
    $ git push

    y su representación gráfica es:

    Image Removed

    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".

    Añadir, eliminar y cambiar de nombre ficheros

    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:

    $ svn add fichero1
    $ svn delete fichero2
    $ svn move fichero3 fichero4

    En git:

    $ git add fichero1
    $ git rm fichero2
    $ git mv fichero3 fichero4

    Deshacer los cambios realizados

    Para deshacer las modificaciones realizadas en un fichero, basta con ejecutar el comando revert:

    $ svn revert fichero

    En git, el equivalente a "svn revert fichero" es:

    $ git checkout fichero

    Crear un repositorio

    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:

    $ mkdir git_repo
    $ cd git_repo
    $ git init
    Initialized empty Git repository in /home/usuario/git_repo/.git/

    Esto crea e inicializa el subdirectorio ".git". A continuación, se pueden comenzar a ejecutar comandos "git add", "git commit -a", etc.¿

    Establecer la identificación de usuario

    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:

    $ git config --global user.name "Nombre de Usuario"
    $ git config --global user.email email@dominio.com

    Para comprobar el valor asignado, se utilizan los mismos comandos sin especificar un nuevo valor. Ejemplo:

    $ git config --global user.name
    Gonzalo Rodríguez
    $ git config --global user.email
    gonzalo@ejemplo.com

    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":

    svn checkout svn+ssh://usuario@servidor:/ruta/al/repositorio

    En git, se realiza una copia del repositorio con el comando "git clone":

    $ git clone ssh://usuario@servidor/ruta/al/repositorio

    4. GitFlow

    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.

    Cómo funciona

    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.

    Image Removed

    Gitflow se caracteriza por el uso de cuatro tipos de ramas diferentes:

    • Historical Branches
    • Feature Branches
    • Release Branches
    • Maintenance Branches

    CheatSheet: https://danielkummer.github.io/git-flow-cheatsheet/index.es_ES.html

    Historical Branches

    En lugar de trabajar todo desde la rama master, aquí se utilizan dos ramas para registrar el historial de proyecto:

    • Master se registran los diferentes lanzamientos a nivel de producto,
    • Develop se utiliza como rama de integración de los diferentes evolutivos a desarrollar.

    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.

    Image Removed

    El resto de ramas trabajan alrededor de estas dos.

    Feature Branches

    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.

    Image Removed

    Release Branches

    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.

    Image Removed

    Maintenance Branches

    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.

    Image Removed

     5. Procedimiento de trabajo en GIT con GIT FLOW

    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:

    1. En el entorno de desarrollo local del proveedor, deberá estar clonado el repositorio GIT remoto del SAS con la misma estructura de ramas obligatoria (DEVELOP y MASTER). Siendo la rama de trabajo siempre, la rama DEVELOP.
    2. Se deberá iniciar GIT FLOW. Esta sentencia solo es necesario ejecutarla una vez en el repositorio local, mientras no se elimine y se cree un nuevo repositorio local.

    git flow init

    1. Para cada una de las funcionales a desarrollar, se deberá crear una rama FEATURE desde la rama DEVELOP con GIT FLOW. Esta rama FEATURE deberá seguir la nomenclatura especificada en la normativa vigente (Normativa)

    git flow feature start "MYFEATURE"

    1. Cuando se finalice el trabajo con la rama FEATURE que corresponda, se procederá a finalizar la rama con GIT FLOW. La finalización de dicha rama con GIT FLOW, realizará automáticamente lo siguiente:
      • Fusionar la rama FEATURE en cuestión con la rama DEVELOP.
      • Borrar la rama FEATURE en cuestión.
      • Cambiar a rama DEVELOP como rama de trabajo actual.

    git flow feature finish "MYFEATURE"

    1. Una vez la rama DEVELOP esté actualizada con todas las FEATURES que corresponda a la versión que se va a entregar, se deberá crear con GIT FLOW una rama RELEASE siguiendo lo especificado en la normativa vigente (Normativa).

    git flow release start "RELEASE"

    1. La finalización con GIT FLOW de la rama RELEASE, realizará automáticamente lo siguiente:
      • Fusionar la rama RELEASE con la rama MASTER.
      • Crea el TAG de la versión que corresponda desde la rama MASTER.
      • Fusionar la rama RELEASE con la rama DEVELOP.
      • Borrar la rama RELEASE en cuestión.

    git flow release finish "RELEASE"

    1. Por último, es muy importante no olvidar subir todas las rmas (incluidos los TAG) al repositorio GIT remoto del SAS.

    6. Gitlab

    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:

    • Usuarios Master (administradores): Administradores. Tienen permiso de lectura , escritura en el repositorio y acceso total a todas las ramas.
    • Usuarios Developer (RW): Tienen permiso de lectura , escritura en el repositorio y restricción rama master.
    • Usuarios Guest (R): Tienen únicamente permisos de lectura en el repositorio.

    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

    Integración Git - Jira

    La plataforma Gitlab nos proporciona una integración sencilla para poder enlazar incidencias (Jira) y nuestro repositorio (Gitlab).

    Referencia a nivel de comentarios

    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".

    Mas información

    https://www.atlassian.com/git/tutorials/comparing-workflows#gitflow-workflow

    http://nvie.com/posts/a-successful-git-branching-model/

    https://about.gitlab.com/2014/09/29/gitlab-flow/

    Se incluyen las siguientes puntualizaciones en la Pauta 14,  sobre el manejo de la rama de soporte:

    a. La rama de soporte se crea desde la rama master. Concretamente desde el tag del que se desea mantener una versión en paralelo.

    b. La evolución del producto que vaya a mantenerse viva, estará contenida en las ramas develop y master. La de soporte se utilizará para aquel mantenimiento y/o evolución que tenga una fecha de finalización. 

    c. La rama de soporte realizará funciones de "develop" y "master" para la evolución funcional de la aplicación.

    d. La rama support se crea siguiendo la nomenclatura support/version, teniendo versión como máximo 2 dígitos W.X. , donde W: Identifica el dígito mayor de la versión. X: Identifica el dígito medio de la versión. Será el jefe de proyecto quien decida el nombre de la rama y los dígitos de la misma.

    e. Los tags en la rama support continuarán siendo de 4 dígitos. Sonarqube trabaja con tags, por lo que el análisis de código no se verá afectado.

    f. Cuando se finalice la evolución tecnológica, si es necesario, habrá que "volcar" en develop, la rama soporte. Para hacerlo, se crearán previamente una rama de mejora en develop y una rama de mejora en support,  haciendo el merge de dichas ramas y resolviendo los conflictos u adaptaciones que sean necesarios.

    g. Las ramas de soporte, nunca se cerrarán directamente sobre la rama develop.


    Versiónv01r57Fecha publicación

     

    Fecha entrada en vigor

     

    Alcance
    • Definición de Pautas y validaciones.
    • Se realizan las siguientes puntualizaciones sobre algunas pautas anteriormente definidas:
      •  Se aclara la imposibilidad de release y hotfix en ramas de soporte.
    • Se añaden las siguientes pautas respecto al documento anterior cómo aclaraciones fruto de la mejora continua:
      •  Está permitido entregar ramas internas sobre hotfix con la nomenclatura definida en el P5 para mejoras e historias de usuario, sólo en casos excepcionales cuando el desarrollo se considera urgente. Mas info
      •  Las ramas de soporte, tagearán sobre la misma rama de soporte la versión prevista, sin hacer uso de ramas release.


    Versiónv01r56Fecha publicación

     

    Fecha entrada en vigor

     

    Alcance
    • Versión inicial sobre normativa de git


    1. Introducción

    El objeto de esta normativa, es la definición de las pautas necesarias a seguir para la entrega de código fuente y la correcta ejecución de los procesos de integración continua. Basándose en las mejores prácticas actualmente aplicadas en la industria, se definen pautas de obligado cumplimiento con el objeto de garantizar la homogeneidad, trazabilidad y correcto funcionamiento de todos los procesos previos a la liberación del software en entornos previos y productos.

    La normativa se ha organizado en pautas que describen las reglas de verificación necesarias a cumplir en la entrega de código fuente.

    Para más detalles sobre el modo de articular todas las pautas a continuación expuestas puede consultar la guía de ayuda a las entregas en la STIC.

    1.1 Alcance

    Esta normativa afecta a aquellos desarrollos corporativos que estén bajo el marco de gestión centralizada de la Dirección General de Sistemas de Información y Comunicaciones del SAS.


    2. Listado de pautas


    Ámbito: Commits
    Pauta
    Descripción

    P1

    Ancla
    P1
    P1

    No se permitirá por norma general hacer commits en master, develop o ramas support directamente, para ello se deberán de usar las demás ramas (release, feature,hu) dentro del flujo de Gitflow.

    P2

    Ancla
    P2
    P2

    Cada commit, incluido en una feature, debe incluir en su comentario el código Jira de la issue que corresponda, en caso de no disponer de dicha traza se referenciará el código de solicitud CGES que desencadena el cambio.

    P3

    Ancla
    P3
    P3

    Cada commit, incluido en una release, debe incluir la referencia a la issue de tipo versión especificada en Jira a la cual afecta.

    C1

    Ancla
    C1
    C1

    Cada commit, incluido, debe ser atómico y pequeño, incluyendo solo cambios que están relacionados entre sí. 

    C2

    Ancla
    C2
    C2

    Cada commit, incluirá un mensaje claro y descriptivo conteniendo una primera linea con un máximo de 70 caractéres dónde se da un resumen claro y conciso del cambio. Posteriomente se agregará una descripción resumida con caracter imperativo dónde se aclara "qué" a cambiado y "porqué"
    Ámbito: Trazabilidad
    Pauta
    Descripción

    P4

    Ancla
    P4
    P4


     Se ha de seguir el flujo adaptado de Gitflow para la STIC, dónde cada rama de mejora conlleva la entrega de una rama de tipo feature ( definida en git-flow) con nombre en el formato [feature/{Codigo_Jira_Mejora}_{Descripcion}]. Dónde:

      1. Feature: (Literal) Identifica el tipo de rama que está definido por el flujo adaptado de Gitflow.
      2. Código_Jira_Mejora: (Variable) Identifica el código de la issue que está registrada en Jira y que hace referencia a la Mejora que se entrega en la rama.
        1. Excepción I: En caso de no existir una mejora asociada en Jira por cualquier motivo puede hacer uso del código de CGES que pueda identificar dicha mejora.
      3. Descripción: (Variable) Identifica una muy breve descripción libre donde se resume la mejora.

    P5

    Ancla
    P5
    P5



    Info
    titleAlcance

    No aplica en proyectos en metodología tradicional (no ágil).

    Se ha de seguir el flujo adaptado de Gitflow para la STIC, donde cada rama de historia de usuario, conlleva la entrega de una rama de tipo feature ( definida en git-flow) con nombre en el formato [feature/{Codigo_Jira_Mejora}/{Codigo_Jira_HistoriaUsuario}_{Descripcion}]. Dónde:

      1. Feature: (Literal) Identifica el tipo de rama que está definido por el flujo adaptado de GitFlow.
      2. Código_Jira_Mejora: (Variable) Identifica el código de la issue que está registrada en Jira y que hace referencia a la Mejora que se entrega en la rama.
        1. Excepción I: En caso de no existir una mejora asociada en Jira por cualquier motivo puede hacer uso del código de CGES que pueda identificar dicha mejora.
      3. Código_Jira_HistoriaUsuario: Variable que identifica el código de la issue que está registrada en Jira y que hace referencia a una Historia de Usuario que se entrega en la rama.
      4. Descripción: Variable que identifica una muy breve descripción libre donde se resume la historia de usuario.

    P6

    Ancla
    P6
    P6

    Se ha de seguir el flujo adaptado de Gitflow para la STIC, dónde cada rama de Release cumplirá con la siguiente nomenclatura: [ Release/{Version} ]. Dónde:

      1. Versión: Corresponde a la versión expresada en la issue de Jira Versión, que identifica la versión que se va a liberar para entornos de preproducción y producción. Siguiendo el formato de 4 dígitos W.X.Y.Z


    P7

    Ancla
    P7
    P7

    Se ha de seguir el flujo adaptado de Gitflow para la STIC, donde cada rama de Hotfix cumplirá con la siguiente nomenclatura: [ Hotfix/{Version} ]. Dónde:

      1. Versión: Corresponde a la versión expresada en la issue de Jira Versión, que identifica la versión que se va a liberar para entornos de preproducción y producción conteniendo el hotfix. Siguiendo el formato de 4 dígitos W.X.Y.Z

    P8

    Ancla
    P8
    P8

    Se ha de seguir el flujo adaptado de Gitflow para la STIC, donde cada rama de soporte cumplirá con la siguiente nomenclatura: [ Support/{Version} ]. Dónde:

      1.  Versión: Corresponde a la versión que se mantiene en soporte y que corresponderá con el valor de la versión que haya en el commit desde el que se abre la rama. 
      2.  Versión tiene como máximo 2 dígitos W.X. , donde W: Identifica el dígito mayor de la versión. X: Identifica el dígito medio de la versión. Será el jefe de proyecto quien decida el nombre de la rama y los dígitos de la misma.
      3. Los tags en la rama support continuarán siendo de 4 dígitos W.X.Y.Z. Sonarqube trabaja con tags, por lo que el análisis de código no se verá afectado.
    Ámbito: Gestión de ramas en proyectos basados en metodologías ágiles
    Pauta
    Descripción

    P9

    Ancla
    P9
    P9

    Se ha de seguir el flujo adaptado de Gitflow para la STIC cuando genere una rama para una mejora.  El formato del nombre está definido en P4.

    P10

    Ancla
    P10
    P10

    Se ha de seguir el flujo adaptado de Gitflow para la STIC cuando genere una rama para una historia de usuario.  El formato del nombre está definido en P5.

    P11

    Ancla
    P11
    P11

    Las ramas de historia de usuario se generan y cierran sobre las ramas de mejora en la que están contenidas, con la aceptación de los siguientes criterios al cierre:

      1. Aprobación del DoD: Una vez el DoD está aprobado.

    P12

    Ancla
    P12
    P12

     Las ramas de Mejora permanecerán abiertas siempre, se cerrarán sobre la rama develop tras la aceptación de los siguientes criterios:

      1. Inclusión de la mejora en versión: Una vez la mejora se incluye para la instalación en una versión.

    P13

    Ancla
    P13
    P13

    Las ramas de soporte, permanecerán siempre abiertas, en paralelo a la rama develop, y se comportará como tal, permitiendo la apertura sobre ella de ramas de mejora, historia de usuario.

    P14

    Ancla
    P14
    P14

    Manejo de la rama support  en escenarios que requieren versiones en paralelo (por ejemplo, evolución de la aplicación y evolución tecnológica ejecutadas en paralelo) 

    a. La rama de soporte se crea desde la rama master. Concretamente desde el tag del que se desea mantener una versión en paralelo.

    b. La evolución del producto que vaya a mantenerse viva, estará contenida en las ramas develop y master. La de soporte se utilizará para aquel mantenimiento y/o evolución que tenga una fecha de finalización. 

    c. La rama de soporte realizará funciones de "develop" y "master" para la evolución funcional de la aplicación.

    d. La rama support se crea siguiendo la nomenclatura support/version, teniendo versión como máximo 2 dígitos W.X. , donde W: Identifica el dígito mayor de la versión. X: Identifica el dígito medio de la versión. Será el jefe de proyecto quien decida el nombre de la rama y los dígitos de la misma.

    e. Los tags en la rama support continuarán siendo de 4 dígitos. Sonarqube trabaja con tags, por lo que el análisis de código no se verá afectado.

    f. Cuando se finalice la evolución tecnológica, si es necesario, habrá que "volcar" en develop, la rama soporte. Para hacerlo, se crearán previamente una rama de mejora en develop y una rama de mejora en support,  haciendo el merge de dichas ramas y resolviendo los conflictos u adaptaciones que sean necesarios.

    g. Las ramas de soporte, nunca se cerrarán directamente sobre la rama develop.

    P15

    Ancla
    P15
    P15

    Las ramas hotfix o release se regirán por las nomenclaturas P8, P7 y P6 respectivamente.

    P16

    Ancla
    P16
    P16

    Está permitido entregar ramas internas sobre hotfix con la nomenclatura definida en el P5 para mejoras e historias de usuario, sólo en casos excepcionales cuando el desarrollo se considera urgente. Más info
    Ámbito: Gestión de ramas en proyectos basados en metodologías tradicionales (no ágil)
    Pauta
    Descripción

    P17

    Ancla
    P17
    P17

    Vease P9.

    P18

    Ancla
    P18
    P18

    Vease P12.

    P19

    Ancla
    P19
    P19

    Vease P13.

    P20

    Ancla
    P20
    P20

    Vease P14.

    P21

    Ancla
    P21
    P21

    Vease P15.
    Ámbito: Gestión de tags
    Pauta
    Descripción

    P22

    Ancla
    P22
    P22

    Nunca se nombrarán tags con el sufijo "-Snapshot" o variantes en las ramas  master, support.

    P23

    Ancla
    P23
    P23

    El formato permitido para un tag siempre será del tipo W.X.Y.Z, dónde:

    w. Identifica el dígito mayor de la versión.

    X. Identifica el dígito medio de la versión.

    Y. Identifica el dígito menor de la versión.

    Z. Identifica el dígito de entrega de la versión.

    P24

    Ancla
    P24
    P24

    Excepcionalmente y bajo acuerdo previo entre el área de gobernanza y el proyecto se permitirán versiones de sprint  identificadas con el sufijo SP"n", dónde n identifica el número secuencial del sprint al que representa.

    P25

    Ancla
    P25
    P25

    Excepcionalmente y bajo acuerdo previo entre el área de gobernanza y el proyecto se permitirán versiones candidatas a release, identificadas por el sufijo RC"n", dónde "n" identifica un secuencial exclusivo para las candidatas a release.

    P26

    Ancla
    P26
    P26

    Las ramas de soporte, tagearán sobre la misma rama de soporte la versión prevista, sin hacer uso de ramas release.

    P27

    Ancla
    P27
    P27

    En proyectos que empaquetan haciendo uso de Maven, al tagear sobre el repositorio de código fuente la versión identificada en los artefactos generados ha de ser coincidente con la versión tageada, siguiendo el formato de versión indicado en P23.

    P28

    Ancla
    P28
    P28

    En proyectos que empaquetan haciendo uso de node.js, al tagear sobre el repositorio de código fuente, la versión identificada en los artefactos generados ha de ser coincidente con la versión tageada, siguiendo un formato de 3 dígitos similar al de P23 y prescindiendo del dígito Z. 
    Ámbito: Gestión de la entrega de código
    Pauta
    Descripción

    P29

    Ancla
    P29
    P29

    Las entregas al repositorio de la STIC sólo soportarán como ramas abiertas aquellas que sean del tipo, soporte, develop o master.

    P30

    Ancla
    P30
    P30

    Las ramas de tipo hotfix o release, así como cualquier otra rama que haya sido de uso interno en su repositorio empresarial, deben haberse cerrado correctamente sobre las ramas de soporte o develop, previamente a su entrega al repositorio de la STIC.

    P31

    Ancla
    P31
    P31

    Al entregar, la rama MASTER estará como máximo al mismo nivel que la rama DEVELOP, nunca la rama MASTER podrá estar por encima de la rama DEVELOP. En todo caso la rama DEVELOP sí que podrá estar por encima de la rama MASTER, dado su carácter de rama de trabajo.

    P32

    Ancla
    P32
    P32

    Cuando se realice una entrega de una nueva versión, deberá existir el TAG (desde la rama MASTER) correspondiente a dicha versión.

    P33

    Ancla
    P33
    P33

    Nunca se entregarán tags al repositorio de la stic que no cumplan escrupulosamente con las reglas definidas en P22.



    7. Recomendaciones

    Para un correcto uso de GIT recomendamos:

  • Realizar los commits necesarios siempre en el intervalo de los diferentes evolutivos.
  • Comentar correctamente los diferentes commits indicando a alto nivel las modificaciones realizadas.
  • Nunca trabajar en la rama master, se recomienda utilizar ramas para diferentes evolutivos
  • Almacenar sólo el código y no otro tipo de documentos o entregables.
  • Desarrollar siguiendo los estándares de codificación (code clean).
  • Ejecutar pruebas unitarias antes de realizar los commits.
  • Usar un flujo de trabajo, por ejemplo gitflow