Jira 이슈 연동 문제 해결
GitLab v19.5Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
요약
Jira 이슈 연동을 사용할 때 다음과 같은 문제가 발생할 수 있습니다. GitLab에서 Jira 이슈 ID를 언급해도 이슈 링크가 표시되지 않을 수 있습니다. 이 문제를 해결하려면 Jira 이슈 연동을 위해 생성한 Jira 사용자에게 이슈를 연결할 권한이 있는지 확인합니다.
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 이슈를 전환(transition)하는 권한.
GitLab 이슈 트래커가 꺼져 있으면 Jira 이슈 참조와 댓글이 동작하지 않습니다. Jira 액세스에 대해 IP 주소를 제한하는 경우, Jira의 허용 목록에 GitLab Self-Managed IP 주소 또는 GitLab IP 주소를 추가했는지 확인합니다.
근본 원인을 파악하려면 integrations_json.log 파일을 확인합니다. GitLab 이 Jira 이슈에 댓글을 작성하려고 할 때 Error sending message 로그 항목이 나타날 수 있습니다.
오류가 발생하면 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 사용자가 특정 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 이슈 연동 문제를 해결하려면 프로젝트의 Jira 연동 설정을 사용하여 GitLab 이 Jira 이슈에 댓글을 게시할 수 있는지 확인할 수 있습니다.
방법은 다음과 같습니다.
-
Rails 콘솔에서 다음을 실행합니다.
jira_issue_id = "ALPHA-1" # Change to your Jira issue ID project = Project.find_by_full_path("group/project") # Change to your project's path integration = project.integrations.find_by(type: "Integrations::Jira") jira_issue = integration.client.Issue.find(jira_issue_id) jira_issue.comments.build.save!(body: 'This is a test comment from GitLab via the Rails console')
명령이 성공하면 Jira 이슈에 댓글이 추가됩니다.
GitLab 이 Jira 이슈를 생성할 수 없음#
취약점에서 Jira 이슈를 생성하려고 하면 "field is required" 오류가 표시될 수 있습니다. 예를 들어 "Components" 라는 필드가 누락되어 Components is required 오류가 발생합니다. 이는 Jira에 GitLab 이 전달하지 않는 필수 필드가 설정되어 있기 때문에 발생합니다. 이 문제를 해결하려면 다음과 같이 진행합니다.
- Jira 인스턴스에 새 "Vulnerability" 이슈 유형을 생성합니다.
- 새 이슈 유형을 프로젝트에 할당합니다.
- 프로젝트의 모든 "Vulnerabilities" 에 대해 필드 스킴을 변경하여 누락된 필드를 요구하지 않도록 합니다.
GitLab 이 Jira 이슈를 닫을 수 없음#
GitLab 이 Jira 이슈를 닫을 수 없는 경우:
- Jira 설정에서 지정한 전환(transition) ID가 프로젝트에서 이슈를 닫는 데 필요한 ID와 일치하는지 확인합니다. 자세한 내용은 자동 이슈 전환 및 사용자 지정 이슈 전환을 참고합니다.
- Jira 이슈가 이미 해결됨으로 표시되어 있지 않은지 확인합니다.
- Jira 이슈의 resolution 필드가 설정되어 있지 않은지 확인합니다.
- Jira 목록에서 이슈에 취소선이 표시되어 있지 않은지 확인합니다.
연속된 로그인 실패 후 CAPTCHA 발생#
연속된 로그인 실패 시도 후 CAPTCHA가 발생할 수 있습니다.
이러한 로그인 실패 시도로 인해 Jira 이슈 연동 설정을 테스트할 때 401 Unauthorized가 발생할 수 있습니다.
CAPTCHA가 발생한 경우 Jira REST API를 사용하여 Jira 사이트에 인증할 수 없습니다.
이 문제를 해결하려면 Jira 인스턴스에 로그인하여 CAPTCHA를 완료합니다.
가져오기한 프로젝트에서 연동이 동작하지 않음#
GitLab 19.0 이하에서는 가져오기한 프로젝트에서 Jira 이슈 연동이 동작하지 않을 수 있습니다. 자세한 내용은 이슈 341571을 참고합니다.
이 문제를 해결하려면 연동을 껐다가 다시 켭니다.
개발 패널에 일부 Jira 이슈가 표시되지 않음#
커밋, 브랜치, 머지 리퀘스트, 빌드, 배포, 기능 플래그가 많은 Jira 이슈를 참조하면, 참조된 이슈 중 일부가 Jira 개발 패널에 표시되지 않을 수 있습니다.
Jira는 커밋, 브랜치, 머지 리퀘스트, 빌드, 배포, 기능 플래그 하나당 최대 500개의 Jira 이슈 키만 받습니다. GitLab이 이러한 항목 하나에서 서로 다른 Jira 이슈 키를 500개 넘게 추출하면 처음 500개만 Jira로 보냅니다. 이는 GitLab의 결함이 아니라 Jira 플랫폼의 제한입니다.
이 문제를 해결하려면 커밋, 브랜치, 머지 리퀘스트, 빌드, 배포, 기능 플래그 하나에서 참조하는 서로 다른 Jira 이슈 키의 수를 줄입니다.
오류: 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 프로젝트가 인스턴스의 연동 설정을 사용하도록 변경하려면:
-
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 -
UI에서 인스턴스의 연동을 수정하고 저장하여 변경 사항을 모든 그룹 및 프로젝트 연동에 전파합니다.
그룹의 모든 프로젝트 변경하기#
그룹(및 하위 그룹)의 모든 Jira 프로젝트가 그룹의 연동 설정을 사용하도록 변경하려면:
-
Rails 콘솔에서 다음을 실행합니다.
def reset_integration(target) integration = target.integrations.find_by(type: Integrations::Jira) return if integration.nil? # Skip if the project has no Jira issues integration return unless integration.inherit_from_id.nil? # Skip integrations that are already inheriting 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') # Add the full path of your top-level group current_user = User.find_by_username('admin-user') # Add the username of a user with administrator access unless parent_group.nil? groups = GroupsFinder.new(current_user, { parent: parent_group, include_parent_descendants: true }).execute # Reset any projects in subgroups to use the parent group integration settings groups.find_each do |group| reset_integration(group) group.projects.find_each do |project| reset_integration(project) end end # Reset any direct projects in the parent group to use the parent group integration settings 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 프로젝트에서 Due date 텍스트 상자가 이슈에 대해 표시되는지 확인합니다.
오류: An error occurred while requesting data from 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 토큰 또는 비밀번호를 다시 입력한 후 변경 사항을 저장합니다.
Jira 자격 증명 관련 오류#
GitLab에서 Jira 이슈 목록을 보려고 할 때 다음 오류 중 하나가 표시될 수 있습니다.
오류: The value '<project>' does not exist for the field 'project'#
Jira 설치에 잘못된 인증 자격 증명을 사용하면 다음 오류가 표시될 수 있습니다.
An error occurred while requesting data from Jira:
The value '<project>' does not exist for the field 'project'.
Check your Jira issues integration configuration and try again.
인증 자격 증명은 Jira 설치 유형에 따라 다릅니다.
- Jira Cloud의 경우, Jira Cloud API 토큰과 토큰을 생성할 때 사용한 이메일 주소가 필요합니다.
- Jira Data Center 또는 Jira Server의 경우, Jira 사용자 이름과 비밀번호 또는 Jira 개인 액세스 토큰이 필요합니다.
자세한 내용은 Jira 이슈 연동을 참고합니다.
이 문제를 해결하려면 Jira 설치 유형에 맞게 인증 자격 증명을 업데이트합니다.
오류: The credentials for accessing Jira are not allowed to access the data#
Jira 이슈 연동에 지정한 Jira 프로젝트 키에 Jira 자격 증명이 액세스할 수 없는 경우, 다음 오류가 표시될 수 있습니다.
The credentials for accessing Jira are not allowed to access the data.
Check your Jira issues integration credentials and try again.
Atlassian은 Jira Cloud의 이전 JQL 검색 엔드포인트(GET/POST /rest/api/2/search)를 2024년 10월 31일부로 지원 중단(deprecated) 했으며, 2025년 5월 1일에 제거될 예정입니다.
Jira Server 및 Data Center는 계속해서 /rest/api/2/search 엔드포인트를 사용합니다.
자세한 내용은 Atlassian 지원 중단 안내를 참고합니다.
이 문제를 해결하려면 Jira 이슈 연동에서 설정한 Jira 사용자에게 지정한 Jira 프로젝트 키와 관련된 이슈를 볼 권한이 있는지 확인합니다.
Jira 사용자에게 이 권한이 있는지 확인하려면 다음 중 하나를 수행합니다.
-
브라우저에서 Jira 이슈 연동에 설정한 사용자로 Jira에 로그인합니다. Jira API는 쿠키 기반 인증을 지원하므로 브라우저에서 이슈가 반환되는지 확인할 수 있습니다.
https://.atlassian.net/rest/api/3/search/jql?jql=project= -
curl을 사용하여 HTTP basic 인증으로 API에 액세스하고 이슈가 반환되는지 확인합니다.curl --verbose --user "$JIRA_EMAIL:$JIRA_API_TOKEN" \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --request POST \ --data '{"jql":"project='$JIRA_PROJECT_KEY'"}' \ "https://$ATLASSIAN_SUBDOMAIN.atlassian.net/rest/api/3/search/jql" | jq
API 응답은 JSON 응답을 반환합니다.
issues에는 Jira 프로젝트 키와 일치하는 이슈 배열이 포함됩니다.- 가져올 결과가 더 있으면
nextPageToken이 제공됩니다.
반환된 상태 코드 및 API 상세 정보에 대한 자세한 내용은 JQL 확장 검색을 사용한 이슈 검색(POST)을 참고합니다.
-
브라우저에서 Jira 이슈 연동에 설정한 사용자로 Jira에 로그인합니다. Jira API는 쿠키 기반 인증을 지원하므로 브라우저에서 이슈가 반환되는지 확인할 수 있습니다.
/rest/api/2/search?jql=project= -
curl을 사용하여 HTTP basic 인증으로 API에 액세스하고 이슈가 반환되는지 확인합니다.curl --verbose --header 'Authorization: Bearer '$JIRA_API_TOKEN'' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --request POST \ --data '{"jql":"project='$JIRA_PROJECT_KEY'"}' \ "$JIRA_SERVER_URL/rest/api/2/search" | jq
API 응답은 JSON 응답을 반환합니다.
issues에는 Jira 프로젝트 키와 일치하는 이슈 배열이 포함됩니다.- 가져올 결과가 더 있으면
total이 제공됩니다.
반환된 상태 코드 및 API 상세 정보에 대한 자세한 내용은 JQL을 사용한 검색 수행(POST)을 참고합니다.