Intro
μ΄μ μ κ΅μ₯ν ν₯λ―Έλ‘μ΄ μμμ λ³Έ μ μ΄ μμ΅λλ€. νλμ μλΉμ€λ₯Ό μ΄λ»κ² κΈ°ννκ³ μ¬μ©μμκ² μ 곡λλμ§μ κ΄λ ¨λ μμμ΄μμ΅λλ€. μ¬μ©μλ§λ€ λ²νΌ λ°°μΉλ₯Ό λ€λ₯΄κ² 보μ΄κ² ν΄μ μ΄λ€ μμΉμ λ²νΌμ΄ λ λ§μ μ¬μ©μμκ² λλ Έλμ§ λ‘κ·Έλ₯Ό μμ§νκ³ , μ΄μ λ°λΌ μμ¬ κ²°μ μ νλ€λ λ΄μ©μ΄μμ΅λλ€. μ΄λ μ΄ λ²νΌμ μμΉλ₯Ό λ°κΎΈλ νλ‘μΈμ€λ₯Ό μ ꡬμΆν΄ λμμ μ‘°κΈμ μμ μΌλ‘ λΉ λ₯΄κ² Aμ B μμ ν μ€νΈ ν΄ λ³Ό μ μμλ€κ³ ν©λλ€.
μ΄λ κ² μμ μΌλΆλΆμ μμ νλ κ²λΏλ§ μλλΌ μλΉμ€λ₯Ό μ΄μνλ€ λ³΄λ©΄ λ²κ·Έλ₯Ό λ°κ²¬νκ² λκ³ μ½λλ₯Ό μμ νκ±°λ μλ‘μ΄ κΈ°λ₯μ μΆκ°νμ¬ μ¬μ©μμκ² λ°°ν¬νμ¬ μλΉμ€νλ μΌμ΄ μ¦μ΅λλ€.
μ½λλ₯Ό μμ±νκ±°λ μμ νκ² λλ©΄ μ΄ μ½λμ λν κ²μ¦μ μν΄ λ΄λΆμ μΌλ‘ μ½λ 리뷰λ₯Ό νκ³ QAκ° μ΄λ£¨μ΄μ§ λ€ μ΄ ν μ€νΈ κΉμ§ ν΅κ³Όνκ² λλ©΄ μ΅μ’ μ μΌλ‘ μ¬μ©μκ° μ¬μ©ν΄ λ³Ό μ μλλ‘ λ°°ν¬λ©λλ€.
κ°λ°μκ° μμ±ν μ½λκ° λ°λ‘ λ¨Έμ§(merge)λκ³ μλμΌλ‘ ν μ€νΈ λμ΄ κ·Έ κ²°κ³Όλ₯Ό λ°λ‘ μ μ μλ€λ©΄, κ·Έλ¦¬κ³ λ°°ν¬κΉμ§ μλμΌλ‘ μ΄λ€μ§λ€λ©΄ κ°λ°μλΏλ§ μλλΌ μ΄ νλ‘μΈμ€μ μ°Έμ¬ν λͺ¨λ μΈλ ₯μ λΉμ©μ΄ μ€μ΄λ€κ³ μλΉμ€κ° νμλ‘ νλ λ³Έμ§μ λ μ§μ€ν μ μμ΅λλ€.
μ΅κ·Ό μμ μμ λ§μΌλ‘λ μ¬λ¬ μ±μ λμμ λ°°ν¬ν΄μΌ νλ μν©μμ CI/CDμ λν΄ μ΄ν΄νκ³ μ΄λ ν λ°©λ²μΌλ‘ ꡬνν μ μλμ§ μμ보기 μν΄ κ³΅λΆν λ΄μ©μ 곡μ ν©λλ€.
CI/CDλ?
μ ν리μΌμ΄μ μ κ°λ° ~ λ°°ν¬ κΉμ§ μλννμ¬ ν¨μ¨μ μ΄κ³ λΉ λ₯΄κ² μ¬μ©μμκ² λΉλ²ν λ°°ν¬ν μ μλλ‘ νλ κ²μ΄ CI/CDμ νλ‘μΈμ€μ λλ€.
CIλ Continuous Integration μ§μμ ν΅ν©μ μ½μλ‘
Code -> Build -> Testμ μλν κ³Όμ μ΄κ³
CDλ Continuous Delivery μ§μμ μΈ μ 곡 or Continuous Deployment μ§μμ μΈ λ°°ν¬λ₯Ό μλ―Έν©λλ€.
λ¦΄λ¦¬μ¦ λμ΄ λ°°ν¬λλ κ³Όμ μ μλνλ₯Ό μλ―Έν©λλ€.
CI μ§μμ ν΅ν©
μ ν리μΌμ΄μ μ΄ μκ³ λμμ κ°λ°μλ€μ΄ μ½λλ₯Ό μμ±ν©λλ€. κ°λ°μλ€μ μλ‘κ² μ½λλ₯Ό μμ±νκ³ λ²κ·Έ μμ μ ν©λλ€. μ΄λ λΉλ λ° ν μ€νΈκ° μλμΌλ‘ μ§νλλ©° μ¬κΈ°μμ λ°μν λ²κ·Έλ₯Ό κ°λ°μκ° νμΈν μ μμ΅λλ€. λͺ¨λ νλ‘μΈμ€κ° λλ μμ μ΄ μλ κ°λ° μ§ν μ€μΈ μμ μ λΉλμ ν μ€νΈκ° μ΄λ£¨μ΄ μ§λ―λ‘ μμνμ§ λͺ»ν λ²κ·Έλ₯Ό λ°κ²¬νμ¬ μ½λ νμ§μ λμΌ μ μμ΅λλ€.
μ΄λ CIμμ μ΄λ£¨μ΄μ ΈμΌ νλ κ²μ΄ μμ΅λλ€.
λ¨Έμ§ μΆ©λμ μ΅μννκΈ° μν΄μ λ³κ²½μ¬νμ μ£ΌκΈ°μ μΌλ‘ λΉλ²νκ² λ°λ‘ λ°μν΄μΌ ν©λλ€. μ¬λ¬ κ°λ°μκ° κ°μ μ½λλ₯Ό μμ νκ³ μλ μν©μμ λ¨Έμ§κ° λλ¦¬κ² μ΄λ£¨μ΄μ§λ€λ©΄ λ¨Έμ§ μΆ©λμ΄ μ΄λ£¨μ΄μ§κ³ λ¬Έμ κ° λ°μν μ μμ΅λλ€
CIλ μμ λ¨μλ‘ λλμ΄ κ°λ°νκ³ μμλ‘ κ³΅μ λ ν¬μ§ν 리μ λ°°ν¬ν©λλ€. μ΄λ κ² νλ μ΄μ λ λ¨μν λ¨Έμ§ μΆ©λλΏλ§ μλλΌ λ¨μκ° μμμ§μλ‘ μ΄λμμ λ¬Έμ κ° λ°μνλμ§ νμ μ΄ μ½λ€λ μ₯μ λ μμ΅λλ€.
μ΄ κ³Όμ μ΄ CIμμ μλνλ‘ μ§νλ©λλ€. μ£ΌκΈ°μ μΌλ‘ 곡μ λ ν¬μ§ν 리μ λ¨Έμ§λ μ½λκ° μ±κ³΅μ μΌλ‘ λΉλλλμ§, κ²°ν¨μ΄ μμ§λ μμμ§ ν μ€νΈλμ΄μΌ νκ³ μ΄ κ²°κ³Όλ₯Ό κ°λ°μμκ² μ 곡ν©λλ€. (ν μ€νΈλ₯Ό μν΄ μ λ ν μ€νΈλ₯Ό μμ±ν©λλ€)
λΉλμμ λλλ κ²μ΄ μλλΌ ν μ€νΈλ₯Ό μλμΌλ‘ μ§ννκΈ° λλ¬Έμ μ½λ κ²°ν¨κ³Ό λ²κ·Έλ₯Ό λΉ λ₯΄κ² λ°κ²¬ν μ μκ³ κ°λ° μ§ν μ€μ λ²κ·Έλ₯Ό μμ ν μ μμ΅λλ€. CIλ₯Ό μ¬μ©νμ§ μλ κ²λ³΄λ€ μ½λ ν리ν°λ₯Ό ν₯μνκ³ μμ μ±μ λμΌ μ μμ΅λλ€.
CD μ§μμ μΈ μ 곡/λ°°ν¬
CIμμ κ°λ°, λΉλ, ν μ€νΈλ μ½λμ λ°°ν¬λ₯Ό μλννλ λ¨κ³μ λλ€. CIμμ ν μ€νΈκΉμ§ μλ£κ° λμλ€λ©΄ μ¬μ©μμκ² μλΉμ€λ₯Ό μ 곡ν μ μλ λ¨κ³μ λλ€. λ°°ν¬λ₯Ό μλμΌλ‘ μ§ννκ² λλ©΄ ν μ€νΈ ν κ²μ¦λ μ½λκ° μ¦μ μ¬μ©μμκ² λ°°ν¬λμ΄ μλΉμ€λ μ μκΈ° λλ¬Έμ νΌλλ°±μ μ¦κ°μ μΌλ‘ λ°μν μ μμ΅λλ€.
μ΄λ ν μ€νΈ ν λ°°ν¬κΉμ§ μλννλ κ²μ΄ μ§μμ μΈ λ°°ν¬λΌ νλ©°, μ’ λ κ²μ¦μ λ¨κ³λ₯Ό μλμΌλ‘ κ±°μΉλ κ²μ μ§μμ μΈ μ 곡μ΄λΌκ³ ν©λλ€.
μ₯μ
곡μ λ ν¬μ§ν 리μ λ¨Έμ§λ μ½λκ° μλμΌλ‘ ν μ€νΈλμ΄ κ°λ°μλ€μ λΉ λ₯΄κ² κ²°ν¨μ λ°μκ³Ό λ¬Έμ λ₯Ό λΉ λ₯΄κ² νμ ν μ μμ΅λλ€. μλνλ‘ μΈν΄ κ°λ°μλΏλ§ μλλΌ μ΄ν΄ κ΄κ³μμ νμμ΄ μ΄λμμ μ΄λ€ μΌμ΄ μ΄λ€μ§κ³ μλμ§ μΆμ ν μ μμΌλ©° κ²°ν¨μ λΉ λ₯΄κ² μ°ΎμλΌ μ μμ΅λλ€.
ν μ€νΈλ₯Ό ν΅κ³Όν μ½λλ§μ΄ λ ν¬μ§ν 리μ λ¨Έμ§λκ³ κ²μ¦ μκ°μ΄ μ€μ΄λλλ€.
κΈ°νμμ κ°λ°μ κ·Έλ¦¬κ³ ν μ€ν°μμ μ΄μνμΌλ‘ μ λ¬λλ©΄μ λ°μν μ μλ μ 보 μμ€μ λ¬Έμ λ₯Ό μλννκΈ° λλ¬Έμ μ¬λμ κ°μ μ μ€μ΄λ€κ³ λΉμ©μ μ κ°νλ©° μμ μ±μ λμΌ μ μμ΅λλ€. μ΄λ μ½λλ₯Ό λ 빨리 릴리μ¦νκ³ μλ‘μ΄ κΈ°λ₯μ μμ±νμ¬ κ°λ° λ° ν μ€νΈν μ μκ² ν©λλ€.
Tool
Github Actions
Jenkins
GitLab CI/CD
λ 곡λΆν κ²
xCode cloud, fastlane, Gihub Actions
unittest μμ±
μ°Έκ³ μ¬μ΄νΈ
https://jud00.tistory.com/entry/CICD%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C
'π iOS' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Swift] MVVMC μμΈν μμ보기 - νν λ¦¬μΌ 4 (child coordinator μμ νκΈ°) (1) | 2022.09.05 |
---|---|
[iOS] FastlaneμΌλ‘ μ± λ°°ν¬ μλννκΈ° - μ΄λ‘ κ³Ό μ€μΉ (0) | 2022.09.05 |
unable to boot the simulator launchd failed to respond ν΄κ²°λ² (0) | 2022.08.22 |
[iOS/Swift] UIImagePickerController μ¬μ©νκΈ° (0) | 2022.08.21 |
[Swift/iOS] UICollectionView layout μ λ°μ΄νΈ (0) | 2022.08.20 |
λκΈ