Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagepowershell
linenumberstrue
# 프로젝트 키로 조회(최대 200개 repository까지 반영, 기존에 webhook 하나라도 존재 시 실행 안함)
$projectkey=""

#Url 및 api 주소
$base_url = ""
$get_repo_list = "/rest/api/latest/projects/${projectkey}/repos?limit=200"

# admin 계정 정보
$user =""
$password = ""

$LogArray = @()
# SSL 인증서 오류 일 경우, SSL 인증서 문제 없을 경우 해당 부분 필요 X
Add-Type @"
    using System.Net;
    using System.Security.Cryptography.X509Certificates;
    public class TrustAllCertsPolicy : ICertificatePolicy {
        public bool CheckValidationResult(
            ServicePoint srvPoint, X509Certificate certificate,
            WebRequest request, int certificateProblem){
                return true;
            }
    }
"@
[System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls, [Net.SecurityProtocolType]::Tls11, [Net.SecurityProtocolType]::Tls12, [Net.SecurityProtocolType]::Tls13, [Net.SecurityProtocolType]::Ssl3

# 인증 인코딩
function Get-BasicAuthCreds {
    param([string]$Username, [string]$Password)
    $AuthString = "{0}:{1}" -f $Username,$Password
    $AuthBytes  = [System.Text.Encoding]::ASCII.GetBytes($AuthString)
    return [Convert]::ToBase64String($AuthBytes)
}
$BasicCreds = Get-BasicAuthCreds -Username $user -Password $password;

# 저장소 정보 가져오기
$get_repo = Invoke-WebRequest -Uri "${base_url}${get_repo_list}" -Method Get -ContentType 'application/json' -Headers @{"Authorization"="Basic $BasicCreds"}
# 조회 값 UTF-8, 및 json으로 변환
$repos = [System.Text.Encoding]::UTF8.GetString($get_repo.RawContentStream.ToArray()) | ConvertFrom-Json

#저장소별로 webhook 주기
$repos.values | ForEach-Object{
    $reposlug = $_.slug
    $reponame = $_.name
    $webhook_api = "/rest/api/latest/projects/${projectkey}/repos/${reposlug}/webhooks"

    #기존 저장소 webhook 조회
    $search = Invoke-WebRequest -Uri "${base_url}${webhook_api}" -Method Get -ContentType 'application/json' -Headers @{"Authorization"="Basic $BasicCreds"}

    #기존 저장소 webhook 갯수 조회
    if(($search.Content | ConvertFrom-Json).size -lt 1){
        #고정된 값 넣을 시 해당 내용
        $Body = '{"name":"pullRequest_opened", "events":["pr:opened"], "configuration":{}, "url": "https://test.test.com", "active":true, "statistice":{}}'
        #json 타입에 변수 지정 시 변수 사이에 '과 + 사용
        #$Body = '{"name":"' + ${test} + '", "events":["pr:opened"], "configuration":{}, "url": "https://test.test.com", "active":true, "statistice":{}}'

        #webhook 넣기
        Invoke-WebRequest -Uri "${base_url}${webhook_api}" -Method Post -ContentType 'application/json' -Headers @{"Authorization"="Basic $BasicCreds"} -Body $Body

        $LogArray += "Action. Repository Name: ${reponame} make webhook"
    } else {
        $LogArray += "No Action. Repository Name: ${reponame} already existexists webhook"
    }
}
$LogArray


  • 해당 Script 설명
    2번 줄: 프로젝트 키
    5번 줄: Bitbucket url(끝에 / 붙이면 안됨)
    9~10줄: admin 권한 가진 user, password 입력
    14~26줄: SSL 인증서 오류인 웹페이지일 경우 해당 내용 사용
    54~65줄: Webhook 내용
    기존 존재하는 webhook 참고방법:  (Invoke-WebRequest -Uri "${base_url}${webhook_api}" -Method Get -ContentType 'application/json' -Headers @{"Authorization"="Basic $BasicCreds"}).Content | ConvertFrom-Json)

...