Jenkins에 등록한 모든 계정의 이메일 주소 받기

6891 단어 JenkinsGroovyjq

실행 환경


  • Mac OSX Yosemite
  • Jenkins 1.598

  • 주제



    Jenkins에 등록한 모든 사용자의 이메일 주소를 검색하는 스크립트입니다.

    Jenkins 사용자에게 일제히 연락이 필요할 때 사용할 수 있습니다.
    적당한 우편 목록이 없을 때에도.

    get_jenkins_user_address.sh
    apiuser="Your User Name"
    token="Your access tokeen"
    jenkins_url="Your jenkins url"
    
    curl_opt="-sS -u ${apiuser}:${token}"
    
    curl ${curl_opt} ${jenkins_url}/asynchPeople/api/json | jq -r '.users | map(select(.user.fullName != ""))[].user.absoluteUrl' | while read user_url
    do
      curl ${curl_opt} ${user_url}/api/json | jq -r ".property[] | select(.address != null).address" >> mails.txt
    done
    

    자체 계정 토큰은 http://${YOUR_JENKINS}/user/${YOUR_ACCOUNT}/configure 에서 볼 수 있습니다.
    뭐, Admin 권한이 있으면, 누구의 토큰이라고 볼 수 버립니다만....

    또한 json 파서 명령 jq가 필요합니다.
    select(.user.fullName != "")Jenkins에 따라 불필요한 사람 (또는 서비스)의 이메일 주소가 포함될 수 있습니다.

    뱀발



    커맨드로 취득할 수 있으면, 송신도 Jenkins로 실시하면 자동화할 수 있네요.

    EnvInject를 사용하여 캡처



    개요
  • Shellの実行에서 위의 스크립트를 실행하고
  • EnvInject를 사용하여 빌드시 환경 변수로 캡처하고
  • 메일 통지 기능에, 그 환경 변수를 돌진해 준다



  • 어떠한 로컬 아래라고 해도, 계정명이나 토큰을 노출시키는 것은 저항이 있었으므로, Mask Passwords Plugin 를 사용했습니다.



    쉘에서 골고루하고 parameter 파일을 만듭니다.
    최근 Jenkins 씨는 색칠해주게 되었습니다. 훌륭합니다.

    만든 파일을 EnvInject Plugin 로 로드합니다.

    그리고는, 메일을 송신하기 위해 일부러 exit 1 그리고 실패시킵니다.



    메일 알림 설정입니다.
    이 상태에서는 환경 변수 mails 가 어떠한 실수로 정의되지 않았을 때 E-mail: ${mails} 에 메일을 보내려고 하면 이상하게 됩니다.
    내 환경에서는 도메인 이름이 마음대로 더 이상하게 되었기 때문에 mails 매개 변수는 매개 변수가 있는 빌드로 미리 정의해 두는 것이 좋습니다.



    이런 느낌이 듭니다.
    일단, 나 개인의 주소는 흐리게 했습니다.

    Workflow Plugin의 경우



    모처럼이므로 Workflow Plugin에서도 시도해 보았습니다.
    api를 두드리는 것은 마도로코시하지 않고, Groovy로 Jenkins 님으로부터 메일 일람을 취득하고 있습니다.
    emails = []
    for (int i = 0; i < User.getAll().size(); i++) {
      prop = User.getAll()[i].getProperty(hudson.tasks.Mailer.UserProperty.class)
      if (prop.hasExplicitlyConfiguredAddress()){
        emails.push(prop.getExplicitlyConfiguredAddress())
      }
    }
    
    /* Ideal
    emails = User.getAll().collect {
      prop = it.getProperty(hudson.tasks.Mailer.UserProperty.class)
      prop.getExplicitlyConfiguredAddress()
    } - null
    */
    
    emails = emails.join(', ')
    
    mail bcc: '', body: 'This is test mail', cc: '', charset: '', from: '', subject: 'This is test mail', to: emails
    



    workflow plugin 때만, collect 가 예상외의 움직임을 했으므로, 어쩌면 for文 를 사용하고 있습니다.
    # 루프가 1 요소 밖에 돌지 않는다
    # 자세한 내용이 있으면 알려주세요 ...

    뱀발 2



    솔직하게 메일링리스트 만드는 편이 훨씬 편리합니다.

    좋은 웹페이지 즐겨찾기