run - ¿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?
parametros jenkins (7)
El token de la API es lo mismo que la contraseña desde el punto de vista de la API . El código fuente utiliza token en lugar de contraseñas para la API .
Vea la respuesta relacionada de @coffeebreaks en mi pregunta python-jenkins o jenkinsapi para la API de acceso remoto de jenkins en python
Otros se describen en doc para utilizar el modelo de autenticación básica http
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. Ej curl -X POST $url --user username:password
Consideraciones:
Jenkins CLI (probablemente no sea una opción). Uno debería ser capaz de lograr lo mismo con la CLI que con Jenkins API (crear 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 una "Recarga" Configuración desde disco ", y eso cancelaría cualquier otro trabajo en ejecución.
Token de API . No se puede averiguar cómo obtener el token del usuario y luego pasarlo como un parámetro al script, pero eso puede ser una solución.
Esto funcionó para mí:
curl -u $username:$api_token -FSubmit=Build ''http://<jenkins-server>/job/<job-name>/buildWithParameteres?environment=''
El token API se puede obtener de la configuración de usuario de Jenkins.
Necesitaba agregar explícitamente POST en el comando CURL:
curl -X POST http://<user>:<token>@<server>/safeRestart
También tengo el complemento SafeRestart instalado, en caso de que eso marque la diferencia.
Para usar tokens de API, los usuarios deberán obtener sus propios tokens, cada uno desde 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 de Bourne Shell que se ejecuta interactivamente dentro de un repositorio de Git, donde .gitignore
contiene /.jenkins_api_token
, puede 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
Pruebe de esta manera: (por ejemplo, elimine el trabajo)
curl --silent --show-error http://<username>:<api-token>@<jenkins-server>/job/<job-name>/doDelete
La api-token se puede obtener desde http://<jenkins-server>/user/<username>/configure
.
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 Ruby 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 API puede usarse para realizar muchas operaciones.
Con Jenkins CLI no tiene que volver a cargar todo; solo puede cargar el trabajo (comando update-job ). 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 del botón
http://<jenkins-server>/user/<username>/configure
- push on ''Show API token''.Aquí hay un enlace sobre cómo usar tokens API (usa
wget
, perocurl
es muy similar).