Atlassian Bamboo

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated

GitLab 프로젝트에 변경 내용을 푸시할 때 Atlassian Bamboo에서 자동으로 빌드를 트리거할 수 있습니다.

Bamboo는 웹훅과 커밋 데이터를 수신할 때 전통적인 빌드 시스템과 같은 기능을 제공하지 않습니다. GitLab에서 통합을 설정하기 전에 Bamboo 빌드 계획을 구성해야 합니다.

Bamboo 구성

  1. Bamboo에서 빌드 계획으로 이동하고 작업 > 계획 구성을 선택합니다.
  2. 트리거 탭을 선택합니다.
  3. 트리거 추가를 선택합니다.
  4. GitLab trigger와 같은 설명을 입력합니다.
  5. 저장소가 변경이 커밋될 때 빌드를 트리거를 선택합니다.
  6. 하나 이상의 저장소에 대한 확인란을 선택합니다.
  7. 트리거 IP 주소에 GitLab IP 주소를 입력합니다. 이러한 IP 주소는 Bamboo 빌드를 트리거할 수 있도록 허용됩니다.
  8. 트리거를 저장합니다.
  9. 왼쪽 창에서 빌드 스테이지를 선택합니다. 여러 빌드 스테이지가 있는 경우 Git 체크아웃 작업을 포함하는 마지막 스테이지를 선택합니다.
  10. 잡다한 탭을 선택합니다.
  11. 패턴 일치 라벨링에서 라벨${bamboo.repository.revision.number}를 입력합니다.
  12. 저장을 선택합니다.

Bamboo는 GitLab에서 트리거를 수락할 준비가 되었습니다. 이제 GitLab에서 Bamboo 통합을 설정합니다.

GitLab 구성

  1. 왼쪽 사이드바에서 검색 또는 이동을 선택하고 프로젝트를 찾습니다.
  2. 설정 > 통합을 선택합니다.
  3. Atlassian Bamboo를 선택합니다.
  4. 활성 확인란이 선택되었는지 확인합니다.
  5. Bamboo 서버의 기본 URL을 입력합니다. 예: https://bamboo.example.com.
  6. 선택 사항. SSL 검증 활성화 확인란을 해제하여 SSL 검증을 비활성화합니다.
  7. Bamboo 빌드 계획에서 빌드 키 식별을 입력합니다.
  8. 필요한 경우 빌드 계획을 트리거할 수 있는 Bamboo 사용자의 사용자 이름과 암호를 입력합니다. 인증이 필요하지 않은 경우 이러한 필드를 비워 둡니다.
  9. 선택 사항. 설정 테스트를 선택합니다.
  10. 변경 사항 저장을 선택합니다.

Atlassian Bamboo 빌드 계획 빌드 키 식별

빌드 키는 일반적으로 프로젝트 키와 계획 키로 구성된 고유 식별자입니다. 빌드 키는 짧고, 모두 대문자이며 대시(-)로 구분된다는 특징이 있습니다. 예: PROJ-PLAN.

빌드 키는 Bamboo에서 계획을 보는 경우 브라우저 URL에 포함됩니다. 예: https://bamboo.example.com/browse/PROJ-PLAN.

GitLab에서 Bamboo 빌드 상태 업데이트

커밋 상태 API와 Bamboo 빌드 변수를 사용하는 스크립트를 사용하여 다음을 수행할 수 있습니다.

  • 빌드 상태로 커밋 업데이트
  • 커밋의 target_url로 Bamboo 빌드 계획 URL 추가

예:

  1. GitLab에서 :api 권한을 가진 액세스 토큰을 생성합니다.
  2. Bamboo에서 $GITLAB_TOKEN 변수로 저장합니다.
  3. 다음 스크립트를 Bamboo 계획의 작업에 최종 태스크로 추가합니다:

    #!/bin/bash
    
    # GitLab에서 CI 상태를 업데이트하는 스크립트
    # 이 스크립트를 Bamboo 작업의 최종 내장 스크립트 태스크로 추가합니다.
    #
    # 일반 설명: https://docs.gitlab.com/ee/user/project/integrations/bamboo.html
    # 문제 수정: https://gitlab.com/gitlab-org/gitlab/-/issues/34744
    
    # 첫 번째 오류에서 중지
    set -e
    
    # 액세스 토큰. 이것을 Bamboo의 CI 변수로 설정합니다.
    #GITLAB_TOKEN=
    
    # 상태
    cistatus="실패"
    if [ "${bamboo_buildFailed}" = "false" ]; then
      cistatus="성공"
    fi
    
    repo_url="${bamboo_planRepository_repositoryUrl}"
    
    # SSH 또는 HTTPS 사용 여부 확인
    protocol=${repo_url::4}
    if [ "$protocol" == "git@" ]; then
      repo=${repo_url:${#protocol}};
      gitlab_url=${repo%%:*};
    else
      protocol="https://"
      repo=${repo_url:${#protocol}};
      gitlab_url=${repo%%/*};
    fi
    
    start=$((${#gitlab_url} + 1)) # +1은 / (https) 또는 : (ssh)입니다.
    end=$((${#repo} - $start -4)) # .git을 위해 -4합니다.
    repo=${repo:$start:$end}
    repo=$(echo "$repo" | sed "s/\//%2F/g")
    
    # 요청 보내기
    url="https://${gitlab_url}/api/v4/projects/${repo}/statuses/${bamboo_planRepository_revision}?state=${cistatus}&target_url=${bamboo_buildResultsUrl}"
    echo "$url로 요청 보내는 중"
    curl --fail --request POST --header "PRIVATE-TOKEN: $GITLAB_TOKEN" "$url"
    

문제 해결

빌드가 트리거되지 않는 경우

빌드가 트리거되지 않으면 Bamboo에서 트리거 IP 주소에 올바른 GitLab IP 주소를 입력했는지 확인합니다. 또한, 요청 실패에 대한 통합 웹훅 로그를 확인합니다.

GitLab UI에서 사용할 수 없는 고급 Atlassian Bamboo 기능

고급 Atlassian Bamboo 기능은 GitLab과 호환되지 않습니다. 이러한 기능에는 GitLab UI에서 빌드 로그를 확인하는 기능 등이 포함됩니다.