如何将 Jenkins 用户身份验证详细信息“传递”到使用 Jenkins API 创建工作的脚本?

我有一个脚本,可以通过 curl HTTP 调用删除和重新创建作业,我想摆脱任何硬编码的“用户名: 密码”。 例如 curl -X POST $url --user username:password

考虑因素:

  • Jenkins CLI (可能不是一个选项)。 使用 CLI 应该能够达到与使用 Jenkins API (创建作业等)相同的效果,但据我所知,Jenkins CLI 对我来说不是一个好的替代方案,因为使用它创建的作业只会在重新启动或“从磁盘重新加载配置”之后出现在 Jenkins 中,这将取消任何其他正在运行的作业。

  • API 标记 。无法找到如何获取用户标记并传递它 作为脚本的参数,但这可能是一个解决方案. .

141270 次浏览
  • 使用 Jenkins CLI,您不必重新加载所有内容-您只需加载作业(更新工作命令)。你不能使用与 CLI,AFAIK 令牌-你必须使用密码或密码文件。

  • 用户的令牌名称可以通过 http://<jenkins-server>/user/<username>/configure-按“显示 API 令牌”按钮获得。

  • 这是一个 关于如何使用 API 令牌的链接(它使用 wget,但是 curl非常相似)。

尝试这种方法: (例如删除作业)

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

Api 标记可以从 http://<jenkins-server>/user/<username>/configure获得。

如果您希望编写一个脚本来使用 Jenkins API 自动创建作业,那么您可以使用其中一个 API 客户端来实现这一点。Jenkins 的 Ruby 客户端可以在 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

API 客户机可用于执行许多操作。

从 API 的角度来看,API 令牌与密码相同,请参见源代码 使用令牌代替 API 的密码

请在我的问题 Python-jenkins 或 jenkinsapi for jenkins 远程访问 Python 中的 API中查看相关答案

文档中描述了其他使用 http 基本身份验证模型的方法

我需要在 CURL 命令中显式添加 POST:

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

我还安装了 安全重启插件,以防有什么不同。

这对我很有效:

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

API 令牌可以从 Jenkins 用户配置中获得。

为了使用 API 令牌,用户必须获得自己的令牌,每个令牌都来自 https://<jenkins-server>/me/configurehttps://<jenkins-server>/user/<user-name>/configure。作为脚本的作者,您可以决定用户如何向脚本提供令牌。例如,在 Git 存储库(其中 .gitignore包含 /.jenkins_api_token)中交互式运行的 Bourne Shell 脚本中,您可以执行以下操作:

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