개발을 좀 하다 보며 연차가 올라가고 이제 어느정도 자기 domain분야의 지식이 갖춰지면 슬슬 다른게 눈에 더 들어오기 마련입니다.
주로 귀차니즘 혹은 프로젝트의 정합성, 안정성 등을 고려하는 의미로 프로젝트를 좀더 JUICY하게 해주는
외부 Tool들을 찾아보게 되죠.
이러한 계기로 저는 첫번째로 찾아보게 된데 FrameWork를 이용한 Modular Architecture 였습니다.
회사를 다니는 동안에는 일에 치여 개념만 알아보다가 저번 글에서 드디어 TUIST를 이용하는 법에 글을 써보았죠.
이러한 고민에 대한 연장선으로 이번에는 CI/CD 중 CI에 대하여 글을 써볼까 합니다.
우선 CI가 뭔지에 대해부터 알아보겠습니다.
CI는 Continuous Integration 즉, 지속적인 통합이라는 의미입니다.
지속적인 통합이란,
프로젝트의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합이 되는 것을 말합니다.
여기서 아마 공유 레포지토리라는 것은 gitHub, gitlab등을 말하는 거겠죠?
생각 해보면 기업에서 하루에 수십명의 개발자가 PR을 날려대며 변경 사항이 우후죽순으로 실행되는데
이것을 사람이 일일이 빌드하며 확인한다고 생각하면 좀 암울 하기는 합니다.
이러한 에로사항을 해결하기 위해서 CI의 개념이 등장했다고 생각하면 편하겠네요.
이렇게 시스템이 알아서 빌드하고 테스트를 해주면 기업의 전체적인 효율성이 올라가는 건 당연한 수순입니다.
그럼 이제부터 본격적으로 JENKINS를 사용하는 방법에 대해서 글을 써보겠습니다.
1. JENKINS 다운로드
jenkins는 다른 CI들과 달리 설치를 해서 사용하는 방식이랍니다.(다른 CI를 사용안해봐서...)
다운로드는 HomeBrew를 통해서 가능합니다.
brew install jenkins-lts
설치를 하고 나면 다음과 같은 상태가 됩니다.
자동적으로 포트가 8080으로 맞춰지네요. 그리고
brew service start jenkins-lts
명령어를 사용해서 실행시키라고 나옵니다.
해당 명령어를 실행하고 다음과 같은 화면이 나오면 정상적으로 실행 됬다는 의미입니다.
이제 다음 url을 통하여 젠킨스에 접속할 수 있습니다.
http://localhost:8080
2. JENKINS 유저 설정
처음 접속하면 다음과 같은 화면이 뜹니다.
초기 admin비밀번호를 입력하라고 나오네요.
다음 명령어를 통해서 비밀번호를 알아냅시다.
알아낸 초기 비밀번호를 입력하면 다음화면으로 넘어가게 됩니다.
여기서는 JENKINS에서 어떤 플러그인을 쓸건지 설정하는 화면이 나옵니다.
일단 아무것도 모르니까 권장사항대로 설치합니다. 추후 다른 플러그인을 사용하고 싶으면 다시 설정이 가능합니다.
이것저것 많이 깔리는 걸 볼 수 있습니다.
플러그인 설치가 완료 되면 이제야 다음과 같은 유저 설정 화면이 나옵니다.
채워 넣으시면 계정이 생성되며 다음 로그인 부터는 생성한 계정으로 로그인이 가능합니다.
그리고 다음과 같이 URL을 변경할 수 있다는 창이 나옵니다.
저는 그래서 jenkins:8080으로 설정했는데 http://localhost:8080으로 밖에 접속이 안되네요....
이유는 차후에 다른 글로 찾아뵙겠습니다. 여러분들은 그냥 냅두시는걸 추천드립니다.
3. JENKINS 프로젝트 생성
이제 대시보드 화면으로 넘어와서 프로젝트를 생성해 봅시다.
+ 새로운 Item을 누르시면 프로젝트 생성화면으로 이동하게 됩니다.
프로젝트 이름과 프로젝트 유형을 설정해줍니다.
저는 이전에 하던 SwiftAnimation_TUIST 프로젝트에 CI를 도입하려고 합니다.
유형은 FreeStyle project로 선택하시면 됩니다.
이제 프로젝트를 본격적으로 구성해 봅시다.
처음은 GENERAL부터 시작합니다.
별거 없이 그냥 프로젝트 소개만 쓱 쓰고 넘어가시면 됩니다.
다음은 소스관리 입니다.
저는 제 개인 깃헙에 있는 SwiftAnimation_TUIST 레포지토리를 사용하겠습니다.
여기서 만약에 SSH로 github에 접속을 하고 싶다면 Credentials을 설정해 합니다. 하지만 저는 그냥 HTTP로 했기 때문에 넘어갑니다.
그리고 Branches to build 로 넘어 갑니다.
원하는 브랜치를 선택하시면 됩니다.
하지만 초기 설정으로는 */master로 되어 있어서 기존의 main브랜치로 하시고 싶으신 분들은 */main으로 바꾸셔야 합니다.
(에러 로그가 보고 싶다면? -> https://sm-ios-story.tistory.com/48 )
소스설정 까지 끝났습니다. 그러면 이제 빌드를 어떻게 할 것인가만 남았습니다.
Build Steps에서 빌드를 위한 여러가지 명령어를 실행할 수 있습니다.
저는 command shell만 사용하기에 Execute shell만 사용하였습니다.
우선 SwiftAnimation_Tuist에는 TUIST 덕분에 workspace나 xcworkspace파일이 존재하지 않습니다.
따라서 우선 TUIST를 이용하여 workspace파일을 생성해야 합니다.
TUIST_GENTYPE=APP은 제가 TUIST에서 사용하기 위하여 설정한 환경변수이며 궁금하신 분들은
https://sm-ios-story.tistory.com/38 를 보시면 됩니다.
--no-open은 tuist generate만 쓰면 갑자기 xcode 가 뿅 하고 열립니다. 이것을 방지하기 위해 프로젝트는 생성하되
xcode는 키지 마라고 하는 옵션입니다.
그리고 2번째 shell 명령어는 단순 빌드하라는 명령어 입니다.
xcodebuild clean -workspace SwiftAnimation.xcworkspace -scheme SwiftAnimation -destination "platform=iOS Simulator,name=iPhone 14 pro"
CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO ONLY_ACTIVE_ARCH=NO
여기까지 했으면 기본적인 빌드 설정이 끝났습니다.
다만 의문이 하나 드실겁니다. JENKINS안에 TUIST가 있나?라고 하실 겁니다.
결론은 없습니다. 플러그인을 찾아봐도 없더군요.
그래서 저희는 TUIST를 사용하기 위해 환경 변수를 설정해야 합니다.
환경 변수 설정은 https://sm-ios-story.tistory.com/50 여기에 따로 적어놨습니다.
4. JENKINS 빌드해보기
설정이 끝났습니다.
한번 빌드를 해보져.
원래 자동으로 즉각 빌드 되게 Trigger를 설정해야 하지만 아직은 없으니 지금 빌드를 눌러서 수동으로 빌드 해봅시다.
클릭하고 나서 왼쪽 아래를 보면 빌드의 결과를 알 수 있습니다.
에러가 뜨면 에러로그까지 친절하게 보여주네요.
여기까지 기본적인 JENKINS를 이용한 CI였습니다.
다음은 Trigger를 설정하여 자동 테스트되게 하는 방법에 대해서 글을 이어가 보겠습니다.
'iOS' 카테고리의 다른 글
JENKINS[ERROR] no test bundles available ~ (1) | 2023.03.11 |
---|---|
JENKINS[ERROR] Couldn`t find any revision to build (1) | 2023.03.11 |
Tuist(3) - 환경변수 (0) | 2023.02.13 |
Tuist(2) - 기존 프로젝트에 도입하기 (2) | 2023.02.13 |
TUIST(1) - 설치,실행,기본구조 (1) | 2023.02.12 |