PHPStorm Plugin 개발 | #4. 플러그인 서명 & 빌드하기

보람·2022년 4월 27일
0

IDE-PLUGIN-만들기

목록 보기
5/7
post-thumbnail

작업한 플러그인을 마켓에 올리기 위해선 서명과 플러그인 빌드에 대한 작업이 먼저 돼야 한다.

gradle-intellij-plugin

나는 intelliJ에서 제공하는 boilerplate template 템플릿을 받아서 구현을 시작했다. (이전글을 보면 해당 내용이 나와있다.)
해당 템플릿을 받으면 gradle-intellij-plugin을 사용할 수 있다.

gradle

  • 빌드, 개발 지원에 중점을 둔 그루비 기반 빌드 툴이다.
  • 쉽게 말하면 개발자가 오직 개발에만 신경을 쓸 수 있도록 그 외부의 것들을 대신 해주는 것이다!

gradle에 대해선 이후에 더 공부해서 다른 글에다가 써보려 한다!


위 이미지와 같이 실제로 플러그인을 실행해보거나 플러그인 빌드를 하여 zip파일로 받고 출시하는 것 모두를 gradle이 있기에 편리하게 할 수 있었다.

하지만 그 이전에 환경값 설정에서 어떤 문제에 직면했었다😩

SignPlugin

이전 블로그 글에서 플러그인 환경값 정리 에 대해서 정리했었다.
해당 네개의 값이 있어야만 내가 이 플러그인을 만든 사람이고 이 플러그인을 배포 할 수 있다 라는 권한을 갖기 위해서는 서명을 해야 했다.
그때 사용하는 값이 아래 세개의 값이다.

  • PRIVATE_KEY : cat private.pem
  • PRIVATE_KEY_PASSWORD : private.pem 생성시 입력했던 패스워드 값
  • CERTIFICATE_CHAIN : cat chain.crt 해서 나온 값 추가

해당 세개의 값을 build.gradle.kts파일의 signPlugin 부분에 넣어야한다.

signPlugin {
        certificateChain.set(System.getenv("CERTIFICATE_CHAIN"))
        privateKey.set(System.getenv("PRIVATE_KEY"))
        password.set(System.getenv("PRIVATE_KEY_PASSWORD"))
    }

인텔리제이에서는 이전까지는 하드코딩된 값을 넣었지만 보안상의 문제로 시스템 환경변수에 값을 저장하고서 해당 값을 사용하라고 당부했다!

System.getenv가 뭐지?0?

깃허브 레포지토리 보안쪽에만 값을 저장해주면 되는줄 알았는데 로컬에서 빌드를 하기 위해서는 해당 값을 intelliJ 환경변수 란에 지정해줘야 했다!

intelliJ 오른쪽 상단을 보면 셀렉트 박스가 있다.

가장 처음에 나오는 "구성 편집"을 클릭하면 아래와 같은 화면을 볼 수 있다.

위 세개의 값을 "signPlugin"에 넣어준다.

signPlugin 버튼 클릭하면 서명이 되죵


gradle > intellij > signPlugin을 클릭하면 내 정보로 서명을 할 수 있다.
그렇게 클릭했을때!🌝

또다른 문제 직면, PRIVATE_KEY_PASSWORD 의 속썩임


관련 문서를 보면 위와같은 형식의 암호화 값을 사용하면 된다고 했다.
문서에서 알려준대로 openssl 명령어를 사용하여 해당 private.pem 파일을 생성하였다.
그런데 아래와 같은 빨간 에러를 보았다.

Caused by: org.bouncycastle.operator.OperatorCreationException: 1.2.840.113549.1.5.13 not available: PBKDF2with8BIT SecretKeyFactory not available

Caused by: java.security.NoSuchAlgorithmException: PBKDF2with8BIT SecretKeyFactory not available

Caused by: org.bouncycastle.operator.OperatorCreationException: 1.2.840.113549.1.5.13 not available: PBKDF2with8BIT SecretKeyFactory not available

Caused by: java.security.NoSuchAlgorithmException: PBKDF2with8BIT SecretKeyFactory not available

Execution failed for task ':signPlugin'.
> Process 'command '/Library/Java/JavaVirtualMachines/jdk-11.0.15.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1

처음에는 finished with non-zero exit value 1 맨아래줄에 있는 오류에만 눈길이 가서 찾아보니까 거의 대부분이 intelliJ 그래들 실행 설정을 "IntelliJ IDEA"로만 바꾸면 된다고 했다.

하지만 되지 않았다...🥺
이걸로 몇시간은 이것저것 검색하면서 붙잡고 있었는데
다른 문서를 보니

privateKey.set("""
    -----BEGIN RSA PRIVATE KEY-----
    MIIJKgIBAAKCAgEAwU8awS22Rw902BmwVDDBMlTREX440BAAVM40NW3E0lJ7YTJG
    ...
    EnNBfIVFhh6khisKqTBWSEo5iS2RYJcuZs961riCn1LARztiaXL4l17oW8t+Qw==
    -----END RSA PRIVATE KEY-----
  """.trimIndent())

BEGIN ENCRYPTED PRIVATE KEY로 시작하는 것이 아니라 BEGIN RSA PRIVATE KEY로 시작하는 것이었다!!

그래서 초기에 문서보고 만들었던 private.pem파일을 rsa 형식으로 변경해주는 것을 찾아서 실행했다.
해당 명령어는 아래와 같다.

openssl rsa -in private.pem -check -out privatersa.pem

대충 private.pem 파일을 rsa로 변형한 것을 privatersa.pem 파일로 만들어라 라는 명령인 듯 하다.

그렇게 만든것을 복사했고 두근거리는 마음으로 signPlugin을 클릭하니..!

:signPlugin (Thread[Execution worker for ':',5,main]) completed. Took 1.419 secs.

문제없이 잘 서명이 됨을 확인 할 수 있었다🌝

BuildPlugin

실제로 작업한 플러그인을 내 IDE에 적용하고 싶다면!
buildPlugin을 통해서 내 작업물을 zip파일로 만들어서 적용할 수 있다!

gradle > intelliJ > buildPlugin을 클릭하면
build > distributions 에 생긴다고 하는데 대체 그 폴더가 어딨는거야! 했더니 여기 있었다🌝

PHPStorm에 적용해보기


PHPStorm > preferences > 플러그인 > 톱니바퀴 버튼 클릭 > 디스크에서 플러그인 설치 > zip파일 열기 > 재시작
하면!


작업한 플러그인이 적용된 것을 확인할 수 있다!!😙

배포까지 작성을 해보려했는데 글이 길어져서 다음 글에서 배포에 대해 작성해보려 한다.

profile
백엔드 개발자

0개의 댓글