IT TIP

Jenkins 사용자 인증 세부 정보를 Jenkins API를 사용하여 작업을 생성하는 스크립트에 어떻게 "전달"할 수 있습니까?

itqueen 2020. 11. 30. 20:32
반응형

Jenkins 사용자 인증 세부 정보를 Jenkins API를 사용하여 작업을 생성하는 스크립트에 어떻게 "전달"할 수 있습니까?


curl HTTP 호출을 통해 작업을 삭제하고 다시 만드는 스크립트가 있으며 하드 코딩 된 "username : password"를 제거하고 싶습니다. curl -X POST $url --user username:password

고려 사항 :

  • Jenkins CLI (아마도 옵션이 아님). Jenkins API (작업 생성 등)와 마찬가지로 CLI를 사용하여 동일한 작업을 수행 할 수 있어야하지만으로 생성 된 작업은 다시 시작하거나 "다시로드 한 후에 만 ​​Jenkins에 나타나기 때문에 Jenkins CLI는 나에게 좋은 대안이 아니라는 것을 이해합니다. 디스크에서 구성 "을 선택하면 실행중인 다른 작업이 취소됩니다.

  • API 토큰 . 사용자 토큰을 가져 와서 스크립트에 매개 변수로 전달하는 방법을 찾을 수 없지만 그게 해결책 일 수 있습니다.


다음 방법을 시도해보십시오. (예 : 작업 삭제)

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

API 토큰은에서 얻을 수 있습니다 http://<jenkins-server>/user/<username>/configure.


이것은 나를 위해 일했습니다.

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

API 토큰은 Jenkins 사용자 구성에서 얻을 수 있습니다.


CURL 명령에 POST를 명시 적으로 추가해야했습니다.

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

차이가 나는 경우를 대비 하여 SafeRestart 플러그인도 설치했습니다.


  • Jenkins CLI를 사용하면 모든 것을 다시로드 할 필요가 없습니다. 작업을로드하기 만하면됩니다 ( update-job 명령). CLI, AFAIK에서는 토큰을 사용할 수 없습니다. 비밀번호 또는 비밀번호 파일을 사용해야합니다.

  • 사용자의 토큰 이름은 http://<jenkins-server>/user/<username>/configure'Show API token'버튼을 눌러 얻을 수 있습니다 .

  • 다음은 API 토큰을 사용하는 방법에 대한 링크입니다 (를 사용 wget하지만 curl매우 유사 함).


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 remote access API in python 에서 @coffeebreaks의 관련 답변을 참조하십시오.

기타는 http 기본 인증 모델을 사용하는 문서에 설명되어 있습니다.


API 토큰을 사용하려면 사용자는 각각 https://<jenkins-server>/me/configure또는 에서 고유 한 토큰을 얻어야합니다 https://<jenkins-server>/user/<user-name>/configure. 사용자가 스크립트에 토큰을 제공하는 방법을 결정하는 것은 스크립트 작성자의 몫입니다. 예를 들어 Git 저장소 내에서 대화 형으로 실행되는 Bourne Shell 스크립트에서이 .gitignore포함 된 /.jenkins_api_token경우 다음과 같은 작업을 수행 할 수 있습니다.

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

참고 URL : https://stackoverflow.com/questions/10698419/how-can-a-jenkins-user-authentication-details-be-passed-to-a-script-which-uses

반응형