altair의 프로젝트 일기
라즈베리파이에 젠킨스 올리기 본문
파이썬으로 WordFinder 프로젝트를 진행하면서 매 버전마다 윈도우 실행파일을 만들기 위해서 다음과 같은 과정을 거쳤다.
- 맥북에서 코드를 작성하고 이를 깃허브에 푸쉬한다.
- 윈도우 데스크탑에서 깃허브에 접속해 전체 코드를 내려받는다.
- main.py를 실행해 정상 작동하는지 체크한다.
- 정상적으로 작동한다면 pyinstaller를 실행하여 .exe 파일을 생성한다.
- .exe파일을 실행해 정상 작동하는지 체크한다.
- 정상적으로 작동한다면 .exe 파일을 압축한다.
- 압축한 파일을 NAS에 FTP로 올린다.
- FTP서버에서 버전 파일을 수정한다.
사용자 입장에서는 업데이트 버튼만 누르면 알아서 업데이트가 진행되겠지만 개발자 입장에서는 최종 빌드 결과물을 사용자에게 전달하기까지 이렇게 복잡한 과정을 거쳐야 했다. 간단한 코드 리팩토링이나 한 두 줄짜리 자잘한 버그 픽스만 했을 뿐인데 그것을 사용자에게 전달하려면 오히려 코딩 자체보다 더 많은 시간이 걸리기도 했다.
그때는 아직 CI/CD와 같은 개념을 몰랐기 때문에, 전체 릴리즈 과정을 자동화하는 파이썬 스크립트를 작성하여 해결했다. 서버의 아이디와 비밀번호, 보안에 중요한 정보들이 하드코딩 되어있기 때문에 자세한 코드를 올릴 수는 없다. 하지만 기본적인 로직은 깃헙에서 zip파일을 다운받고, pyinstaller를 실행해 exe를 만들고, 이를 압축하여 서버에 올리는 것이다. 그 과정에서 버전 또한 자동으로 올라갈 수 있도록 하였다.
그러다가 CI/CD의 개념 또한 알게 되었고 젠킨스나 Azure DevOps Server와 같은 솔루션들을 알게되었다. 그 중에서도 오픈소스이고 컴퓨터에 쉽게 설치 가능한 젠킨스를 도커 없이 내 라즈베리파이에 직접 설치하고자 했다.
다룰 내용 요약
젠킨스에서 자동화할 개인 프로젝트는 미로찾기에서 최단경로 알고리즘 성능 비교 프로젝트이다. C++로 작성되었으며 젠킨스로 CMake와 make를 사용하여 자동으로 빌드하는 것까지 구현할 것이다. 또한 깃허브 메인 브랜치에 푸쉬할 때마다 바뀐 코드들을 새로 빌드하며 그 결과를 Slack를 통해 보고할 수 있도록 할 것이다.
젠킨스 설치
라즈베리파이 4B+에 라즈베리파이 OS Lite 32비트 버전을 설치하였다. 기본적인 초기 설정과 업데이트는 글에서 생략하겠다. 초기 설정 이후 어떤 프로그램도 설치되지 않았다는 것을 전제한다.
젠킨스는 자바를 기반으로 동작하니 라즈베리파이에 자바를 설치해야 한다.
sudo apt install openjdk-11-jdk
현재 라즈베리파이에서 지원하는 최신 버전인 openjdk-11을 설치하였다.
젠킨스 공식 문서에서는 데비안 기반 리눅스에 LTS버전을 설치하기 위한 명령을 다음과 같이 안내하고 있다.
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > \
/etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins
설치가 마무리되면 라즈베리파이의 로컬 IP의 8080 포트로 접속한다.
로딩이 완료되면 다음과 같은 화면이 나온다.
초기 비밀번호는 화면에 나오는 저 파일에 존재하지만 권한이 막혀있으니 사용자를 관리자로 변경하여 복사하자.
sudo -i su
cd /var/lib/jenkins/secrets
cat initialAdminPassword
화면에 뿌려진 비밀번호를 입력하면 플러그인을 설치할지 물어보는데, 공식 문서에서 말해주다시피 모르면 그냥 권장하는 거를 선택하자.
이후 어드민 설정까지 끝내면 다음과 같은 초기화면이 나온다.
정말 간단하게 라즈베리파이에 젠킨스를 설치했다! 와이파이로 연결했다면 사실상 손바닥 만한 물건에 전원선 하나만 연결했을 뿐인데 젠킨스 서버 역할을 수행할 수 있는 것이다.
'IT > 라즈베리파이' 카테고리의 다른 글
라즈베리파이 나스의 상태 모니터링 하기 (0) | 2022.11.03 |
---|---|
라즈베리 파이 피코에서 최단 경로 알고리즘 실행하기 (0) | 2022.02.22 |
트랜스미션 Permission denied 오류 해결하기 (0) | 2021.12.22 |
OMV를 사용하며 겪었던 시행착오들 (2) (0) | 2021.12.22 |
OMV를 사용하며 겪었던 시행착오들 (1) (0) | 2021.12.22 |