순서대로 적는거 좋아하는데.. Go 기본에 대해 적다보니까 약간 지루한 감이 있어서..
기본이 제일 중요하긴 하지만.. 쉬어가는 타이밍으로..
얼마전에 Go 언어로 Jira api 다뤄봐서 내용을 적어 보려고 한다.
Jira 를 다른 회사에서는 어떻게 사용하는지 잘 모르겠지만
지금 다니는 회사에서는 기본적인 업무 칸반 보드 및 배포 체크 용도로 사용하고 있다.
https://www.atlassian.com/ko/software/jira
배포를 담당하고 있어서 배포 준비 및 Jira 관리까지 해야되는 입장이라
처음에는 느끼지 못했는데 배포 이슈가 많고 이러면 이것도 정말 일이다.
Jira를 하나씩 하나씩..
상태변경 하기가 너무~ 불편해서 찾아보고 만들어 보았다.
go-jira
https://github.com/andygrunwald/go-jira
이름부터 마음에 들어 !
사용방법도 README.md 를 보면 너무너무 친절하게 나온다.
그래도 만들었으니까.. 코드를 부분만 소개를 하면 !
라이브러리는 2개 사용했다.
https://github.com/joho/godotenv
go-jira, godotenv
godotenv 는 개발 환경에 맞춰서 .env 파일을 읽어주는 라이브러리라고 생각하면 된다.
(이 라이브러리도 정말 많이 사용하는 것 중 하나)
소스 전체는 업무와 관련이 있으니까..
Jira 와 커넥션을 맺고
어떤 방식으로 사용했는지만 소개 하려고 한다.
go get github.com/andygrunwald/go-jira
go get github.com/joho/godotenv
package main
import (
"os"
jira "github.com/andygrunwald/go-jira"
"github.com/joho/godotenv"
)
func main() {
err := godotenv.Load(".env")
if err != nil {
panic(err)
}
tp := jira.BasicAuthTransport{
Username: os.Getenv("JIRA_USERNAME"),
Password: os.Getenv("JIRA_PASSWORD"),
}
jiraClient, err := jira.NewClient(tp.Client(),
os.Getenv("JIRA_URL"))
if err != nil {
panic(err)
}
}
파일 이름을 jira.go 로 만들었고, jira.go 와 같은 경로에 .env 파일을 만들었다.
그리고 .env 안에
JIRA_URL = 'url'
JIRA_USERNAME = 'id'
JIRA_PASSWORD = 'password'
이렇게 godotenv 를 사용 해주면 정보 노출 위험도 없고 개발 환경에 따라 .env 파일 작성이 가능하다.
JIRA_URL -> 사용하는 JIRA URL
JIRA_USERNAME -> 본인의 계정 또는 공용 계정
JIRA_PASSWORD -> 계정의 비밀번호
이렇게 만들고나서 위 코드를 다시 보면 이해가 될 것이다.
각 이슈들은 이슈 번호로도 검색 할 수 있고, 프로젝트 단위로도 검색이 가능하지만
jql 로 가져오는 것이 상황에 따라 정확 하다고 판단 되어서
func GetAllIssues(jiraClient *jira.Client, jql string) []jira.Issue {
var result []jira.Issue
issues, resp, err := jiraClient.Issue.Search(jql, nil) // jql 로 issue 검색
if err != nil {
panic(err)
}
total := resp.Total
if issues == nil {
result = make([]jira.Issue, 0, total)
}
result = append(result, issues...)
return result
}
이런식으로 GetAllIssues 라는 함수를 만들어 jiraClient 와 jql 을 받아서
특정 날짜에 배포 나가야되는 이슈, 배포 된 이슈, 기한이 초과된 이슈를 받아 올 수 있게 만들었다.
그리고 상태를 변경하는 함수는
for _, v := range issues {
possibleTransitions, _, _ := jiraClient.Issue.GetTransitions(v.Key)
for _, v := range possibleTransitions {
if v.Name == "Preset" {
transitionID = v.ID // 상태에 따라 코드가 존재해서 여기서는 "Preset" 이라는 코드일때 break
break
}
}
jiraClient.Issue.DoTransition(v.Key, transitionID)
}
이렇게 내장 된 함수인 GetTransitions 함수를 사용하면 된다.
위 코드는 Preset 이라는 상태로 변경 해주는 함수이다.
배포 나가기 전, 배포 한 뒤, 기한이 초과한 이슈 관리에 대한 상태 변경이 필요한데
만들고 나서 정말로 편하다 ! 정말 !
회사의 직접적인 서비스가 아니고 일적인 부분? 은 jql 만 제거 하면 상관은 없을 것 같아서
조금 더 필요한 코드를 추가 한 뒤 나중에 jql 을 제거한 전체 코드를 github에 올리려고 한다.
( jql 을 제외한 전체 코드 )
개발을 하다보면 불편한 점이 존재하는데 찾아보면 정말 편하게 해주는 라이브러리가 많은 것 같아서
정말로 좋은 것 같다.
앞으로도 개발을 하면서 불편한 점이 있으면 찾아 보고 뭔가 조금 더 편하게 할 수 있는 방법을 찾는 것이
개발자가 부수적으로 할 수도 있는 일 같다.
결론적으로 너무 편함 ! 끝 !
'Language > Go' 카테고리의 다른 글
[Go] go resty (net/http) (0) | 2022.07.04 |
---|---|
[Go] Go version upgrade (change) (0) | 2022.06.05 |
[Go] 배열 (0) | 2021.11.28 |
[Go] for (0) | 2021.11.07 |
[Go] switch (0) | 2021.10.30 |