※ Watch Out ※
이 블로그의 실습 관련된 포스팅은 대부분 제가 직접 진행하면서 작성된 내용이라 중간중간 오류가 있고 그 오류를 해결하는 trouble shooting 과정이 포함되어 있습니다. 그대로 따라하시면 제가 경험한 오류를 함께 경험하실수도 있습니다.
그리고 편의상 존칭 없이 친구한테 말하듯 기술하고 있으니 참고 부탁드립니다.
GitLab과 Teamcity 기본 설치가 끝났으니 이 둘을 연동해 실제 빌드 구성을 진행해보자.
GitLab 계정 생성
먼저 GitLab에 접속해보자. 초기 로그인 가능한 루트 계정이 뭔지 궁금해진다.
gitlab 공홈의 docker 설치 가이드를 살펴보면 docker로 설치시 root 계정의 초기 패스워들 확인할 수 있는 명령어를 친절하게 안내해주고있다.
https://docs.gitlab.com/ee/install/docker.html
GitLab EC2 인스턴스에 접속해 아래 명령을 쳐보자.
ubuntu@ip-172-31-60-34:~$ sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
Password: Pb+3EPjHW4gS10oOJCbSE5tzNLWi1uFlXH8xWVRCy98=
ubuntu@ip-172-31-60-34:~$
그리고 출력된 패스워드로 GitLab에 로그인해보자.
잊기전에 root 패스워드 부터 바꿔주자.
- User Settings > Password 메뉴에서 패스워드 변경
패스워드 변경하면 자동으로 로그아웃되는데 로그아웃 된 김에 root 계정 말고 실제로 사용할 계정을 하나 만들어보자.
로그인 페이지에서 아래 조그맣게 써있는 "Register now"를 클릭.
계정 등록이 완료되면 root로 로그인해 해당 계정을 승인하자.
- Admin > Overview > Users > Pending approval 에서 pending 중인 계정 approve 처리.
로그아웃하고 신규 생성한 계정으로 로그인하면 아래와 같이 Role을 선택하라고 나온다. 난 Software Developer를 선택해봐야겠다.
로그인하면 이제 프로젝트를 시작할 준비가 되었다.
Teamcity GitLab 계정 연동
teamcity에는 여러가지 로그인 인증 모듈을 제공한다. 그 중 우리가 구축한 GitLab의 계정을 통해 Teamcity도 사용할 수 있도록 연동을 해보자.
그럼 Teamcity에 admin 계정으로 로그인해보자.
- 우측 상단의 Administration 메뉴를 클릭해 관리자 메뉴에 접근
- Project-related Settings > Projects > <Root Project> 클릭
- 좌측 메뉴가 숨겨져 있다면 하단의 Show more 클릭 후 Connections 메뉴 클릭
- Add connection 클릭 후 Connection type을 "GitLab CE/EE" 선택
화면에 표시된 내용들을 잠깐 설명하자면,
- Redirect URL : Teamcity가 로그인 인증 요청을 GitLab으로 보낼 경우 GitLab에서 인증 완료 처리가 된 뒤 redirect 될 URL
- Minimal scope : GitLab 연동시 필요로 하는 연동 api
- Display Name : connection 이름
- Server URL : GitLab URL
- Application ID : GitLab에서 부여받은 ID
- Secret : GitLab에서 부여받은 secret key
Teamcity가 GitLab에 인증 요청을 보내려면 GitLab에서 제공하는 API를 사용해야 하며 GitLab에서 연동 API를 위한 id와 key를 발급해주면 그를 이용해 인증을 한다고 보면 된다.
그럼 다시 GitLab에 root로 로그인해 Teamcity 연동 API를 발급해주자.
- GitLab root 로그인
- Admin > Applications 메뉴 클릭
- New application 버튼 클릭
여기도 내용을 잠깐 설명하자면
- Name : 그냥 이름이다
- Redirect URL : 위에서 설명했던 Teamcity로 redirect할 URL. Teamcity에서 팝업창에 프린트해준 URL을 그대로 복붙하면 된다.
- Trusted : 체크하면 Trusted Application으로 인식해 GitLab OAuth 인증시 자동 인증 된다고 한다.
- Confidential : 기밀성 옵션인데 trusted 체크시 해당 옵션도 체크가 되어야하는 것 같다.
- Scopes : 권한을 부여할 api 리스트. teamcity 인증시 "api" 가 필요하다 했으니 api만 체크해주자.
저장하면 위와 같이 ApplicationId와 Secret을 확인할 수 있다. 복사해서 아까 Teamcity 연동 화면에 붙여넣어주자.
최종적으로 아래와 같이 인자들이 채워질거다. 저장하자.
GitLab connection은 생성 했으니 이제 실제로 Authentication에 적용해보자.
- 우측 상단의 Administration 메뉴 클릭
- 좌측 메뉴의 Server Administration > Authentication 메뉴를 클릭
- Authentication > HTTP/SSO authentication modules의 Add module 버튼을 클릭
- New module에서 "GitLab CE/EE" 선택
- 팝업창 안에 있는 문구 중 "GitLab CE/EE connection"을 클릭
- Connection이 제대로 설정 되었다면 Add 버튼이 잘 활성화 되어있을 것이다. Add 클릭.
- 마무리로 맨 아래 Save 클릭
이제 브라우져를 다 끄고 새로 킨 다음 Teamcity에 다시 접근해보자.
로그인창 가운데 귀엽게 GitLab 로고가 생겼다.
GitLab 로고를 클릭하면 아래와 같이 GitLab 로그인 페이지로 이동된다.
아까 생성한 계정으로 로그인해보자.
뭐지..? 오래걸리는거보니 안될거같은데??
안되네??
Teamcity -> GitLab 로그인 -> Teamcity redirect 까지 된것으로 보이는데
Teamcity에서 Unkwon error가 발생했다.
로그를 한번 까보자. EC2 인스턴스에 접속해 teamctiy log 폴더로 이동하자.
ubuntu@ip-172-31-55-180:~/teamcity-server/logs$ pwd
/home/ubuntu/teamcity-server/logs
ubuntu@ip-172-31-55-180:~/teamcity-server/logs$ ls
catalina.2022-08-02.log teamcity-javaLogging-2022-08-03.log
catalina.2022-08-03.log teamcity-javaLogging-2022-08-04.log
catalina.2022-08-04.log teamcity-mavenServer.log
host-manager.2022-08-02.log teamcity-notifications.log
host-manager.2022-08-03.log teamcity-rest.log
host-manager.2022-08-04.log teamcity-search.log
localhost.2022-08-02.log teamcity-server.log
localhost.2022-08-03.log teamcity-tfs.log
localhost.2022-08-04.log teamcity-vcs.log
manager.2022-08-02.log teamcity-versioned-settings.log
manager.2022-08-03.log teamcity-wrapper.log
manager.2022-08-04.log teamcity-ws.log
teamcity-activities.log teamcity.lock
teamcity-auth.log teamcity.pid
teamcity-cleanup.log threadDumps-2022-08-02
teamcity-diagnostics.log threadDumps-2022-08-03
teamcity-javaLogging-2022-08-02.log threadDumps-2022-08-04
ubuntu@ip-172-31-55-180:~/teamcity-server/logs$
음 로그파일이 많은데.. 대충 인증 관련 오류니까 teamcity-auth.log를 까보자.
ubuntu@ip-172-31-55-180:~/teamcity-server/logs$ tail -5 teamcity-auth.log
[2022-08-04 00:51:19,837] WARN [ no auth; http-nio-8111-exec-1] - Error occurred during HTTP authentication while processing request GET '/oauth/gitlab/accessToken.html?code=b8695e6a5f3e8ba8c51a20e514f9e5a479cc8b3d5e38972bfe7d96e27002db24&state=eyJyZXF1ZXN0S2V5IjoicGFjOUVwUDhrMHp2VzBINW9wYzhHU0hmY2pwcjZBeTMiLCJjb25uZWN0aW9uSWQiOiJQUk9KRUNUX0VYVF8yIn0%3D', from client 121.165.124.167:49891, no auth: jetbrains.buildServer.serverSide.oauth.OAuthException: Unknown error (enable debug to see stacktrace)
[2022-08-04 00:52:02,163] WARN [ no auth; http-nio-8111-exec-7] - Failed to login using GitLab CE/EE, request: GET '/oauth/gitlab/accessToken.html?code=2e4c13f26f65ede1c7c4056162daab08fc482e80a840e52789dc6ebe5cba88d4&state=eyJyZXF1ZXN0S2V5IjoiQ1FTUTZFUWx4RVNqRGFpYTBFMzZCNnJ2cUVlSjlxZkIiLCJjb25uZWN0aW9uSWQiOiJQUk9KRUNUX0VYVF8yIn0%3D', from client 121.165.124.167:49896, no auth: jetbrains.buildServer.serverSide.oauth.OAuthException: Unknown error (enable debug to see stacktrace)
[2022-08-04 00:52:02,163] WARN [ no auth; http-nio-8111-exec-7] - Error occurred during HTTP authentication while processing request GET '/oauth/gitlab/accessToken.html?code=2e4c13f26f65ede1c7c4056162daab08fc482e80a840e52789dc6ebe5cba88d4&state=eyJyZXF1ZXN0S2V5IjoiQ1FTUTZFUWx4RVNqRGFpYTBFMzZCNnJ2cUVlSjlxZkIiLCJjb25uZWN0aW9uSWQiOiJQUk9KRUNUX0VYVF8yIn0%3D', from client 121.165.124.167:49896, no auth: jetbrains.buildServer.serverSide.oauth.OAuthException: Unknown error (enable debug to see stacktrace)
[2022-08-04 00:52:56,375] WARN [ no auth; http-nio-8111-exec-5] - Failed to login using GitLab CE/EE, request: GET '/oauth/gitlab/accessToken.html?code=8f2a134a1e009df595ff9d574e6c08b8e269236b96906818ea66ca0ed38edde6&state=eyJyZXF1ZXN0S2V5IjoibWdPNVk0RHFFR2c4bGpDUU81aE5Od3hia2dtb2c5N3YiLCJjb25uZWN0aW9uSWQiOiJQUk9KRUNUX0VYVF8yIn0%3D', from client 121.165.124.167:49902, no auth: jetbrains.buildServer.serverSide.oauth.OAuthException: Unknown error (enable debug to see stacktrace)
[2022-08-04 00:52:56,375] WARN [ no auth; http-nio-8111-exec-5] - Error occurred during HTTP authentication while processing request GET '/oauth/gitlab/accessToken.html?code=8f2a134a1e009df595ff9d574e6c08b8e269236b96906818ea66ca0ed38edde6&state=eyJyZXF1ZXN0S2V5IjoibWdPNVk0RHFFR2c4bGpDUU81aE5Od3hia2dtb2c5N3YiLCJjb25uZWN0aW9uSWQiOiJQUk9KRUNUX0VYVF8yIn0%3D', from client 121.165.124.167:49902, no auth: jetbrains.buildServer.serverSide.oauth.OAuthException: Unknown error (enable debug to see stacktrace)
ubuntu@ip-172-31-55-180:~/teamcity-server/logs$
음..로그에도 그냥 unknown error로 찍혀있다...
아무리 구글링해도 안나온다.... gitlab 버전도 낮춰보고 했지만 안된다....
가만 생각해보니 gitlab 인스턴스랑 teamcity 인스턴스랑 공인IP로 서로 연동되는건데 혹시 이거때문일까 싶은 생각이 들어서
두 인스턴스에 적용되어있는 보안정책에 두 공인IP를 추가해 보았다.
그리고 teamcity에서 다시 gitlab 로그인 시도...
잘된다.
굳.
Teamcity GitLab 프로젝트 연동
위 과정은 GitLab 계정을 통해서 Teamcity를 접속하도록 계정을 연동한 과정이었다.
이제 GitLab의 프로젝트를 Teamcity로 연동해보자.
먼저 GitLab에 프로젝트를 하나 생성하자.
빈 프로젝트로 django tutorial이라는 이름의 프로젝트를 만들어준다.
django document에 있는 tutorial 코드를 일부 복붙해서 프로젝트 커밋해두자.
teamcity에서도 프로젝트를 생성하기 위해 일반 계정에 관리자 권한을 일단 부여해주자. (그룹 생성해주고 프로젝트 그룹에 매핑하면 굳이 관리자 권한 안줘도 될거같은데 일단 그냥 해본다.)
다시 gitlab 계정으로 로그인해보면 프로젝트 생성할 수 있는 버튼이 바로 보인다. 클릭해보자.
가운데 보면 연동한 GitLab이 보인다. 클릭해보면 아래와 같이 로그인한 계정으로 접근 가능한 Gitlab프로젝트가 보인다!!
클릭하고 별다른 설정 없이 쭉 진행하자.
프로젝트가 생성되면 제일 먼저 Build Steps 메뉴로 가서 빌드를 추가해보자.
맨 아래 Show advanced options를 클리하면 상세한 설정이 가능하다. 아래와 같이 빌드를 구성해보자.
- Runnter Type : Python
- Step Name : Test
- Command : File
- File : manage.py (옆 트리 아이콘 클릭시 선택 가능)
- Script or module arguments : test (python manage.py test 실행을 위해)
- Python version : Python3.X
- Environment tool : Venv (별도 모듈 설치가 필요 없다면 걍 쌩으로)
- Requirements file : requirements.txt (프로젝트 내에 생성한 requirements 파일명, 마찬가지로 트리아이콘에서 선택 가능)
- Environment name : .venv
첫 빌드가 생성되었다!!
Build Step 밑의 Triggers를 보면 Branch filter가 +:*로 되어있는데 이 경우 전체 브랜치를 모니터링해 변경이 일어나면 해당 Build를 실행한다는 의미이다. 나중에 디테일하게 설정해보기로 하고 메인 페이지로 가보자.
Agent 인스턴스를 꺼두었던게 기억나 급하게 켜보았더니 바로 첫번째 빌드가 실행되고 있었다.
클릭해서 들어가보면 상세 빌드 로그도 확인이 가능하다.
빌드 과정중 오류가 발생되어 중단되었다...... 대충보니 agent에서 gitlab으로 접속이 안되는 듯 하다..
생각해보니 Teamcity Agent에는 탄력적 IP를 할당하지 않아 공인IP가 계속 바뀐다.
그리고 적용되어있는 보안정책은 아래와 같이 사설 IP 및 gitlab, teamcity-server의 공인IP 만 허용이다.
Elastic IP는 5개까지만 할당이 가능한데 나는 기존이 사용중인 IP가 있어 할당 가능한 IP가 더 없다... 일단 GitLab의 http 포트는 all-permit으로 가야겠다...
(사실 도메인을 매핑해서 사용하게되면 Agent에서 hosts파일에 해당 도메인의 IP를 사설 IP로 지정해주기만 하면 깔끔하게 내부통신으로 처리가 가능하다. 다른 프로젝트에서는 그렇게 처리했었다...)
기존에 사용중인 http 포트 오픈 정책이 있어 gitlab 인스턴스에 추가해주었다.
그리고 강제로 다시 빌드를 돌려보았는데 역시 잘된다.
이번 포스팅에선 trouble shooting할 내용이 많았어서 좀 중구난방이네..
나중에 trouble shooting 내용 없이 깔끔하게 정리해봐야겠다.
다음포스팅에선 설정된 내용 기반으로 실제 사용할 빌드들을 구성해보고 배포까지 해봐야겠다.
끝.
2022.08.01 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (1)
2022.08.01 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (2) - AWS EC2 구축
2022.08.01 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (3) - GitLab 설치
2022.08.02 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (4) - Teamcity 설치
2022.08.05 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (5) - GitLab Teamcity 연동
2022.08.05 - [devops] - GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (6) - Teamcity 배포 구성
'devops' 카테고리의 다른 글
GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (6) - Teamcity 배포 구성 (0) | 2022.08.05 |
---|---|
GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (4) - Teamcity 설치 (0) | 2022.08.02 |
GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (3) - GitLab 설치 (0) | 2022.08.01 |
GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (2) - AWS EC2 구축 (0) | 2022.08.01 |
GitLab + Teamcity + Docker + AWS CI/CD 구축하기 (1) (0) | 2022.08.01 |
댓글