Cómo etiquetar el código fuente usando gitlabCI

13

Tenemos gitlab nuevo en nuestro entorno e intentamos crear algunas canalizaciones de CD de CI utilizando gitlab CI. Tengo un mejor progreso en la ejecución de algunos objetivos de Maven, creando tuberías y archivando artefactos usando mi .gitlab-ci.yml como se muestra a continuación. Traté de dar etiquetas después de la secuencia de comandos que no funciona. Ahora, estoy tratando de descubrir cómo puedo automatizar las etiquetas git a mi código fuente. Me gustaría crear una etiqueta para el código fuente después de que la rama maestra obtuviera una compilación exitosa. Estamos utilizando versiones semánticas para etiquetar nuestro código fuente. Finalmente, cada vez que el maestro tiene una compilación exitosa, me gustaría crear una etiqueta para mi rama maestra.

image: maven:3.5-jdk-8-alpine

stages:
 - build
 - deploy
 - tag

maven_build:
  stage: build

  script:
   - mvn clean package
artifacts:
 paths:
 - target/*.jar

after_script:
   - ls -a
   - cd target && ls -a
   - git --version
   - git tag -a 1.0.15 -m "Version created by gitlab-ci Build"
   - git push origin 1.0.15
only:
  - master

registros:

Running after script...
$ ls -a
.
..
.git
.gitignore
.gitlab-ci.yml
 LICENSE
README.md
pom.xml
src
target
$ cd target && ls -a
.
..
apidocs
classes
generated-sources
generated-test-sources
javadoc-bundle-options
maven-archiver
maven-simple-0.2-SNAPSHOT-javadoc.jar
maven-simple-0.2-SNAPSHOT-sources.jar
maven-simple-0.2-SNAPSHOT.jar
maven-status
surefire-reports
test-classes
Uploading artifacts...
target/maven-simple-0.2-SNAPSHOT-javadoc.jar: found 1 matching files 
Uploading artifacts to coordinator... ok            id=60598296 
responseStatus=201 Created token=Gu-eH1es

Trabajo tuvo éxito

pandey
fuente
Agregue el registro
030
se adjuntan los registros @ 030
pandey

Respuestas:

7

Intenté cambiar la imagen del acoplador y agregué un par de pasos para la etiqueta git. A continuación, la respuesta funcionó para mí.

image: maven

stages:
- build
- deploy
- tag

maven_build:
stage: build

  script:
   - mvn clean package
   artifacts:
  paths:
   - target/*.jar

  after_script:
   - ls -a
   - cd target && ls -a
   - git --version
   - git remote remove origin
   - git remote set-url origin https://"username:passwd"@gitlab.com/accountname/projectname
   - git tag -a 1.0.15 -m "Version created by gitlab-ci Build"
   - git push origin 1.0.15
  only:
    - master
pandey
fuente
2
Si desea establecer el origen en un token de acceso de Gitlab, use oauth2:${GITLAB_ACCESS_TOKEN}como autenticación básica.
Overbryd
1
También me gustaría señalar que no es necesario eliminar el origin, puede simplemente git remote add api-origin https://...eso afeita de una línea. Más tarde use ese nuevo origen en git push api-origin 1.0.15.
Overbryd
1
Y necesitaba agregar dos líneas, git config user.email "${GITLAB_USER_EMAIL}"y git config user.name "${GITLAB_USER_NAME}"hacer que empujara bien.
Overbryd
1
también puede omitir una ejecución de trabajo / tubería agregando -o ci.skipsu comando git push
Nicolas Pepinster
1

git push origin 1.0.15 debería funcionar y se debería agregar una nueva etiqueta a las etiquetas en gitlab

https://docs.gitlab.com/ee/university/training/topics/tags.html

git checkout master

# Lightweight tag
git tag my_lightweight_tag

# Annotated tag
git tag -a v1.0 -m ‘Version 1.0’
git tag

git push origin --tags
030
fuente
2
Creo que el corredor solo obtiene una clave de lectura para clonar el repositorio, el corredor no podrá rechazar el repositorio IIRC
Tensibai
Podría ser posible, pero esto no se muestra en el registro. @pandey ¿Podría publicar el registro completo?
030
@ 030 los comandos git no funcionan cuando lo definí después del script ... ¿necesito crear como trabajo1 y trabajo 2?
pandey
Si git está instalado en la imagen del acoplador y la autenticación se realiza correctamente, entonces debería funcionar.
030
@ 030 En general, esto no funcionará, el corredor en realidad solo tiene acceso de solo lectura al repositorio. El error en los registros se ve así:$ git push origin --tags \nremote: You are not allowed to upload code.
Ken Williams
0

Me encuentro en la misma situación, donde después de publicar una compilación de un artefacto, quiero etiquetar el commit con una etiqueta de número de versión.

Una solución que estoy considerando es crear un servicio (ya sea dentro o fuera de GitLab) que sea capaz de empujar una etiqueta a cualquier repositorio, pero no puede hacer nada más . El servicio en sí mismo tendría credenciales que le permitirían escribir en repositorios, por lo que no es necesario que cada compilación del proyecto tenga acceso de escritura al repositorio.

Me gusta esta solución porque GitLab no parece ofrecer un nivel de permiso que pueda insertar etiquetas en confirmaciones existentes, sin otorgar también la capacidad de impulsar confirmaciones que contengan contenido nuevo. El acceso de escritura genérico es más permiso de lo que necesitamos o queremos para este caso de uso, por lo que si lo tuviéramos, probablemente tendríamos que limitar el alcance creando un usuario o un token para cada repositorio con permisos para comprometerse solo con ese repositorio. Luego, tendríamos que administrar todos esos usuarios o tokens con el tiempo, lo que parece que podría ser difícil de manejar.

Ken Williams
fuente