#9 11.82 npm ERR! code ENOENT
#9 11.83 npm ERR! path git
#9 11.83 npm ERR! errno -2
#9 11.83 npm ERR! enoent Error while executing:
#9 11.83 npm ERR! enoent undefined ls-remote -h -t ssh://git@github.com/eligrey/FileSaver.js.git
#9 11.83 npm ERR! enoent
#9 11.83 npm ERR! enoent
#9 11.83 npm ERR! enoent This is related to npm not being able to find a file.
#9 11.85
#9 11.85 npm ERR! A complete log of this run can be found in:
#9 11.85 npm ERR!     /root/.npm/_logs/2020-11-10T14_49_13_350Z-debug.log

이거로 한참을 헤매었다.... 아오~

 

FROM node:14.15-alpine
WORKDIR /app
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

dockerfile이다... 별 문제 없어 보인다. 그러니 저런 에러가 나오면 멘붕이지...

alpine 이미지의 특성인지는 모르겠지만 "git@github.com/eligrey/FileSaver.js.git" 이 repository를 땡겨오는데 문제가 생겼고 path git 이라는 문구도 보인다... 설마설마... alpine에 git이 없나??? (npm install인데 git에서도 땡겨오는지는 몰랐음....)

 

RUN git --verion을 추가하기에 이르렀다. 예상대로 git 명령어 없음.

 

RUN npm install 전에 아래 추가하여 git 설치 했더니 문제 없이 docker image가 build되었다.

 

RUN apk update && apk upgrade && apk add --no-cache bash git openssh

slack을 쓰긴 쓰고 있지만....

사실 slack을 사용하고 있지만 협업툴로써 쓰기 보다는 메신저로 쓰고 있었다. 하지만 slack과 연동되는 많은 app의 기능은 단순 메신저로 사용하던 나를 slack API까지 보게 만들 정도로 매력이 넘친다. slack의 app directory를 가보면 category가 있는데 develop에 대한 app뿐만 아니라 finance, travel과 같은 app들과도 연동이 가능하다.

개발장이라 그런지 "project management"를 주목 하게 되었고 asana, trello, jira, gitlab등에 관심을 가지고 보게 되었다. 그 중에 MeisterTask는 유료긴 하지만 결제를 고민하게 될 정도로 괜찮아 보인다. 무료로도 사용 가능하지만 slack연동은 안되어서 일단 연동없이 무료로 써보고 포스팅도 할 계획이다.

왜 git과 slack을 연동하려고?

결론 부터 말하자면 처음 도입부에서 언급했던 것처럼 단순 메신저가 아닌 협업툴로 쓰기 위해서 첫단추를 "git연동"으로 잡았다. (그런데 쉽지 않는 주제를 잡아서 하고 나서 헥헥거리는 날 보게 됨...ㅠㅠ)

사실 github나 gitlab같은 서비스들은 연동이 쉽게 되긴한다. 서비스 자체에서 webhooks을 설정 해주는 것 같다. (물론 해보지 않고 블로그만 보고 얘기 하는 것임.) 하지만 불행하게도 git 형상관리 시스템은 다른 팀에서 관리 하고 있어서 gitlab을 설치 하는 그런 생각은 일찌감치 접었다. 대신 git의 hook를 써서 slack과 연동하기로 한다.

본격적인 slack 연동

먼저 slack page에서 자기의 workspace로 이동하면 위쪽에 Manage 탭을 클릭한다. 그럼 좌측에 Custom Integrations에 Incomming Webhooks가 보인다.

Incomming Webhooks를 클릭하면

Add Configuration을 클릭하면

특정 채널로 noti.하도록 설정하면

Configuration이 생긴다. edit버튼을 누르면

여러 내용들이 나오는데 제일 중요한것은 Webhook URL이다. 이 URL로 호출을 해줘야 해당 configuration이 동작하기 때문이다. 나머지 Setup Instructions나 Massage Attachments는 data structue와 richtext를 위한 내용이라고 보면 된다. 이러면 slack쪽 설정은 끝났다.

slack과 git 연동

지금까지는 slack에서 메세지를 받는 준비를 한 것이다. 이제 git에서 slack으로 메세지를 주도록 설정하면 된다. 그러기 위해서 나는 git push가 되었을 때를 기준으로 메세지를 보내려고 했다. 그래서 git hook을 사용하면 되는데 설명은 링크로 대체 한다. (GIT HOOK)

git hook은 크게 클라이언트 훅과 서버 훅으로 나뉘고 클라이언트 훅은 어떤 상황에서든 사용가능하나 서버 훅은 push의 전후로 사용된다는 특징이 있다. 당연하겠지만 서버 훅으로 설정되어야 어떤 push든 처리 가능하지 클라이언트 훅은 사용자별로 세팅되어야 전 인원이 적용되는 것이기 때문에 보통 서버 훅을 고려하지 않을까 생각 된다. server hook은 종류가 많지 않다. 그 중에 push후에 실행되는 post-receive를 사용했다.

먼저, remote git에 ssh로 접속해서 메세지를 보내고 싶은 repository의 hooks폴더로 이동한다. .sample로 끝나는 파일들은 git 설치하면 기본적으로 제공하는 sample들이다. 하지만 내가 쓰고자 하는 post-receive의 sample은 없었다... 지쟈스~ 결국 간단하지만 아래와 같이 shell을 만들었다!

#!/bin/bash

USER=$(whoami)
#GIT_LOG=$(git log --pretty=format:"commit:\t%H\nAuthor:\t%an\nDate:\t%ad\n%s" -1)
GIT_LOG=$(git log -1)
curl -X POST --data-urlencode "payload={\"channel\": \"#back-end\", \"username\": \"$USER\", \"icon_emoji\": \":bell:\", \
\"attachments\":[\
      {\
         \"fallback\":\"Please fix errors.\",\
         \"color\":\"good\",\
         \"fields\":[\
            {\
               \"title\":\"New Commit\",\
               \"value\":\"$GIT_LOG\",\
               \"short\":false\
            }\
         ]\
      }\
   ]}" https://hooks.slack.com/services/TAC434PG9/AAAAAAAA/BBBBBBBBBBBBBBBBBBBBBBBB

위치는 {remote git repository folder}/hooks/post-receive로 새로 만들었다. payload에 attachments는 richtext를 지원하는 slack api로 아래 갭쳐 처럼 보이게 한다.

attachments는 slack API로 꽤 많은 기능이 제공된다. API링크를 보고 입맛에 맞게 payload를 수정하면 될 것 같다. 쉬운줄 알았는데 4시간을 허비하니까 힘들어서 attachment는 이 정도만 하고 "이 정도면 됐어!"하고 셀프 위안 중이다.ㅋ

후기

이로써 slack을 메신저에서 협업툴로 조금은 업그레이드 된 것 같다. slack은 채널이라는 개념이 있어서 프로젝트별로(개발장이라 프로젝트임. 원래는 그룹방 개념이라 프로젝트 말고 다른 이미로도 쓰일 수있다.) 채널을 만들어서 그 프로젝트에 관련된 알림을 주고 받는게 핵심이라고 생각한다. 현재는 git을 연동 했지만 나중에는 jira나 meister task같은 management tool도 연동하면 굉장히 나이스 할 것 같다.

'Programming > Git' 카테고리의 다른 글

repo 를 사용하여 프로젝트 관리하기  (0) 2016.06.15
git commit 내용을 메일로 보내기  (0) 2016.01.27
GIT에 대한 내용정리  (0) 2015.08.27

+ Recent posts