web-dev-qa-db-ja.com

Jenkinsユーザー認証の詳細を、Jenkins APIを使用してジョブを作成するスクリプトに「渡す」ことができますか?

Curl HTTPコールを介してジョブを削除および再作成するスクリプトがあり、ハードコードされた「username:password」を削除したい。例えば。 curl -X POST $url --user username:password

考慮事項:

  • Jenkins CLI(おそらくオプションではない)。 Jenkins API(ジョブの作成など)とCLIで同じことを達成できるはずですが、Jenkins CLIは、再起動または「再読み込みディスクからの構成」を選択すると、実行中の他のジョブはキャンセルされます。

  • APIトークン。ユーザートークンを取得して、それをパラメーターとしてスクリプトに渡す方法を見つけることができませんが、それは解決策かもしれません。

60
HenrikSN

この方法を試してください:(たとえば、ジョブを削除します)

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

APIトークンはhttp://<jenkins-server>/user/<username>/configureから取得できます。

75
PiotrO

これは私のために働いた:

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

APIトークンは、Jenkinsユーザー構成から取得できます。

23
Deepti

CURLコマンドにPOSTを明示的に追加する必要がありました。

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

SafeRestart Plugin もインストールされているので、違いが生じる場合があります。

7
lindon fox
  • Jenkins CLIを使用すると、すべてをリロードする必要はありません-ジョブをロードできます(update-jobコマンド)。 CLIでトークンを使用することはできませんが、パスワードまたはパスワードファイルを使用する必要があります。

  • ユーザーのトークン名は、http://<jenkins-server>/user/<username>/configureから取得できます-[APIトークンの表示]ボタンを押します。

  • APIトークンの使用方法に関するリンク です(wgetを使用しますが、curlは非常に似ています)。

6
malenkiy_scot

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クライアントを使用して、多くの操作を実行できます。

2
arangamani

APIトークンは、APIの観点から見るとパスワードと同じです。ソースコードを参照してください APIのパスワードの代わりにトークンを使用

私の質問の@coffeebreaksからの関連する答えを参照してください pythonのjenkinsリモートアクセスAPIのpython-jenkinsまたはjenkinsapi

その他は、HTTP基本認証モデルを使用するためにドキュメントで説明されています

1
Larry Cai

APIトークンを使用するには、ユーザーはそれぞれhttps://<jenkins-server>/me/configureまたはhttps://<jenkins-server>/user/<user-name>/configureから独自のトークンを取得する必要があります。ユーザーがスクリプトにトークンを提供する方法を決定するのは、スクリプトの作成者の責任です。たとえば、.gitignore/.jenkins_api_tokenが含まれるGitリポジトリ内で対話的に実行される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
0
Amir