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.

Creando un almacenamiento temporal de secretos en Jenkins para la compilación actual.

No puedo guardar mis credenciales en Jenkins debido a la política de la empresa. Pero puedo utilizar almacenamiento externo para guardar mis credenciales.
¿Cómo puedo crear un almacenamiento temporal de credenciales en Jenkins para la build actual de forma que pueda utilizar los plugins?

import jenkins.model.Jenkins
import com.cloudbees.plugins.credentials.domains.Domain
import com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey
import com.cloudbees.plugins.credentials.CredentialsScope

instance = Jenkins.instance
domain = Domain.global()
store = instance.getExtensionList(
  "com.cloudbees.plugins.credentials.SystemCredentialsProvider")[0].getStore()

privateKey = new BasicSSHUserPrivateKey.DirectEntryPrivateKeySource(
  '''
PRIVATE_KEY_TEXT
  '''
)

sshKey = new BasicSSHUserPrivateKey(
  CredentialsScope.USER,
  "SECRET_TEXT",
  "PRIVATE_KEY_USERNAME",
  privateKey,
  "PRIVATE_KEY_PASSPHRASE",
  "SECRET_DESCRIPTION"
)

// sshKey se guardará en el almacenamiento de Jenkins :(
store.addCredentials(domain, sshKey) 

Intenté crear un def scp = new SystemCredentialsProvider y scp.addCredentials(domain, sshKey), pero cuando intento utilizar withCredentials(... credetialsId: 'PRIVATE_KEY_USERNAME') obtengo un error que las credenciales no se encuentran.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para crear un almacenamiento de secretos temporal en Jenkins para la compilación actual, puede utilizar el bloque withCredentials en su archivo Jenkins junto con el plugin credentials. Esto le permite cargar temporalmente las credenciales en el entorno para una sección específica del código, sin almacenarlas permanentemente en Jenkins.

    Aquí está un ejemplo de la sintaxis del archivo Jenkins:

    withCredentials([sshUserPrivateKey(
        credentialsId: 'PRIVATE_KEY_USERNAME',
        keyFileVariable: 'KEY_FILE',
        passphraseVariable: 'KEY_PASSPHRASE',
        usernameVariable: 'SSH_USERNAME'
    )]) {
        // el bloque de código que necesita las credenciales está aquí
    }
    

    Este bloque cargará las credenciales sshUserPrivateKey con el ID PRIVATE_KEY_USERNAME y las hará disponibles al bloque de código siguiente a través de las variables KEY_FILE, KEY_PASSPHRASE y SSH_USERNAME. Tenga en cuenta que las credenciales no se almacenan permanentemente en Jenkins, sino que se cargan durante la duración de este bloque.

    También puede utilizar otros tipos de credenciales, como usernamePassword, en el bloque withCredentials según sea necesario.

    En general, este enfoque le permite cumplir con las políticas de la empresa al no almacenar credenciales permanentemente en Jenkins, mientras todavía puede usarlas para compilaciones y despliegues temporales.

Comments are closed.