2012-05-22 30 views
43

Tengo un script que elimina y vuelve a crear trabajos a través de llamadas HTTP curl y quiero deshacerme de cualquier "nombre de usuario: contraseña" codificado. P. ej. curl -X POST $url --user username:password¿Cómo se pueden "pasar" los detalles de autenticación de un usuario de Jenkins a un script que usa la API de Jenkins para crear trabajos?

Consideraciones:

  • Jenkins CLI (probablemente no es una opción). Uno debería ser capaz de lograr lo mismo con la CLI que con Jenkins API (creando trabajos, etc.) pero por lo que yo entiendo, Jenkins CLI no es una buena alternativa para mí, ya que los trabajos creados solo aparecerán en Jenkins después de reiniciar o " Recargar configuración desde disco ", y eso cancelaría cualquier otro trabajo en ejecución.

  • API token. No se puede encontrar la manera de llegar contadores al usuario y luego pasarlo como un parámetro para el guión, pero que puede ser una solución ..

+0

mejor para añadir que el lenguaje script de qué prefieres –

Respuesta

6
  • Con Jenkins CLI que no tiene que recargar todo: solo puede cargar el trabajo (update-job comando). No puede usar tokens con CLI, AFAIK; debe usar contraseña o archivo de contraseña.

  • El nombre del token para el usuario se puede obtener a través de http://<jenkins-server>/user/<username>/configure - presione el botón 'Mostrar token de API'.

  • Aquí hay un link on how to use API tokens (usa wget, pero curl es muy similar).

+0

Gracias, Sabiendo que CLI haría trabajar sin volver a cargar conf de disco es bueno, pero luego tendría que hacer un nuevo guión. El uso de token sería mejor, creo, pero no veo por ejemplo en la página vinculada cómo podría pasar el api-token para el usuario a la variable TOKEN en, por ejemplo, '... ob/build? token = TOKEN' – HenrikSN

+0

No estoy seguro de lo que está preguntando. ¿Esta ayuda [esta ayuda] (https://wiki.jenkins-ci.org/display/JENKINS/Remote+access+API)? (Consulte la sección * Envío de trabajos *). –

+2

Como administrador, ¿cómo obtengo un token de API para un usuario que no sea yo, sin iniciar sesión como ellos? Cuando visito la página que citas, todo lo que veo es que "Token está oculto". –

61

Trate de esta manera: (por ejemplo, eliminar el trabajo)

curl --silent --show-error http://<username>:<api-token>@<jenkins-server>/job/<job-name>/doDelete 

la API token se puede obtener de http://<jenkins-server>/user/<username>/configure.

+3

Como administrador, ¿cómo obtengo un token de API para un usuario que no sea yo, sin iniciar sesión como ellos? Cuando visito la página que citas, todo lo que veo es que "Token está oculto". –

2

Si desea escribir un script para automatizar la creación de trabajos utilizando la API de Jenkins, puede usar uno de los clientes de la API para hacerlo. Un cliente de rubí para Jenkins está disponible en https://github.com/arangamani/jenkins_api_client

gem install jenkins_api_client 

require "rubygems" 
require "jenkins_api_client" 

# Initialize the client by passing in the server information 
# and credentials to communicate with the server 
client = JenkinsApi::Client.new(
    :server_ip => "127.0.0.1", 
    :username => "awesomeuser", 
    :password => "awesomepassword" 
) 

# The following block will create 10 jobs in Jenkins 
# test_job_0, test_job_1, test_job_2, ... 
10.times do |num| 
    client.job.create_freestyle(:name => "test_job_#{num}") 
end 

# The jobs in Jenkins can be listed using 
client.job.list_all 

El cliente de la API se puede utilizar para llevar a cabo una gran cantidad de operaciones.

6

que tenía que agregar explícitamente POST en el comando curl:

curl -X POST http://<user>:<token>@<server>/safeRestart 

También tengo el SafeRestart Plugin instalado, en caso de que eso marque la diferencia.

12

Esto funcionó para mí:

curl -u $username:$api_token -FSubmit=Build 'http://<jenkins-server>/job/<job-name>/buildWithParameteres?environment=' 

token de la API se puede obtener de configuración de usuario Jenkins.

+4

Como administrador, ¿cómo obtengo un token de API para un usuario que no sea yo, sin iniciar sesión como ellos? Cuando visito la configuración de usuario de Jenkins, todo lo que veo es que "Token está oculto". –

+2

Estoy usando Active Directory para la autenticación y no parece que me permita iniciar sesión como usuarios locales para ver el token. – TekiusFanatikus

+1

Esto tampoco funciona con la Autenticación de Google. –

0

Para utilizar tokens API, los usuarios deberán obtener sus propios tokens, cada uno de https://<jenkins-server>/me/configure o https://<jenkins-server>/user/<user-name>/configure. Depende de usted, como autor del script, determinar cómo los usuarios suministran el token al script. Por ejemplo, en una secuencia de comandos Bourne Shell ejecuta de forma interactiva dentro de un repositorio Git, donde .gitignore contiene /.jenkins_api_token, es posible hacer algo como:

api_token_file="$(git rev-parse --show-cdup).jenkins_api_token" 
api_token=$(cat "$api_token_file" || true) 
if [ -z "$api_token" ]; then 
    echo 
    echo "Obtain your API token from $JENKINS_URL/user/$user/configure" 
    echo "After entering here, it will be saved in $api_token_file; keep it safe!" 
    read -p "Enter your Jenkins API token: " api_token 
    echo $api_token > "$api_token_file" 
fi 
curl -u $user:$api_token $JENKINS_URL/someCommand 
Cuestiones relacionadas