Jira 문제 통합 문제 해결

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

Jira 문제 통합 작업 중 다음 문제에 직면할 수 있습니다.

GitLab이 Jira 문제에 링크할 수 없음

GitLab에서 Jira 문제 ID를 언급하면 문제 링크가 누락될 수 있습니다.
sidekiq.log에는 다음과 같은 예외가 포함될 수 있습니다:

No Link Issue Permission for issue 'JIRA-1234'

이 문제를 해결하려면 Jira 문제 통합을 위해 생성한 Jira 사용자가 문제 링크 권한을 가지고 있는지 확인하세요.

GitLab이 Jira 문제에 댓글을 달 수 없음

GitLab이 Jira 문제에 댓글을 달 수 없는 경우, Jira 문제 통합을 위해 생성한 Jira 사용자가 다음 권한을 가지고 있는지 확인하세요:

  • Jira 문제에 댓글을 게시할 수 있는 권한.
  • Jira 문제를 전환할 수 있는 권한.

GitLab 문제 추적기가 비활성화되어 있으면 Jira 문제 참조 및 댓글이 작동하지 않습니다.

Jira 접근을 위한 IP 주소를 제한하는 경우, self-managed IP 주소 또는 GitLab IP 주소를 Jira의 허용 목록에 추가해야 합니다.

근본 원인을 확인하려면 integrations_json.log 파일을 확인하세요. GitLab이 Jira 문제에 댓글을 달려고 할 때 Error sending message 로그 항목이 나타날 수 있습니다.

GitLab 16.1 이상에서는 오류가 발생할 때 integrations_json.log 파일에 Jira에 대한 아웃고잉 API 요청의 client_* 키가 포함됩니다.
client_* 키를 사용하여 오류가 발생한 이유를 확인하려면 Atlassian API 문서를 참고하세요.

다음 예에서 Jira는 404 Not Found로 응답합니다. 이 오류는 다음 이유로 발생할 수 있습니다:

  • Jira 문제 통합을 위해 생성한 Jira 사용자가 문제를 볼 수 있는 권한이 없습니다.
  • 지정한 Jira 문제 ID가 존재하지 않습니다.
{
  "severity": "ERROR",
  "time": "2023-07-25T21:38:56.510Z",
  "message": "Error sending message",
  "client_url": "https://my-jira-cloud.atlassian.net",
  "client_path": "/rest/api/2/issue/ALPHA-1",
  "client_status": "404",
  "exception.class": "JIRA::HTTPError",
  "exception.message": "Not Found",
}

반환된 상태 코드에 대한 자세한 정보는 Jira Cloud 플랫폼 REST API 문서를 참조하세요.

curl을 사용하여 Jira 문제 접근성 확인

특정 Jira 문제에 접근할 수 있는지 검증하려면 다음 스크립트를 실행하세요:

curl --verbose --user "$USER:$API_TOKEN" "https://$ATLASSIAN_SUBDOMAIN.atlassian.net/rest/api/2/issue/$JIRA_ISSUE"

사용자가 문제에 접근할 수 있다면 Jira는 200 OK로 응답하고 반환된 JSON에 Jira 문제 세부정보가 포함됩니다.

GitLab이 Jira 이슈에 댓글을 게시할 수 있는지 확인

경고:

데이터를 변경하는 명령은 올바르게 실행되지 않거나 적절한 조건에서 실행되지 않으면 손상을 일으킬 수 있습니다. 항상 먼저 테스트 환경에서 명령을 실행하고 복원할 인스턴스를 준비하십시오.

Jira 통합을 문제 해결하는 데 도움을 주기 위해, GitLab이 프로젝트의 Jira 통합 설정을 사용하여 Jira 이슈에 댓글을 게시할 수 있는지 확인할 수 있습니다.

이를 수행하기 위해:

  • Rails 콘솔에서, 다음을 실행하십시오:

    jira_issue_id = "ALPHA-1" # Jira 이슈 ID로 변경
    project = Project.find_by_full_path("group/project") # 프로젝트 경로로 변경
    
    integration = project.integrations.find_by(type: "Integrations::Jira")
    jira_issue = integration.client.Issue.find(jira_issue_id)
    jira_issue.comments.build.save!(body: '이것은 Rails 콘솔을 통해 GitLab에서 보낸 테스트 댓글입니다')
    

명령이 성공하면, Jira 이슈에 댓글이 추가됩니다.

GitLab이 Jira 이슈를 생성할 수 없음

취약점에서 Jira 이슈를 생성하려고 하면 “필드가 필요합니다” 오류가 발생할 수 있습니다. 예를 들어, Components is required는 “Components”라는 필드가 누락되었기 때문에 발생합니다. 이는 Jira에 GitLab이 전달하지 않은 필수 필드가 구성되어 있기 때문에 발생합니다. 이 문제를 해결하기 위해:

  1. Jira 인스턴스에서 새 “취약점” 이슈 유형을 생성합니다.

  2. 새 이슈 유형을 프로젝트에 할당합니다.

  3. 누락된 필드를 요구하지 않도록 프로젝트의 모든 “취약점”에 대해 필드 스킴을 변경합니다.

GitLab이 Jira 이슈를 닫을 수 없음

GitLab이 Jira 이슈를 닫지 못하는 경우:

  • Jira 설정에서 설정한 전환 ID가 이슈를 닫기 위해 프로젝트에 필요한 ID와 일치하는지 확인하십시오. 자세한 내용은 자동 이슈 전환사용자 정의 이슈 전환을 참조하세요.

  • Jira 이슈가 이미 해결된 것으로 표시되지 않았는지 확인하세요:

    • Jira 이슈의 해결 필드가 설정되어 있지 않음을 확인하십시오.
    • 이슈가 Jira 목록에서 취소선이 그어지지 않았는지 확인하십시오.

로그인 실패 시 CAPTCHA

연속된 로그인 실패 후 CAPTCHA가 트리거될 수 있습니다.

이러한 실패한 시도는 Jira 이슈 통합 설정을 테스트할 때 401 Unauthorized로 이어질 수 있습니다.

CAPTCHA가 트리거된 경우, Jira 사이트에 대한 인증을 위해 Jira REST API를 사용할 수 없습니다.

이 문제를 해결하기 위해, Jira 인스턴인에 로그인하고 CAPTCHA를 완료하십시오.

가져온 프로젝트에 대해 통합이 작동하지 않음

Jira 이슈 통합은 가져온 프로젝트에 대해 작동하지 않을 수 있습니다.

자세한 내용은 이슈 341571을 참조하십시오.

이 문제를 해결하기 위해, 통합을 비활성화한 후 다시 활성화하십시오.

오류: certificate verify failed

Jira 이슈 통합 설정을 테스트할 때 다음 오류가 발생할 수 있습니다:

연결 실패. 통합 설정을 확인하십시오. SSL_connect returned=1 errno=0 peeraddr=<jira.example.com> 상태=오류: 인증서 확인 실패 (로컬 발급자 인증서를 가져올 수 없음)

이 오류는 integrations_json.log 파일에도 나타날 수 있습니다:

{
  "severity":"ERROR",
  "integration_class":"Integrations::Jira",
  "message":"메시지 전송 오류",
  "exception.class":"OpenSSL::SSL::SSLError",
  "exception.message":"SSL_connect returned=1 errno=0 peeraddr=x.x.x.x:443 상태=오류: 인증서 확인 실패 (로컬 발급자 인증서를 가져올 수 없음)",
}

이 오류는 Jira 인증서가 공개적으로 신뢰할 수 없거나 인증서 체인이 불완전하기 때문에 발생합니다.

이 문제가 해결될 때까지 GitLab은 Jira에 연결되지 않습니다.

이 문제를 해결하기 위해, 일반 SSL 오류를 참조하십시오.

모든 Jira 프로젝트를 인스턴스 수준 또는 그룹 수준 값으로 변경

경고:
데이터를 변경하는 명령은 올바르지 않거나 잘못된 조건에서 실행될 경우 손상을 초래할 수 있습니다. 항상 테스트 환경에서 먼저 명령을 실행하고 복원할 준비가 된 백업 인스턴스가 있어야 합니다.

인스턴스에서 모든 프로젝트 변경

모든 Jira 프로젝트가 인스턴스 수준 통합 설정을 사용하도록 변경하려면:

  1. Rails 콘솔에서 다음을 실행합니다:

    Integrations::Jira.where(active: true, instance: false, inherit_from_id: nil).find_each do |integration|
      default_integration = Integration.default_integration(integration.type, integration.project)
    
      integration.inherit_from_id = default_integration.id
    
      if integration.save(context: :manual_change)
        if Gitlab.version_info >= Gitlab::VersionInfo.new(16, 9)
          Integrations::Propagation::BulkUpdateService.new(default_integration, [integration]).execute
        else
          BulkUpdateIntegrationService.new(default_integration, [integration]).execute
        end
      end
    end
    
  2. UI에서 인스턴스 수준 통합을 수정하고 저장하여 모든 그룹 수준 및 프로젝트 수준 통합에 변경 사항을 전파합니다.

그룹 내 모든 프로젝트 변경

그룹(및 하위 그룹) 내 모든 Jira 프로젝트가 그룹 수준 통합 설정을 사용하도록 변경하려면:

  • Rails 콘솔에서 다음을 실행합니다:

    def reset_integration(target)
      integration = target.integrations.find_by(type: Integrations::Jira)
    
      return if integration.nil? # Jira 이슈 통합이 없는 프로젝트는 건너뜁니다.
      return unless integration.inherit_from_id.nil? # 이미 상속받고 있는 통합은 건너뜁니다.
    
      default_integration = Integration.default_integration(integration.type, target)
    
      integration.inherit_from_id = default_integration.id
    
      if integration.save(context: :manual_change)
        if Gitlab.version_info >= Gitlab::VersionInfo.new(16, 9)
          Integrations::Propagation::BulkUpdateService.new(default_integration, [integration]).execute
        else
          BulkUpdateIntegrationService.new(default_integration, [integration]).execute
        end
      end
    end
    
    parent_group = Group.find_by_full_path('top-level-group') # 최상위 그룹의 전체 경로를 추가합니다.
    current_user = User.find_by_username('admin-user') # 관리자 접근 권한을 가진 사용자의 사용자 이름을 추가합니다.
    
    unless parent_group.nil?
      groups = GroupsFinder.new(current_user, { parent: parent_group, include_parent_descendants: true }).execute
    
      # 하위 그룹의 모든 프로젝트를 상위 그룹 통합 설정을 사용하도록 재설정합니다.
      groups.find_each do |group|
        reset_integration(group)
    
        group.projects.find_each do |project|
          reset_integration(project)
        end
      end
    
      # 직접적으로 상위 그룹의 프로젝트를 상위 그룹 통합 설정을 사용하도록 재설정합니다.
      parent_group.projects.find_each do |project|
        reset_integration(project)
      end
    end
    

모든 프로젝트에 대한 통합 비밀번호 업데이트

경고:
데이터를 변경하는 명령은 올바르지 않거나 잘못된 조건에서 실행될 경우 손상을 초래할 수 있습니다. 항상 테스트 환경에서 먼저 명령을 실행하고 복원할 준비가 된 백업 인스턴스가 있어야 합니다.

활성 Jira 통합이 있는 모든 프로젝트에 대해 Jira 사용자 비밀번호를 재설정하려면, Rails 콘솔에서 다음을 실행합니다:

p = Project.find_by_sql("SELECT p.id FROM projects p LEFT JOIN integrations i ON p.id = i.project_id WHERE i.type_new = 'Integrations::Jira' AND i.active = true")

p.each do |project|
  project.jira_integration.update_attribute(:password, '<your-new-password>')
end

Jira 이슈 목록

GitLab에서 Jira 이슈를 조회하는 경우, 다음과 같은 문제가 발생할 수 있습니다.

오류: 500 We're sorry

GitLab에서 Jira 이슈에 접근할 때, 500 We're sorry. Something went wrong on our end 오류가 발생할 수 있습니다.

다음 예외가 포함되어 있는지 확인하려면 production.log를 확인하세요:

:NoMethodError (undefined method 'duedate' for #<JIRA::Resource::Issue:0x00007f406d7b3180>)

이 경우, 통합된 Jira 프로젝트에서 Due date 필드가 이슈에 표시되도록 확인하세요.

오류: Jira에서 데이터를 요청하는 동안 오류가 발생했습니다

GitLab에서 Jira 이슈 목록을 보거나 Jira 이슈를 만들려고 할 때, 다음 오류 중 하나가 발생할 수 있습니다:

An error occurred while requesting data from Jira
An error occurred while fetching issue list. Connection failed. Check your integration settings.

이 오류는 Jira 이슈 통합을 위한 인증이 완료되지 않았거나 올바르지 않을 때 발생합니다.

이 문제를 해결하려면, Jira 이슈 통합을 다시 구성하세요.

인증 세부 정보가 올바른지 확인하고, API 토큰이나 비밀번호를 다시 입력한 후 변경 사항을 저장하세요.

프로젝트 키에 예약된 JQL 단어가 포함되어 있으면 Jira 이슈 목록이 로드되지 않습니다.

자세한 내용은 이슈 426176를 참조하세요.

당신의 Jira 프로젝트 키는 제한된 단어와 문자를 포함해서는 안 됩니다.

Jira 자격 증명 오류

GitLab에서 Jira 이슈 목록을 보려고 할 때, 다음 오류 중 하나가 발생할 수 있습니다.

오류: The value '<project>' does not exist for the field 'project'

잘못된 인증 자격 증명을 사용하는 경우, 다음 오류가 발생할 수 있습니다:

An error occurred while requesting data from Jira:
The value '<project>' does not exist for the field 'project'.
Check your Jira integration configuration and try again.

인증 자격 증명은 사용자의 Jira 설치 유형에 따라 달라집니다:

  • Jira Cloud의 경우, Jira Cloud API 토큰과 토큰 생성 시 사용한 이메일 주소가 필요합니다.
  • Jira Data Center 또는 Jira Server의 경우, Jira 사용자 이름과 비밀번호가 필요하며, GitLab 16.0 이상에서는 Jira 개인 액세스 토큰을 사용할 수 있습니다.

자세한 내용은 Jira 이슈 통합을 참조하세요.

이 문제를 해결하려면, 인증 자격 증명을 당신의 Jira 설치에 맞게 업데이트하세요.

오류: Jira에 접근하기 위한 자격 증명이 데이터를 접근할 수 없습니다

지정한 Jira 이슈 통합에서 Jira 자격 증명이 Jira 프로젝트 키에 접근할 수 없는 경우, 다음 오류가 발생할 수 있습니다:

The credentials for accessing Jira are not allowed to access the data.
Check your Jira integration credentials and try again.

이 문제를 해결하려면, Jira 이슈 통합에서 구성한 Jira 사용자가 지정된 Jira 프로젝트 키와 연결된 이슈를 볼 수 있는 권한이 있는지 확인하세요.

Jira 사용자가 이 권한을 가지고 있는지 확인하려면, 다음 중 하나를 수행하세요:

  • 브라우저에서, Jira 이슈 통합에서 구성한 사용자로 Jira에 로그인하세요. Jira API는 쿠키 기반 인증을 지원하므로, 브라우저에서 이슈가 반환되는지 확인할 수 있습니다:

    https://<ATLASSIAN_SUBDOMAIN>.atlassian.net/rest/api/2/search?jql=project=<JIRA PROJECT KEY>
    
  • curl을 사용하여 HTTP 기본 인증으로 API에 접근하고 이슈가 반환되는지 확인하세요:

    curl --verbose --user "$USER:$API_TOKEN" "https://$ATLASSIAN_SUBDOMAIN.atlassian.net/rest/api/2/search?jql=project=$JIRA_PROJECT_KEY" | jq
    

두 방법 모두 JSON 응답을 반환해야 합니다:

  • total은 Jira 프로젝트 키와 일치하는 이슈의 수를 제공합니다.
  • issues는 Jira 프로젝트 키와 일치하는 이슈의 배열을 포함합니다.

반환된 상태 코드에 대한 자세한 내용은 Jira Cloud 플랫폼 REST API 문서를 참조하세요.