내가 현재 일하는 회사는 아직 지속적인 전달을 구현하지 않습니다. 우리는 여전히 파일 단위로 서버에 프로젝트를 수동으로 배포합니다. 각 배포마다 하나의 프로젝트 아티팩트를 수동으로 배포하거나 파일 별 배포를 계속 수행하는 것이 가장 좋은 방법은 무엇입니까?
내가 현재 일하는 회사는 아직 지속적인 전달을 구현하지 않습니다. 우리는 여전히 파일 단위로 서버에 프로젝트를 수동으로 배포합니다. 각 배포마다 하나의 프로젝트 아티팩트를 수동으로 배포하거나 파일 별 배포를 계속 수행하는 것이 가장 좋은 방법은 무엇입니까?
답변:
가장 좋은 방법은 무엇입니까? 각 배치마다 하나의 프로젝트 아티팩트를 수동으로 배치하거나 파일 배치별로 파일을 계속 수행합니까?
둘 다.
모범 사례는 배포를 완전하고 독점적 으로 자동화하는 것입니다. 즉, 아무도 서버에 수동으로 아무것도 넣지 않습니다.
"요약의 요약을 요약하려면 : 사람들은 문제입니다." (더글러스 애덤스)
사람들은 실수를합니다. 복사 를 잊어 버린 파일 중 하나 가 광범위하게 변경된 공유 "라이브러리"인 경우 전체 프로덕션 사이트가 중단 될 수 있습니다.
수동 단계는 많은 노력을 기울이고 위험합니다. 필요한 파일을 잊어 버릴 수 있습니다. 팀의 모든 사람이 어떤 파일을 복사해야하는지 알지 못할 수도 있습니다. 이러한 모든 문제로 인해 배포가 크고, 까다 롭고, 드물게 – 불필요하게 이루어집니다. 자동화는 이러한 문제를 해결합니다.
배포가 간단 해지기 때문에 가장 간단한 자동화 단계조차도 큰 이점을 얻을 수 있습니다. (S) FTP 또는 Rsync 또는 다른 기술을 통해 파일 또는 아티팩트를 복사하는 스크립트는 훌륭한 첫 단계입니다. 나중에 해당 스크립트를 확장하여 서비스 다시 시작과 같이 서버에서 배포 전 및 배포 후 단계를 자동으로 수행 할 수 있습니다.
모범 사례는 일종의 자동화 된 프로세스를 구현하는 것입니다.
고려해야 할 '파일 별'접근 방식에 특별한 이유가 없는지주의하십시오.
Continuous Delivery (또는 실제로 배포)를 사용하고 각 파일을 직접 이동하면 두 가지 극단을보고 있습니다. 완전 자동화 된 파이프 라인 (아직)을 만들거나 할 수 없다는 것을 완벽하게 이해할 수 있습니다. 그러나 프로세스의 일부 자동화를 고려해야합니다.
각 파일을 직접 이동하는 것은 매우 위험하므로 예를 들어 코드 리포지토리 태그 지정, 컴퓨터에서 해당 태그 확인, 아티팩트 빌드 및 서버에 업로드 등의 방법으로 해당 위험을 완화 할 수 있습니다. 이러한 각 단계를 자동화하여 마우스 클릭 몇 번으로 실행할 수 있으므로 파일을 잊어 버리거나 실수로 추가 파일을 생성 할 위험이 크게 줄어 듭니다.
한 번에 한 단계 씩 가능한 것을 자동화하십시오. 완전 자동화 된 CD 파이프 라인을 감당할 수 없다고해서 일부 부품을 자동화하지 않아도됩니다.
모범 사례는 특정 회사의 특정 배포에 대한 비용 / 이익 분석을 수행하는 것입니다.
일반적인 대답은 "수동으로 작업하지 말고 자동화하십시오"입니다. 이것은 일반적으로 일반적인 종류의 회사에 대한 정답입니다. 귀하가 받고있는 답변의 통일성은 커뮤니티가이를 모범 사례로 얼마나 강력하게 찾는지를 나타내는 것이어야합니다. 회사에서 자동화가 올바른 도구가 아니라고 생각하는 경우 자동화를 독창적으로 만드는 요소를 이해해야합니다. 이러한 독창성은 의사 결정 과정에 반영되어야합니다. 샘플 세트가 1 인 경우 "모범 사례"가 없습니다.
"파일 수"및 "업데이트 빈도"및 "문제의 결과는 무엇입니까"및 "나쁜 변경을 얼마나 빨리 롤백 할 수 있습니까"와 같은 질문은 대답해야 할 중요한 질문입니다. 자동화하는 경우 이러한 많은 질문이 중요하지 않지만 수동 업데이트 프로세스에 대한 비용과 이점을 올바르게 할당하는 데 필수적입니다.
수동 파일 별 복사와 연속 전송 사이에는 많은 회색 음영이 있습니다.
예를 들어 zip 파일, rpm 스타일 패키징, 코드 관리 도구 (예 : 꼭두각시 또는 요리사) 등의 인프라 또는 간단한 스크립트를 사용하여 배포 프로세스의 복잡성을 줄이십시오. ftp 서버의 스테이징 영역.
더 많은 수동 단계가있는 배포 프로세스는 오류가있을 가능성이 높으며 다른 사람들이 말했듯이 인적 요소를 제거합니다.
완전한 연속 제공 (비용이 많이 들고 시간이 지남에 따라 노력 / 투자 / 혁신)을 구현할 필요가 없습니다. 간단하게 시작하고, 효과를 발휘하고, 이점을 입증하고, 거기서 시작하십시오.
사용중인 소프트웨어 기술 (또는 스택), 해석 된 언어, 컴파일 된 언어, 데스크톱 앱, 모바일 등 소프트에 따라 다릅니다. dev. 부서 정책, 자동화 할 도구가있는 경우 앱의 중요성과 고려해야 할 중요한 사항 중 하나는 소프트웨어 아키텍처 (앱 디자인 방식)입니다. 그렇기 때문에 여기에 다른 답변이 있습니다. 경험상, 최선의 방법은 실수를 피하기 위해 배포 작업에서 가능한 사람의 개입을 줄이는 것입니다. 배포 전에 QA 서버 (예산이 문제인 경우 가상 서버 사용)의 모든 사항을 테스트하고 재해 발생시 이전 버전으로 복원하기위한 역 절차를 수행하는 것이 좋습니다 ( 항상 백업이 있음).