Concourse CI에서 iOS 앱 CI 수행

이전에 SI 현장의 iOS 애플리케이션 개발 - Qiita 에서 쓴 것처럼 CI에는 Jenkins를 사용하고 있습니다만, 특정 멤버가 Jenkins 장인이 되기 쉽고 트러미가 있습니다.
모처럼 fastlane 등으로 빌드 스크립트를 코드화 할 수 있기 때문에 빌드 파이프 라인도 코드화하고 싶다 ...!

Concourse CI 시도해 보았습니다.

Concourse CI 설치



docker-compose에서 했습니다.
아래의 공식 문서대로 가면 빨리 시작합니다.
  • Installing - Docker Repository

  • docker로 Concourse CI를 구축하여 iOS를 빌드 할 수 있습니까? 라고 걱정될지도 모릅니다만, Darwin용의 worker를 이용하는 것으로 iOS의 빌드를 실시하는 것이 가능합니다.

    작업자 설정



    아래에서 최신 concourse_darwin_amd64를 다운로드하여 경로가있는 디렉토리에 넣으십시오.
    htps : // 기주 b. 코 m / 안녕 rse / 안녕 rs / ree s s

    worker에 대한 키를 생성하고 authorized_worker_keys에 추가합니다.
    $ ssh-keygen -t rsa -f ./keys/worker/darwin_worker_key -N ''
    $ cat ./keys/worker/darwin_worker_key.pub >> ./keys/web/authorized_worker_keys
    

    Mac 호스트에서 concourse worker를 시작합니다.
    $ sudo concourse worker --work-dir /opt/concourse/worker --tsa-host 127.0.0.1 --tsa-public-key ./keys/worker/tsa_host_key.pub --tsa-worker-private-key ./keys/worker/darwin_worker_key
    

    일단 이것으로 worker가 움직였습니다.
    {"timestamp":"1487892702.682704926","source":"worker","message":"worker.garden.started","log_level":1,"data":{"session":"1"}}
    {"timestamp":"1487892702.682797194","source":"baggageclaim","message":"baggageclaim.listening","log_level":1,"data":{"addr":"127.0.0.1:7788"}}
    {"timestamp":"1487892702.683754444","source":"worker","message":"worker.beacon.restarting","log_level":2,"data":{"error":"failed to dial: failed to connect to TSA: dial tcp 127.0.0.1:2222: getsockopt: connection refused","session":"3"}}
    

    2222번 포트에서 연결을 시도하는 중 오류가 발생했으므로 docker-compose.yml에 설정을 추가합니다.

    docker-compose.yml
    concourse-web:
      image: concourse/concourse
      links: [concourse-db]
      command: web
      ports: ["8080:8080", "2222:2222"]
      volumes: ["./keys/web:/concourse-keys"]
      environment:
        CONCOURSE_BASIC_AUTH_USERNAME: concourse
        CONCOURSE_BASIC_AUTH_PASSWORD: changeme
        CONCOURSE_EXTERNAL_URL: "${CONCOURSE_EXTERNAL_URL}"
        CONCOURSE_POSTGRES_DATA_SOURCE: |-
          postgres://concourse:changeme@concourse-db:5432/concourse?sslmode=disable
    

    아무래도 연결된 것 같습니다.
    {"timestamp":"1487892892.915976048","source":"tsa","message":"tsa.connection.channel.forward-worker.register.start","log_level":1,"data":{"remote":"172.17.0.1:50078","session":"1.1.1.5","worker-address":"127.0.0.1:42459","worker-platform":"darwin","worker-tags":""}}
    {"timestamp":"1487892892.928279877","source":"tsa","message":"tsa.connection.channel.forward-worker.register.reached-worker","log_level":0,"data":{"remote":"172.17.0.1:50078","session":"1.1.1.5","took":"10.962879ms"}}
    

    빌드 파이프라인 만들기



    일어나는 웹에 액세스하고,

    빌드 파이프라인 구성을 위한 CLI 도구fly를 다운로드합니다.



    다운로드한 바이너리를 경로가 있는 디렉토리에 둡니다.

    우선 다음의 3개를 실행할 수 있도록 해 봅니다.
  • GitHub에서 clone
  • CocoaPods에서 종속성 해결 (fastlane에서)
  • fastlane에서 테스트 실행

  • 최종 yaml은 다음과 같습니다.
    빌드의 실행 유저는 root가 됩니다만, pod install (을)가 root로 실행할 수 없기 때문에 퍼미션이거나 유저의 스위치이거나 고맙습니다.
  • htps : // 굳이 s. 여기 아포 ds. 오 rg / 우신 g / t 납 b ぇ 쇼오 친 g. html #이 m 게 짱 g ぺr 미시 온 에 rs ぃ

  • concourse.yml
    resources:
      - name: ios-concourse
        type: git
        source:
          uri: https://github.com/tenten0213/ios-concourse.git
          branch: master
    jobs:
      - name: build
        plan:
          - get: ios-concourse
            trigger: true
          - task: specs
            config:
              platform: darwin
              inputs:
                - name: ios-concourse
              run:
                path: sh
                args:
                  - -c
                  - |
                    env
                    mkdir ios-concourse/ExampleForConcourse/Pods
                    chown -R $SUDO_USER ios-concourse/
                    chown -R $SUDO_USER ~/Library/Caches/CocoaPods
                    chown -R $SUDO_USER ~/.cocoapods
                    cd ios-concourse/ExampleForConcourse
                    sudo -u $SUDO_USER bundle exec fastlane test
    

    파이프라인을 등록하고 실행 가능한 상태로 만들고 빌드를 실행하면…
    $ fly -t ci login -c http://127.0.0.1:8080/
    $ fly -t ci set-pipeline -p ios-concourse -c concourse.yml
    $ fly -t ci unpause-pipeline -p ios-concourse
    

    ↓ 느낌으로 fastlane이 실행되어 빌드가 성공했습니다!ヽ(=´▽`=)노
    이미지 보면 아시다시피, 제대로 빌드 통하는 데 상당히 고생했습니다 ...



    시도한 모로 모로는 아래에 있습니다.
  • htps : // 기주 b. 코 m / 텐텐 0213 / 이오 s 콘코 rse

  • 참고


  • 파이프라인 기반 CI/CD 도구 Concourse CI 시작 - BLOG.IK.AM
  • 처음 Concourse CI - BLOG.IK.AM
  • Using Concourse CI for building iOS and OSX apps – David Karlsson
  • On-Device Open Source CI and CD for Mobile Reinvented: Meet Concourse
  • 좋은 웹페이지 즐겨찾기