spring

[Spring/Jenkins] 젠킨스 Rest API로 젠킨스 Job 실행

moonsiri 2022. 7. 4. 16:58
728x90
반응형

젠킨스 Rest API를 이용하여 젠킨스 Job을 실행하는 방법을 알아보겠습니다.

 

1. 젠킨스 계정 API Token 생성

계정 > 설정 > API Token > Add new Token

원하는 이름으로 생성한 뒤 토큰을 복사해주세요. (복사하지 않으면 토큰을 알 수가 없음. 토큰명은 의미 없음.)

 

 

2. Item에 Token 추가

view > item > 구성 > 빌드 유발

빌드를 원격으로 유발 (예: 스크립트 사용)을 체크한 뒤 복사한 토큰을 붙여 넣기 해주세요.

 

 

3. curl로 job 실행 테스트

curl -X POST [젠킨스 서버 URL]/job/[job 이름]/buildWithParameters --user [젠킨스 user id]:[user password] --data token=[생성한 job token] --data [설정한 매개변수 명]=[콤마로 구분한 서버 설정명 리스트]

 

 

4. RestTemplate 통신 방법

basic auth로 젠킨스 계정 정보 넣은 뒤 get으로 호출하면 됩니다. (만약 404 오류가 발생한다면 url encoding 여부를 확인해주세요.)

파라미터는 전달하지 않으면 구성에 설정해놓은 매개변수의 Default Value로 설정되어 실행됩니다.

public void 젠킨스_job_실행() {
    String jobUrl = "{젠킨스Job경로}/buildWithParameters";
    LinkedMultiValueMap<String, String> param = new LinkedMultiValueMap<>();
    param.add("token", "토큰값");
    param.add("파라미터명1", "파라미터값1");
    param.add("파라미터명2", "파라미터값2");
    this.runJob(jobUrl, "젠킨스ID", "젠킨스PW", param);
}

public void runJob(String jobUrl, String userId, String pwd, LinkedMultiValueMap<String, String> sendParam) {

    HttpHeaders headers = new HttpHeaders();
    headers.setBasicAuth(userId, pwd);

    URI uri = UriComponentsBuilder.fromUriString(jobUrl).queryParams(sendParam).build().encode().toUri();
    ResponseEntity<String> exchange = restTemplate.exchange(uri, HttpMethod.GET, new HttpEntity<>(headers), String.class);

    // ...
}

 

4.1. apache http 통신 방법

public String runJob(String jobUrl, String userId, String pwd, LinkedMultiValueMap<String, String> sendParam) {

    URI uri = UriComponentsBuilder.fromUriString(jobUrl).queryParams(sendParam).build().encode().toUri();
    HttpHost host = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme());
    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    credsProvider.setCredentials(new AuthScope(uri.getHost(), uri.getPort()), new UsernamePasswordCredentials(userId, pwd));

    AuthCache authCache = new BasicAuthCache();
    BasicScheme basicAuth = new BasicScheme();
    authCache.put(host, basicAuth);

    HttpGet httpGet = new HttpGet(uri);
    HttpClientContext localContext = HttpClientContext.create();
    localContext.setAuthCache(authCache);
    HttpResponse response = httpClient.execute(host, httpGet, localContext);
    
    // ...
    
}

 

 

5. 마지막 실행 이력 조회

curl -X POST [젠킨스 서버 URL]/job/[job 이름]/lastBuild/api/json --user [젠킨스 user id]:[user password] --data token=[생성한 job token]

728x90
반응형