본문 바로가기
소프트웨어 마에스트로/BackEnd(Django)

[django] version control 최종 +

by alpakaka 2024. 9. 9.

오늘은 django version control 을 해보려 한다.

일단 생각은 다음과 같다.

workflow 를 통해 빌드가 될때마다 날짜와 시간을 version.txt에 입력하게 한다. 

그 version.txt를 sentry 가 읽어서 세팅값에 설정한다.

 

해보자!

 

일단 워크 플로우에 다음 사항을 추가해줬다.

 

근데 문제가 발생했다. 레포지토리에 반영이 안된다.

찾아보니까 커밋하고 푸시해야 레포지토리에 적용된다는 것 같다.

 

이런식으로 작성했다. yml 파일에 내 name 을 넣기엔 뭔가뭔가했다...

그래서 secrets 파일을 통해 관리하도록 작성했다.

 

그런데 또 문제가 발생했다.

 

이런식으로 뭔가 권한 문제가 발생했다.

해결 방법은 두가지라고 하는데

settings > actions > general 을 들어가서 가장 마지막즈음에 이런 화면이 뜨는데, 

저기서 첫번째를 눌러줘야한다는 것이다.

그런데 나는 안눌렸다. 아마 public 이라.. 막아놓은 것 같다.

그래서 어쩔 수 없이 저기에도 나와있는 github_token 을 받아서 사용해야할 것 같다...^^

 

일단 토큰을 발행했다.

이것만 체크했다.

 

그다음에 아래와 같이 코드를 수정했다.

- name: Commit version update
        run: |
          git config --global user.name ${{ secrets.GIT_USER_NAME }}
          git config --global user.email ${{ secrets.GIT_USER_EMAIL }}
          git add version.txt
          git commit -m "Update version to ${VERSION}"
          git push https://x-access-token:${{ secrets.ACTIONS_PAT }}@github.com/SWM-OneStep/backend.git develop

실행해보았다..

뭘까..

일단 물어봐본다..

하다보니 뭔가 점점 복잡해지는데..

https://stackoverflow.com/questions/57921401/push-to-origin-from-github-action

 

Push to origin from GitHub action

I'm trying to push to origin remote from GitHub action. The logic of my action is: handle pull_request_review events and filter by comment message checkout to master, merge PR branch, run some che...

stackoverflow.com

여기에서 해결하려고 많은 답변이 달렸는데..

계속 저 @v2, v1 이뭔가해서 찾아봤다.

https://velog.io/@rlatjdgh9612/Github-Action-Checkout%EC%BD%94%EB%93%9C-%EB%82%B4%EB%A0%A4%EB%B0%9B%EA%B8%B0

 

[CI/CD] Github Actions - Checkout Action 으로 코드 내려 받기

먼저 Git에서 Checkout은 코드 저장소(repository)에서 특정 브랜치(branch)로 전환하는 작업을 말하지만, GitHub Actions 입장에서 바라보면 우리가 로컬 환경에서 코드를 작업후 코드 저장소(원격 저장소 :

velog.io

 

잘은 모르겠는데 뭔가 제공해주는 라이브러리 같은 건 가 보다...

 

해결했다!!

일단 코드는 이런식으로 작성했다.

이런식으로 토큰을 넣어주고 아래는 다시

이런식으로 했다 중간에 pull 이 생긴 이유는 pull 안해서 오류 생긴다고 추가하라는 메세지를 받았기 때문이다...

어쨋든 잘 해결되었따...

근데 저 위에 저 불길한 갈색점을 눌러보니 prod 에서 잘 안되었다.

 

보니까 prod 는 main 을 바꿔야하는 상황이고, dev 는 develop, test는 뭔지 모르겠다.

여튼 브랜치를 다시 잘 조정해주었다.

 

잘 해결은 되었는데 두번째 문제가 발생했다.

계속 main 과 develop 에 커밋이 되면서 무한 deploy 가 발생했다....

그래서 팀장님께물어보니 굳이 커밋까지 할 필요는 없다는 의견을 들었다

그래서 바꿔봤다.

 

commit 로직을 제외하고 파일에 적는 방식으로 진행했다.

그런데 이러니까 발생하는 문제가 있었다.

일단 적는데에는 큰 문제가 없는 것 같은데

커밋을 안하다보니 로컬에만 잠시 왔다가 떠난다.

그러다보니 sentry 에서 릴리즈를 읽을 때 즈음에는 그냥 빈 파일을 읽는 문제가 발생하는 것 같다.

아니면 센트리가 txt 파일에 쓰기 전에 이미 읽어버린 직후인것같다.

그래서 팀장님 코드를 확인했다.

 

팀장님의 코드의 경우에 다음과 같이 작성하셨는데

일단 txt 파일 작성 -> txt 파일을 읽어오는 함수와 해당 내용을 반영해주는 작업을 진행

이 순서가 보장되도록 하였는데 이와 마찬가지로 해야할 것 같다.

 

그래서 생각하는 방법은

1. 팀장님이 작성한 것과 같이 함수를 작성하고 sentry 의 init 파일의 release 속성을 수정하도록 (혹은 작성하도록) 작성한다

2. sentry cli 를 통해 해결한다. (직접 설정한다.) https://docs.sentry.io/cli/releases/

 

Release Management

Sentry's command line interface can be used for release management. The CLI allows you to create, edit and delete releases as well as upload release artifacts.

docs.sentry.io

 

근데 cli는 최대한 미루고 싶다. 그래서 약간 더 고민해봤다.

 

근데 생각해보니까

먼저 파일을 만들어준뒤에 ecr 의 도커 빌드를 진행하면...

되는 것이었던 것 같았다...

그래서 진행해봤다!

 

일단 Ecr 의 workflow 보다 순서를 먼저 두어서 진행해봤다.

...^^ 잘 적용되었다.

행복하다... 알파카는 이제 자유에요....

이제 Release 는 일단 끝났으니.. 

 




할일 django project 에 admin 페이지 붙이기

연결완료 커스텀해야겠다...!