Posts tagged "ci/cd" | DevSecOps 구축 컨설팅, 교육, 기술지원 서비스 제공

하이라이트

GitLab 15.1 릴리즈 노트: SAML 그룹 동기화와 SLSA 레벨 2 빌드 아티팩트 자격 증명과 함께 릴리즈

오늘 우리는 SAML 그룹 동기화, 빌드 아티팩트 자격 증명, CI/CD 구성이 포함된 링크, DORA 메트릭으로 Value stream에 대해 향상된 가시성 등을 포함 하는 GitLab 15.1 릴리즈를 발표하게 된 것을 기쁘게 생각합니다! 이는 이번 릴리즈의 30개 이상의 개선 사항 중 일부에 불과합니다. 아래에서 멋진 업데이트를 모두 확인하세요. DevOps를 기념하는 6월 23일에 함께 하세요! 다음 달 릴리즈의 내용을 미리 보려면 15.2 릴리즈 시작 비디오가 포함된 예정 릴리즈 페이지를 확인하십시오.

자세히 보기
HOME  /  BLOG

ci/cd 태그 10개의 포스트

AWS EC2 Mac 인스턴스에 GitLab Runner 설치하기AWS EC2 Mac 인스턴스에 GitLab Runner 설치하기

iOS 앱을 개발하면서 코드사이닝, 버전 및 빌드 번호 변경, 테스트하여 TestFlight 및 App Store에 배포하는 일련의 과정은 번거로운 작업일 수 있습니다. Fastlane과 GitLab CI/CD 파이프라인을 사용하면 이러한 작업을 자동화할 수 있습니다. 개발자는 새로운 기능을 개발하거나 기존 기능을 개선한 후, 코드를 커밋하고 GitLab에 Push만 하면 됩니다. GitLab CI/CD 파이프라인이 개발자를 대신해 자동으로 빌드, 테스트하고 TestFlight 및 App Store에 앱을 배포합니다.

이번 글에서는 AWS EC2 Mac 인스턴스를 시작하고 Apple Remote Desktop(ARD)을 사용하여 인스턴스에 연결한 후, GitLab macOS Runner를 설치 및 구성하는 내용을 다루겠습니다. “GitLab과 Fastlane으로 iOS 앱 빌드 및 배포 자동화하기” 시리즈의 첫 번째 포스트입니다.

GitLab에서 iOS 앱을 빌드하고 배포하기 위해서는 macOS Runner가 필요합니다. 소규모 기업이나 팀에서는 Mac mini나 MacBook에 Runner를 설치하고 사무실 한편에 두고 사용할 수 있겠으나 보안, 안정성 및 확장성 향상을 고려한다면 AWS EC2 Mac 인스턴스를 사용하는 것도 방법입니다. 다만 AWS EC2 Mac 인스턴스 사용에 대한 비용은 고려해야 할 사항입니다.

AWS EC2 Mac 인스턴스 시작#

Mac1 인스턴스는 기본적으로 macOS 운영 체제를 지원합니다. Mac 미니 하드웨어에 구축되며 3.2GHz 인텔 8세대(Coffee Lake) Core i7 프로세서로 구동됩니다. 이러한 인스턴스는 iPhone, iPad, iPod, Mac, Apple Watch 및 Apple TV와 같은 Apple 디바이스용 애플리케이션의 개발, 구축, 테스트 및 서명에 적합합니다. SSH 또는 Apple Remote Desktop(ARD)을 사용하여 Mac 인스턴스에 연결할 수 있습니다.

EC2 Mac 인스턴스 상세 정보#

현재는 x86 기반 EC2 Mac 인스턴스만 사용 가능하고, M1 Mac 인스턴스는 preview 상태입니다.

Instance FamilyInstance SizeProcessorPhysical coresvCPUsMemory (GiB)Instance StorageNetwork Bandwidth (Gbps)EBS Bandwidth (Mbps)
Mac1mac1.metalIntel Core i761232EBS-Only108,000
Mac2mac2.metalApple M14 performance +4 efficiency cores1216EBS-Only108,000

가격#

Amazon EC2 Mac 인스턴스는 온디맨드 및 Savings Plan 요금 모델을 통해 전용 호스트로 구입할 수 있습니다. EC2 Mac 인스턴스에 대한 청구는 Apple macOS 소프트웨어 라이선스 계약을 준수하기 위해 24시간의 최소 할당 기간으로 초당 청구됩니다. 온디맨드를 통해 EC2 Mac 호스트를 시작하고 몇 분 안에 가동 및 실행할 수 있습니다. 24시간의 최소 할당 기간이 끝나면 호스트는 추가 약정 없이 언제든지 해제될 수 있습니다.

온디맨드 요금#
  • 아시아 태평양(서울) : 1.332 USD (1일 : 31.968 USD)
  • 아시아 태평양(도쿄) : 1.399 USD
  • 미국 (버지니아 북부, 오하이오) : 1.083 USD

콘솔을 사용하여 Mac 인스턴스 시작#

Mac 인스턴스는 전용 호스트에서 베어 메탈 인스턴스로만 사용할 수 있으며, 전용 호스트를 릴리스하기 전의 최소 할당 기간은 24시간입니다. 전용 호스트당 하나의 Mac 인스턴스를 시작할 수 있습니다. AWS 조직 내의 AWS 계정 또는 조직 단위나 전체 AWS 조직과 전용 호스트를 공유할 수 있습니다.

Amazon EC2 전용 호스트는 고객 전용의 EC2 인스턴스 용량을 갖춘 물리적 서버입니다.

다음 절차의 설명에 따라 AWS Management Console을 사용하여 Mac 인스턴스를 시작할 수 있습니다.

  1. EC2 콘솔의 좌측 탐색 창에서 인스턴스 > 전용 호스트를 선택합니다.
  2. 전용 호스트 할당 버튼을 클릭합니다.
  3. 다음 항목을 입력 또는 선택한 후 할당 버튼을 클릭합니다.
    • 이름 태그 : macOS GitLab Runner 입력
    • 인스턴스 패밀리 : mac1 선택
    • 인스턴스 유형 : mac1.metal 선택
    • 가용 영역 : 전용 호스트의 가용 영역 선택 (예 : ap-northeast-1a)
    • 수량 : 1 유지
  4. 목록에서 생성한 전용 호스트를 체크하고, 작업(Actions), 호스트에서 인스턴스 시작(Launch instances onto host)을 차례로 선택합니다.
  5. 다음 항목을 입력 또는 선택한 후 인스턴스 시작 버튼을 클릭합니다.
    • 이름 : macos-runner 입력
    • Amazon Machine Image(AMI) : macOS Monterey 12.3.1 선택
    • 인스턴스 유형 : mac1.metal 선택
    • 키 페어 : 미리 생성한 키 페어 선택
    • 네트워크 설정 섹션의 편집 버튼을 클릭하고 다음 항목 선택
      • VPC
      • 서브넷
      • 방화벽(보안 그룹)에서 기존 보안 그룹 선택을 체크하고 Runner 보안 그룹 선택
    • 스토리지 구성 : 100 GiB, gp2
  6. 성공 메시지 확인 후, 모든 인스턴스 보기 버튼을 클릭합니다.
  7. 인스턴스 화면에서 시작 상태를 볼 수 있습니다. 인스턴스를 시작하는 데 약간 시간이 걸립니다. 인스턴스를 시작할 때 초기 상태는 대기 중(pending)입니다. 인스턴스가 시작된 후에는 상태가 실행 중(running)으로 변경되고 상태 검사를 통과하면 인스턴스가 준비됩니다.

SSH를 사용하여 인스턴스에 연결#

  • 아래 명령을 실행하여 EC2 Mac 인스턴스에 연결합니다.
$ ssh -i "my-key-pair.pem" ec2-user@13.230.99.158
The authenticity of host '13.230.99.158 (13.230.99.158)' can't be established.
ED25519 key fingerprint is SHA256:J4yXPVW6l5n4WLridVLGwks/XcdpTQpe6HaUUtHuswg.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '13.230.99.158' (ED25519) to the list of known hosts.
┌───┬──┐ __| __|_ )
│ ╷╭╯╷ │ _| ( /
│ └╮ │ ___|\___|___|
│ ╰─┼╯ │ Amazon EC2
└───┴──┘ macOS Monterey 12.3.1
ec2-user@ip-10-20-101-35 ~ %
  • system_profiler SPSoftwareDataType SPHardwareDataType 명령을 실행하면 시스템의 소프트웨어와 하드웨어 정보를 확인할 수 있습니다.
% system_profiler --help
% system_profiler -listDataTypes
% system_profiler SPSoftwareDataType SPHardwareDataType
Software:
System Software Overview:
System Version: macOS 12.3.1 (21E258)
Kernel Version: Darwin 21.4.0
Boot Volume: Macintosh HD
Boot Mode: Normal
User Name: ec2-user (ec2-user)
Secure Virtual Memory: Enabled
System Integrity Protection: Disabled
Time since boot: 26 minutes
Hardware:
Hardware Overview:
Model Name: Mac mini
Model Identifier: Macmini8,1
Processor Name: 6-Core Intel Core i7
Processor Speed: 3.2 GHz
Number of Processors: 1
Total Number of Cores: 6
L2 Cache (per Core): 256 KB
L3 Cache: 12 MB
Hyper-Threading Technology: Enabled
Memory: 32 GB
System Firmware Version: 1731.100.130.0.0 (iBridge: 19.16.14243.0.0,0)
OS Loader Version: 540.100.7~23
Serial Number (system): H2WFR0U5JYVY
Hardware UUID: BAC422CE-02A5-55DD-BADD-EB7EC2E68249
Provisioning UDID: BAC422CE-02A5-55DD-BADD-EB7EC2E68249
Activation Lock Status: Disabled
  • 시스템의 디스크 정보를 확인합니다.
% df -h
Filesystem Size Used Avail Capacity iused ifree %iused Mounted on
/dev/disk2s4s1 100Gi 14Gi 78Gi 16% 500637 814981080 0% /
devfs 188Ki 188Ki 0Bi 100% 650 0 100% /dev
/dev/disk2s6 100Gi 20Ki 78Gi 1% 0 814981080 0% /System/Volumes/VM
/dev/disk2s2 100Gi 252Mi 78Gi 1% 770 814981080 0% /System/Volumes/Preboot
/dev/disk2s5 100Gi 256Ki 78Gi 1% 20 814981080 0% /System/Volumes/Update
/dev/disk2s1 100Gi 6.5Gi 78Gi 8% 156064 814981080 0% /System/Volumes/Data
map auto_home 0Bi 0Bi 0Bi 100% 0 0 100% /System/Volumes/Data/home

ARD를 사용하여 인스턴스에 연결#

Apple Remote Desktop(ARD)을 사용하여 인스턴스에 연결합니다.

로컬 컴퓨터에 ARD 클라이언트 또는 ARD를 지원하는 VNC 클라이언트가 설치되어 있는지 확인합니다.

macOS에서는 기본 제공되는 화면 공유 애플리케이션을 활용할 수 있습니다. 그렇지 않은 경우, 운영 체제의 ARD를 검색하여 설치합니다.

  • SSH를 사용하여 인스턴스에 연결한 후, passwd 명령을 사용하여 ec2-user 게정의 암호를 설정합니다.

    $ sudo passwd ec2-user
    Changing password for ec2-user.
    New password:
    Retype new password:
    ################################### WARNING ###################################
    # This tool does not update the login keychain password. #
    # To update it, run `security set-keychain-password` as the user in question, #
    # or as root providing a path to such user's login keychain. #
    ###############################################################################
  • Apple Remote Desktop 에이전트를 시작하고 다음과 같이 원격 데스크톱 액세스를 활성화합니다.

    $ sudo /System/Library/CoreServices/RemoteManagement/ARDAgent.app/Contents/Resources/kickstart \
    -activate -configure -access -on \
    -restart -agent -privs -all
    Starting...
    Screen recording might be disabled. Screen Sharing or Remote Management must be enabled from System Preferences or via MDM.
    Screen control might be disabled. Screen Sharing or Remote Management must be enabled from System Preferences or via MDM.
    Activated Remote Management.
    Stopped ARD Agent.
    ec2-user: Set user remote control privileges.
    ec2-user: Set user remote access.
    Done.
  • 로컬 컴퓨터에서 아래 명령을 사용하여 인스턴스에 연결합니다.

    ssh -L 5900:localhost:5900 -i "my-key-pair.pem" ec2-user@13.230.99.158
  • Finder를 열고 화면 공유 애플리케이션을 시작합니다. (⌘cmd + k 키)

    화면 공유 애플리케이션 | 인포그랩 GitLab
  • 사용자 이름에  ec2-user을 입력하고 이전 단계에서 설정한 암호를 입력하여 로그인합니다.

    화면 공유 로그인 | 인포그랩 GitLab
  • 화면 공유 애플리케이션이 시작되면 다시 패스워드를 입력하여 로그인합니다.

    macOS 로그인 | 인포그랩 GitLab

macOS Runner 설치 및 구성#

Amazon EC2 Mac 인스턴스에 GitLab Runner를 설치하려고 할 때, SSH를 사용하여 인스턴스에 연결하여 설치하면 아래와 같은 오류가 발생할 수 있습니다. ARD로 연결한 후, GUI 상에서 Terminal을 열고 설치 및 구성을 진행해야 합니다.

"launchctl" failed: exit status 112, Could not find domain for

ARD로 연결한 Amazon EC2 Mac 인스턴스에서 Terminal을 열립니다.

Terminal | 인포그랩 GitLab

이후 Runner 설치 및 등록 절차는 로컬 컴퓨터에서 진행하는 것과 동일합니다.

  • macOS amd64용 바이너리를 다운로드합니다.

    % sudo curl --output /usr/local/bin/gitlab-runner "https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-darwin-amd64"
    % Total % Received % Xferd Average Speed Time Time Time Current
    Dload Upload Total Spent Left Speed
    100 46.9M 100 46.9M 0 0 10.6M 0 0:00:04 0:00:04 --:--:-- 10.6M
  • 실행 권한을 부여합니다.

    sudo chmod +x /usr/local/bin/gitlab-runner
  • GitLab Admin Area에 접속한 후, Overview > Runners 페이지로 이동합니다.

    Shared Runners | 인포그랩 GitLab
  • Terminal에서 gitlab-runner register 명령을 실행하고 지침에 따라 아래 항목을 입력합니다.

    • Enter the GitLab instance URL : GitLab URL를 복사한 후, 터미널에 붙여 넣고 Enter 키를 누릅니다.

    • Enter the registration token : GitLab UI에서 Copy token 아이콘을 클릭하여 클립보드에 복사한 후, 터미널에 붙여 넣고 Enter 키를 누릅니다.

    • Enter a description for the runner : 러너에 대한 설명을 입력하고 Enter 키를 누릅니다. (예: aws-macos-runner-1)

    • Enter tags for the runner : amd64,monterey,ios를 입력하고 Enter 키를 누릅니다.

    • Enter optional maintenance note for the runner : 관리를 위한 설명을 입력합니다. (예: AWS macOS Runner)

    • Enter an executor : shell을 입력하고 Enter 키를 누릅니다.

      % gitlab-runner register
      Runtime platform arch=amd64 os=darwin pid=1254 revision=f761588f version=14.10.1
      WARNING: Running in user-mode.
      WARNING: Use sudo for system-mode:
      WARNING: $ sudo gitlab-runner...
      Enter the GitLab instance URL (for example, https://gitlab.com/):
      https://gitlab.infograb.net/
      Enter the registration token:
      Hzyo3pPTE9FJgH8KpHze
      Enter a description for the runner:
      [ip-10-20-101-35.ap-northeast-1.compute.internal]: aws-macos-runner
      Enter tags for the runner (comma-separated):
      amd64,monterey,ios
      Enter optional maintenance note for the runner:
      AWS macOS Runner
      Registering runner... succeeded runner=GR1348941GJpxXCKV
      Enter an executor: custom, docker, parallels, ssh, docker-ssh+machine, kubernetes, docker-ssh, shell, virtualbox, docker+machine:
      shell
      Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
  • vi .gitlab-runner/config.toml 명령을 실행하고 concurrent1에서 8로 수정합니다.

    concurrent = 8
    check_interval = 0
    [session_server]
    session_timeout = 1800
    [[runners]]
    name = "aws-macos-runner"
    url = "https://gitlab.infograb.net/"
    token = "Hzyo3pPTE9FJgH8KpHze"
    executor = "shell"
    [runners.custom_build_dir]
    [runners.cache]
    [runners.cache.s3]
    [runners.cache.gcs]
    [runners.cache.azure]
  • GitLab Runner를 서비스로 설치하고 시작합니다.

    cd ~
    gitlab-runner install
    gitlab-runner start

맺음말#

지금까지 AWS 전용 호스트에서 EC2 Mac 인스턴스를 시작하고 Apple Remote Desktop(ARD)을 사용하여 인스턴스에 연결한 후, GitLab macOS Runner를 설치 및 구성하는 방법을 알아보았습니다. 다음 글은 iOS 프로젝트용 GitLab CI/CD 파이프라인을 구성하기 전에, Fastlane 및 CocoaPods를 설치하고 구성하는 방법에 대한 내용을 작성할 예정입니다.
다음 포스트도 기대해 주세요.

인포그랩은 GitLab 및 DevOps에 대한 맞춤 기술 지원을 제공합니다. GitLab과 Runner 구축 관련하여 지원이 필요하시면 문의하기로 연락 주십시오.

참고#

AWS Amazon EC2 Mac 인스턴스
Amazon EC2 Mac Instances
Install GitLab Runner on macOS

Jason Lee
Jason Lee | DevOps Architect
돌아온 GitLab vs GitHub, GitLab과 GitHub을 비교해보자(decision Kit)돌아온 GitLab vs GitHub, GitLab과 GitHub을 비교해보자(decision Kit)

오랜만에 돌아온 GitLab과 GitHub 비교하기 시리즈입니다. 이번에 소개할 내용은 GitLab과 GitHub을 선택하는 기준이 될 Decision Kit입니다.

Mus Jung
Mus Jung | DevOps Engineer
GitLab.com에서의 암호화폐 채굴 어뷰징을 막는 방법GitLab.com에서의 암호화폐 채굴 어뷰징을 막는 방법

올해 굉장히 바쁜 시간을 보내다 보니, 정말 오랜만에 블로그 포스팅을 하게 되었습니다. 이번 블로그 주제는 SaaS 버전 GitLab.com에서 2021년 5월 중순부터 시행된 CI 파이프라인 정책입니다. 이 정책은 가상화폐와 관련된 내용입니다. 어떠한 일이 있었고, GitLab은 이를 어떻게 해결했으며, GitLab 사용자에게 어떤 변화가 있는지 알아봅시다.

Mus Jung
Mus Jung | DevOps Engineer
COVID-19(코로나) 시대에서 원격 근무로 살아남기COVID-19(코로나) 시대에서 원격 근무로 살아남기

COVID-19(코로나)라는 국제적인 이슈가 발생한 지 오랜 시간이 지났습니다. 그로 인해 우리 주위에 근무환경도 많이 변했는데요, 특히 원격 근무에 대한 선호도가 눈에 띄게 증가했습니다. 이전에 원격 근무를 반대했던 기업들도 원격 근무를 도입하는 것에 대한 고민을 시작했습니다. 그렇다면 원격 근무를 잘하는 방법은 무엇이 있고, 어떠한 요건들이 충족되어야 하는지 알아봅시다.

Mus Jung
Mus Jung | DevOps Engineer
GitLab CI/CD vs GitHub Action 비교하기GitLab CI/CD vs GitHub Action 비교하기

지난 블로그(GitLab과 GitHub, 실무에서 어떤 차이가 있을까요?)에서 GitLab과 GitHub에 대해서 비교해 봤습니다. 결론적으로는 GitHub의 Git에 대한 노하우는 무시할 수 없지만, 서비스 혹은 전체 라이프사이클에 대한 여러 가지 비용적인 요소에서 GitLab이 우수하다는 것을 확인할 수 있었습니다. 이번 블로그에서는 DevOps 측면에서 GitLab CI/CD와 GitHub Action을 좀 더 면밀하게 살펴보겠습니다.

Mus Jung
Mus Jung | DevOps Engineer
CJ 올리브네트웍스 GitLab CI/CD Training 진행CJ 올리브네트웍스 GitLab CI/CD Training 진행

저희 인포그랩은 3~4월에 여러 교육을 진행하면서 바쁜 두 달을 지냈는데요, 그중에서 지난 3월 11일에 CJ 올리브네트웍스에서 진행했던 GitLab CI/CD 교육에 대해서 소개하겠습니다.

Mus Jung
Mus Jung | DevOps Engineer
GitLab CI/CD 파이프라인 기능 소개GitLab CI/CD 파이프라인 기능 소개

최근에 저희 Infograb에 GitLab에 대한 기술지원과 교육에 대한 문의 요청이 많아지고 있습니다. 그중에서도 CI/CD에 대한 고객들의 관심이 점점 증가하는 것을 느끼고 있습니다. 그래서 이번에는 GitLab CI/CD이 기본으로 제공하는 기능들을 소개를 해드리도록 하겠습니다.

Mus Jung
Mus Jung | DevOps Engineer
GitLab을 이용해 Notion 컨텐츠 정기적으로 백업하기GitLab을 이용해 Notion 컨텐츠 정기적으로 백업하기

최근 Notion 측의 DNS 문제로 전세계 Notion 서버가 한동안 다운되는 심각한 문제가 발생했습니다. 많은 사용자들이 Notion에 자료를 모아두기 때문에 이러한 장애로 불안함을 느끼고, 백업을 하고자 합니다. 이번 시간에는 GitLab과 Notion의 api를 활용해 Notion Workspace를 매일 자동으로 백업하는 방법을 살펴보겠습니다.

Jake Shin
Jake Shin | Full-Stack Engineer
GitLab으로 코드리뷰 더 잘하는 방법GitLab으로 코드리뷰 더 잘하는 방법

팀 협업 중에 코드 품질 때문에 이슈가 발생하는 경우가 있나요? 소프트웨어 개발 문화가 성숙할수록 코드리뷰 활동도 성숙해집니다. 다른 사람이 작성한 코드를 보고 개선을 위한 의견을 주고 받는 활동을 합니다. 코드 리뷰는 코드로 협업하는 개발팀이 리뷰를 통해 잠재적인 이슈를 해결하고 개선해 나가는 과정입니다. 소프트웨어 개발 라이프사이클에서 소프트웨어 품질 보증 활동의 시작은 코드 리뷰 활동입니다.

그렇다면, GitLab으로 코드 리뷰를 더 잘하는 방법은 어떨까요?

항상 처음 보다 더 나은 상태로 코드를 만들어 놓고 떠나라

  • Robert C. Martin (Uncle Bob) , 보스카웃룰 패러디
Dexter
Dexter | DevOps Consultant
GitLab과 JFrog, 어떤것을 선택해야 할까요?GitLab과 JFrog, 어떤것을 선택해야 할까요?

Full 라이프사이클 단일 애플리케이션 GitLab과 2019년 2월 Shippable 인수를 통해 아티팩트 저장소에서 CI/CD 기능을 포함하는 DevOps 플랫폼으로 전환한 JFrog, 어떤 것이 더 좋은지 알아봅시다.

Mus Jung
Mus Jung | DevOps Engineer