Jira 이슈 통합 문제 해결

Tier: Free, Premium, Ultimate Offering: GitLab.com, 자체 관리, 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 주소 제한을 설정한 경우, 자체 관리형 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 이슈를 닫을 수 없음

GitLab이 Jira 이슈를 닫을 수 없는 경우:

  • Jira 설정에서 설정한 전환 ID가 프로젝트에서 이슈를 닫기 위해 가져야 하는 것과 일치하는지 확인하십시오.
  • 자동 이슈 전환](issues.md#automatic-issue-transitions) 및 사용자 지정 이슈 전환을 확인하십시오.

  • Jira 이슈가 이미 해결로 표시되지 않았는지 확인하십시오:
    • Jira 이슈 해결 필드가 설정되지 않았는지 확인하십시오.
    • 문제가 Jira 목록에서 취소선으로 표시되지 않았는지 확인하십시오.

로그인 시도 실패 후 CAPTCHA

연속적인 로그인 시도 실패 후 CAPTCHA가 트리거될 수 있습니다. 이러한 실패된 시도는 Jira 이슈 통합 설정을 테스트할 때 401 Unauthorized로 이어질 수 있습니다. CAPTCHA가 트리거된 경우 Jira REST API를 사용하여 Jira 사이트에 인증할 수 없습니다.

이 문제를 해결하려면 Jira 인스턴스에 로그인하여 CAPTCHA를 완료하십시오.

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

가져온 프로젝트에 대해 Jira 이슈 통합이 작동하지 않을 수 있습니다. 자세한 내용은 이슈 341571을 참조하십시오.

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

통합 설정을 테스트할 때 certificate verify failed 오류가 발생하는 경우

Jira 이슈 통합 설정을 테스트하는 중에 다음과 같은 오류가 발생할 수 있습니다:

Connection failed. Check your integration settings. SSL_connect returned=1 errno=0 peeraddr=<jira.example.com> state=error: certificate verify failed (unable to get local issuer certificate)

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

{
  "severity":"ERROR",
  "integration_class":"Integrations::Jira",
  "message":"Error sending message",
  "exception.class":"OpenSSL::SSL::SSLError",
  "exception.message":"SSL_connect returned=1 errno=0 peeraddr=x.x.x.x:443 state=error: certificate verify failed (unable to get local issuer certificate)"
}

이 오류는 Jira 인증서가 공개적으로 신뢰받지 않거나 인증서 체인이 불완전하기 때문에 발생합니다. 이 문제가 해결되기 전까지 GitLab은 Jira에 연결할 수 없습니다.

이 문제를 해결하려면 공통 SSL 오류를 참조하십시오.

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

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

인스턴스의 모든 프로젝트 변경

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

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

    • GitLab 15.0 이상:

      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
      
    • GitLab 14.10 이하:

      jira_integration_instance_id = Integrations::Jira.find_by(instance: true).id
      Integrations::Jira.where(active: true, instance: false, template: false, inherit_from_id: nil).find_each do |integration|
        integration.update_attribute(:inherit_from_id, jira_integration_instance_id)
      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 이슈를 보는 경우, 다음과 같은 문제에 부딪힐 수 있습니다.

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 프로젝트에서 마감일 필드가 보이도록 확인하세요.

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

GitLab에서 Jira 이슈 목록을 보려고 할 때 다음 메시지를 받을 수 있습니다:

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

이 오류는 Jira 이슈 통합의 인증이 완전하거나 올바르지 않을 때 발생합니다.

이 문제를 해결하려면 Jira 이슈 통합을 다시 구성하세요. 인증 세부 정보가 올바른지 확인하고, API 토큰 또는 비밀번호를 다시 입력한 다음 변경 사항을 저장하세요.

프로젝트 키에 예약된 JQL 단어가 포함되어 있으면 Jira 이슈 목록이 로드되지 않습니다. 자세한 내용은 이슈 426176을 참조하세요. 귀하의 Jira 프로젝트 키에는 제한된 단어 및 문자가 포함되어서는 안 됩니다.

Jira 자격 증명으로 데이터에 액세스할 수 없음

GitLab에서 Jira 이슈 목록을 보려고 할 때 다음 메시지를 받을 수 있습니다:

Jira에 액세스하는 데 필요한 자격 증명이 데이터에 액세스할 수 없습니다. Jira 통합 자격 증명을 확인하고 다시 시도하세요.

이 오류는 Jira 자격 증명이 지정된 Jira 이슈 통합과 관련된 Jira 프로젝트 키에 액세스할 수 없을 때 발생합니다. 이 문제를 해결하려면 Jira 이슈 통합에서 구성한 Jira 사용자가 지정된 Jira 프로젝트 키와 관련된 이슈를 볼 수 있는 권한이 있는지 확인하세요.

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

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

    https://<ATLASSIAN_SUBDOMAIN>.atlassian.net/rest/api/2/search?jql=project=<JIRA PROJECT KEY>
    
  • API에 액세스하려면 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 클라우드 플랫폼 REST API 문서를 참조하세요.