[SQA] SQADeploymentTool(SQATool) 제작

  1. 개요
  2. 사용 스킬
  3. 기존 요구사항
  4. 추가, 수정 된 요구사항
  5. 변경된 메인 화면
  6. Jenkins Job
  7. Jenkins 실패 경험
    1. Excel 문서 접근 에러
    2. Excel 문서 작성 에러
  8. 동작 방법
  9. 마치며

개요


사용 스킬


  • C#(.NET), Thread, Git, Command(Batch), Jenkins, JFrog Artifactory Cli, 7zip Cli, Araxis Merge, file Read/Write (ini, xml, Excel)

기존 요구사항


  • 주요 데이터가 담긴 Repository를 바라보는 환경 변수를 이용하여 ini, 각종 프로그램(7zip, jfrog …)에 접근한다.
  • 현재 진행중인 SQA 차수 ISO 파일을 JFrog에 해당 차수명 Directory에 Upload 한다.
  • 과거 진행한 SQA와 현재 진행중인 SQA 차수를 입력 받아, JFrog에서 Download하고, 다운 받은 ISO파일을 7zip을 이용해 압축 해제 하여 Diff한다.
    • 위 과정의 지연율이 상당하여, 각 Module의 정보가 담긴 Repository를 이용하여, 각 Module의 Branch, CommitID 등에 접근하여, 타 부서에서 제작한 스크립트를 통해 Diff 한다.
  • 이번 SQA에서 추가 된 Module의 경우 Diff가 불가능하므로, 변경 사항 요약 문서를 제작하여 Added로 나타내고, 다른 변경 사항은 Changed로 나타낸다.
  • Tool을 사용자가 직접 사용할 때도 있지만, Jenkins를 이용하여 사용자는 현재 진행할 SQA 차수와, ISO Build Number만 제공하면 위와 같은 작업을 자동화 하도록 한다.

추가, 수정 된 요구사항


  • Create Document 기능
    • JFrog Artifactory에서 현재 진행하는 SQA 차수와 현재 진행하는 SQA 차수 -1에 해당하는 ISO 파일을 다운 받아온다.
    • 7zip cli를 통해 해당 iso 파일을 압축 해제 한다.
    • 압축 해제 후 나온 파일들을 ‘Araxis Merge’ Tool을 이용하여, File Diff를 한다.
    • File Diff 후, Report 기능을 사용하여, mht 문서 파일을 출력하고, 해당 파일을 JFrog Artifactory에 업로드 한다.
  • Diff 기능
    • 각 모듈들의 정보가 담긴 ini 파일들이 정리 된 Repository를 이용하여, 타 부서에서 제작한 파이썬 스크립트를 통해 ini에 적힌 내용을 토대로 File Diff를 하여 해당하는 모듈의 엑셀 문서를 출력한다.
    • 이를 위해, 해당 Repository를 각각 old, new 폴더에 clone 하고, 각 SQA 차수에 맞는 Commit 시점으로 Checkout 하여, File Diff를 한다.
  • Thread
    • 위 Tool에서는 Create Document의 기능의 실행 시간이 매우 길다.(약, 2시간~3시간)
    • 이를 조금이라도 줄이기 위해, Thread를 사용하여, 동시에 다운로드 받고, 동시에 압축을 풀고, 문서를 만들어 병렬 프로세싱이 가능토록 하였다.
    • 용량과 데이터가 방대하다보니 이렇게 해도 시간을 크게 단축시키진 못했다.
  • Jenkins Log
    • Jenkins에서 보다 쉽게 Log를 관찰하기 위해 Console에 시간, 진행 상황, 에러 로그를 기록하게 했다.
    • Error 발생 시, Environment.Exit 값에 1을 줘 Jenkins Job을 기존 success로 종료 시키는게 아닌 Error로 종료할 수 있도록 했다.
  • xml (info data)
    • Jenkins, User use 시 빠른 실행을 위해 Tool을 성공적으로 실행했을 때의 데이터를 xml에 저장하도록 한다.
    • Tool 초기 시작 시 xml 데이터가 존재하면 해당 데이터를 읽어와 데이터를 자동 입력한다.

변경된 메인 화면


Jenkins Job


Jenkins 실패 경험


Excel 문서 접근 에러

  • Excel 에러인데, 사진에서도 보면 알 수 있듯이, 파일이 사용 중이거나, 파일이 없거나, 중복되거나 하면 2번 사진과 같은 에러가 발생한다.
  • 위 2번 사진의 에러는 에외 처리만 잘 하면 쉽게 fix가 가능하다.

    Excel 문서 작성 에러

  • Jenkins에서 Tool을 진행하는데 가장 많이 발견하고, 또, 애먹었던 에러다.
  • 3번 사진의 에러에서 나는 왜 계속 Excel(ChangeList.xlsx - Diff 모듈 요약 엑셀 문서) 작성 시 에러가 나는지 이해가 안 됐다. (Jenkins 환경이 아닌 로컬 환경에서는 정상동작을 했기 때문에,,)
  • 에러 코드를 검색해보니, Cell 값에 잘못 접근하거나 접근할 수 있는 범위를 벗어나며 접근하게 되면 해당 에러가 난다고 하는데 나의 경우 그렇지 않았다.
  • 그렇기에 나는 여러 경우의 수를 의심했다.(정품인증과 관련된건지,,, Excel 버전의 문제인지,,, exe파일에서 Excel 참조를 못하는 건지,,, 등) 근데 이 모두 문제가 아니었다..
  • 해당 에러를 잡기 위해 Jenkins에서 Test용 Job을 생성해서 가장 기초적인 틀만 가지고 어디서 Error가 발생하는지 알아봤다.
  • 그 결과 Excel을 저장할 때 사용하는 SaveAs 함수가 문제가 있었고, 이를 검색해보니 나와 동일한 에러를 겪는 사람들을 많이 발견했다.
  • 하지만, 동일한 문제라도 해결 방법은 여러 개다. 그 중 나는 코드를 많이 수정할 필요가 없고, 부가적인 함수, 라이브러리 등을 호출 하지 않는 방법을 모색했고,
  • 그 결과, SaveCopyAs(메모리에 적재되있는 엑셀 파일을 복사하여 로컬에 저장하는 함수)를 이용하면 문제없이 Jenkins에서도 엑셀이 저장되는 것을 확인했다.
  • 해당 코드 부분 수정 후 Tool을 Jenkins에서 실행해보니 정상 동작 하였다.

동작 방법


  • 각 Module 정보와 프로그램이 담긴 Repository가 Local에 Clone 되어 있어야 하고, 해당하는 Directory Path 필요
  • 사용 PC에는 JFrog 사용자 정보 등록과 같은 초기 세팅이 되어 있어야 함 -> Jenkins를 이용하므로, 따로 세팅 작업 불필요
  • 사용자는 Jenkins에서 ISO Build Number(ISO_PATH)와 현재 진행하는 SQA 차수를 입력 함
  • Jenkins Job에서 자동으로 Tool이 실행 되며, JFrog Artifactory에 현재 진행하는 SQA 차수 Direcotry에 ISO파일과 변경 사항 문서들을 Upload 함

마치며


  • 6월 23일 기준 해당 Tool 제작 기간이 한 달? 정도 된 거 같다. 뭐 특별한 기술이 들어가거나 하진 않았지만, 해당 Tool을 개발자가 아닌 비개발자가 사용하다 보니 여러 요구사항이 생기고, 또, 수정해야하는 일이 생기다보니 계속해서 개발 기간이 연장 됐다. 또, 6월 30일 부로 인턴이 종료 되다보니 해당 Tool을 최대한 유지보수 하지 않는 방향으로 제작해야 해서 오랜 시간이 걸린 것 같다. (실력이 많이 부족해서 과연 유지보수 할 일이 없을지…는 미지수….ㅎ…분명 있을듯…ㅎㅎ….) 해당 Tool을 제작하며, 내 개인적인 생각이지만 Code 작성 skill이 어느정도 향상 됐다고 생각한다. 기존에는 기능 구현을 목표로 코드를 짜다보니 스파게티 코드가 되는 경우도 많았고, 가독성이 매우 떨어졌는데, 선임님께 여러 차례 리뷰를 받고 함수화, 열거체, 구조체, 쓰레드 등을 사용해 처음보단 많이 개선된 Tool을 만들 수 있었다. 끝으로 인턴 종료까지 1주일 남짓 남았는데, 여러 Tool을 제작하고, 작성하진 않았지만, Delphi도 조금이나마 경험해볼 수 있어 좋았다.