"정확히 재현 가능한 빌드"란 정확히 무엇입니까?


9

정확히 무엇입니까? Continuous Delivery 영역에서 왜 중요한가?

맥락 : 나는 정말 재현 가능한 빌드는 여전히 연구 중 기술이며 만들기가 매우 어렵다는 (reddit)의 의견 중 하나에서 보았습니다.

그래서 왜 그렇게 만들기가 어려운지 알고 싶었습니다.


어쩌면 그것들이 참조되는 문맥에 대한 포인터?
Dan Cornilescu

@DanCornilescu 물론입니다. 세부 정보를 추가했습니다 :)
Dawny33

@ Pierre.Vriens 풀 오프로 말하면 make possible:) qn도 편집합니다!
Dawny33

1
편집을위한 Merci, 그러나 그것을보고, 나는 당신이 단지 "만들기"를 의미한다고 생각합니다.
Pierre.Vriens

1
나는 90 년대 초반의 내 경험에서 또 다른 예를 들어 내 대답을 향상 시키거나 다른 대답을 추가하는 것을 망설이고 있습니다. , 5 인치 플로피 (읽기 오류의 경우 사본 2 개) ... (거대한) 회사에서 소프트웨어를 제공하기 위해 (그리고 메인 프레임에서) 환경에서 실행 파일을 다시 빌드해야하는 곳 .. DevOps-avant-la-lettre ...
Pierre.Vriens

답변:


8

정확히 무엇입니까?

다음은 reproducible-builds.org 의 인용문입니다 .

재현 가능한 빌드는 사람이 읽을 수있는 소스 코드에서 컴퓨터가 사용하는 이진 코드에 이르기까지 검증 가능한 경로를 만드는 소프트웨어 개발 사례입니다.

왜 중요한가요?

IMO의 중요성을 설명하는 가장 쉬운 방법은 IMO를 백업 절차의 변형으로 간주하는 것입니다.

예로서:

  • 일부 소프트웨어 공급 업체로부터 라이센스가 부여 된 일부 소프트웨어 패키지를 사용하는 사업체를 가정합니다. 비즈니스는 실행 파일을 얻는 데 사용되는 소스 등이 아닌 실행 파일 만 가져옵니다.

  • 모든 것이 잘 진행되지만 소프트웨어 공급 업체에 문제가있는 경우가 있습니다 (예 : 파산 등).

  • 이로 인해 장기적으로 비즈니스에 위험이 노출 될 수 있습니다. 즉, 비즈니스가 실행 파일을 사용할 때 사용 된 소프트웨어 공급 업체 (이전의 시대)와 관련된 모든 필수 소스, 문서, 빌드 절차 등에 액세스 할 수있는 절차 / 계약이없는 경우 비즈니스)가 생성되어 비즈니스로 배송되었습니다.

  • " 소프트웨어 에스크로 "가 구출되었습니다. 그러한 합의가 이루어지면 제 3자를 통해 기업이 여전히 " 사용 된 모든 것 "을 재현 할 수 있다고 생각할 것입니다. 그 이후부터는 비즈니스에서 해당 소프트웨어를 계속 사용할 수있는 기회가있을 수 있으며 적절한 경우 자체적으로 비즈니스를 운영하기 시작합니다.

  • 그러나 이전 글 머리 기호에서 " 사용 된 내용 "은이 작업을 수행하는 데 가장 어려운 부분입니다. 타사가 적절한 사전 검증을 수행해야합니다. 링크 날짜를 제외하고 소프트웨어 공급 업체가 소프트웨어 에이전트에 제공하는 내용과 완벽하게 일치한다는 것을 증명할 수있는 실행 파일을 다시 만들려면 시간이 걸립니다.

그리고 왜 그렇게 만들기가 어려운가요?

위의 샘플이 여전히 명확하지 않은 경우, 귀하가 내 소프트웨어 에스크로 에이전트라고 상상해보십시오. 고객이 라이센스 한 소프트웨어의 사본을 재생성하기 위해 입력으로 필요한 것을 알려주십시오. 알 겠어요? 내 컴파일러, 내 OS, 컴파일 / 링크 옵션, 재사용 가능한 구성 요소 (포함) 버전, 라이브러리 등의 버전을 확인하는 것을 잊지 않았습니까?


4

실제로 반복 가능한 빌드를 작성하려는 실제 사례를 제공하려면 다음을 고려하십시오.

사용자가 히스토리를 다시 쓰거나 병합되지 않은 분기를 삭제할 수없는 git 저장소로 시작하는 빌드 파이프 라인입니다.

소스 코드를 체크 아웃 한 후 첫 번째 "빌드"단계는 모든 빌드 시간 의존성을 포함하는 컨테이너를 가동시키는 것입니다.

실행중인 빌드 시간 컨테이너의 출력은 컴파일 된 바이너리를 포함하는 컨테이너입니다.

빌드의 반복성에 더 중요한 다음 컨테이너가 최종 컨테이너에 추가됩니다.

  • 원본 리포지토리에있는 소스 코드의 정확한 해시와 아티팩트 리포지토리에 업로드 된 코드의 git repo 및 tar ball 스냅 샷의 URL입니다.
  • 빌드를 실행하는 데 사용 된 빌드 컨테이너의 정확한 버전입니다.
  • 바이너리가로드 된 원본 기본 이미지의 정확한 버전입니다.
  • 이진 파일을 만드는 데 사용 된 모든 빌드 타임 변수의 값입니다.
  • 세 개의 컨테이너가 모두 포함 된 도커 버전과 빌드시 실행되는 버전입니다.

이 메타 데이터를 모두 추가함으로써 미래에 언제든지 빌드 컨테이너를 통해 정확한 빌드 종속성 세트를 꺼내고 빌드 컨테이너에서 정확하게 알려진 단계 세트로 바이너리를 컴파일 할 수 있습니다. ) 및 모든 런타임 의존성 (기본 이미지 태그 사용)이있는 다른 알려진 기본 이미지로 패키지하십시오. 이는 모두 컨테이너의 태그를 기반으로 한 정확한 소스 코드 버전을 기반으로 할 수 있습니다.

이론적으로 이것은 빌드 버전을 정확하게 재현 할 수있는 능력을 제공해야합니다.

이것의 중요성은 우리가 프로덕션 환경에서 실행중인 것을 볼 수있게하고 모든 것이 버전이 크게 발전하더라도 다시 돌아가서 원래 사용 된 코드 버전, 기본 이미지 및 빌드 컨테이너를 가져 와서 예를 들어 이전과 정확히 다시 빌드하기 전에 해당 버전에 핫픽스를 적용하여 핫픽스가 유일한 델타와 정확히 동일한 아티팩트임을 알 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.