es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Jenkins: Trabajo de canalización con SCM y script estático.

Me encantaría usar Jenkins job-dsl pipelineJob para crear un trabajo de construcción para un repositorio de GitHub con una tubería estática (y mantenida centralmente).

Pero al mirar la documentación (https://jenkinsci.github.io/job-dsl-plugin/#path/javaposse.jobdsl.dsl.DslFactory.pipelineJob-definition), puedo crear un cps con un script estático o un cpsScm con un SCM y una referencia al Jenkinsfile en el repositorio.

El requisito de tener SCM definido proviene del complemento gitParameter, que quiero usar para elegir una revisión de git.

¿Hay alguna forma de usar un script estático para la tubería junto con el SCM?

Actualización:
Esto es concretamente lo que me gustaría hacer:

  • Definir un trabajo de tubería
  • Usar un parámetro de git para seleccionar la revisión
  • Declarar el script específico en línea.
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no es posible usar un script estático para el pipeline junto con SCM. La definición cpsScm requiere una referencia al Jenkinsfile en el repositorio, lo que significa que el script debe mantenerse en el repositorio mismo.

    Una solución alternativa para esta situación podría ser mantener un repositorio separado que contenga únicamente el script Jenkinsfile y configurar la sección scm de la definición cpsScm para que haga referencia a este repositorio. De esta manera, aún puede mantener el script de forma centralizada y tener la flexibilidad de utilizar el complemento gitParameter para seleccionar la revisión de git.

    Aquí tienes un ejemplo de cómo podrías modificar la definición del pipeline para lograr esto:

    pipelineJob("test") {
      parameters {
        gitParameter {
          name('revision')
          type('PT_BRANCH_TAG')
          defaultValue('origin/master')
          selectedValue('DEFAULT')
          description('')
          branch('')
          branchFilter('')
          tagFilter('')
          useRepository('')
          quickFilterEnabled(true)
        }
      }
      logRotator {
        numToKeep(50)
      }
      definition {
        cpsScm {
          scm {
            git {
              remote {
                github('<mi-repo>')
                credentials('github')
              }
              branch("$revision")
            }
            scriptPath('<ruta-al-repositorio-jenkinsfile>/Jenkinsfile')
          }
        }
      }
    }
    

    En esta definición modificada, la opción scriptPath especifica la ruta al Jenkinsfile en el repositorio separado.

    Ten en cuenta que esta solución alternativa añade una capa adicional de complejidad, así que asegúrate de evaluar los beneficios frente a los costos antes de implementarla.

Comments are closed.