태그 보관물: continuous-integration

continuous-integration

스크럼 및 지속적인 통합으로 소프트웨어 개발을위한 좋은 워크 플로우 회사에서 지속적인

스크럼 방법을 사용하여 소프트웨어 개발 회사에서 지속적인 통합 워크 플로가 어떻게 더 잘 맞는지 이해하는 방법을 연구하고 있습니다.

나는 이런 식으로 생각하고있다 :

여기에 이미지 설명을 입력하십시오

좋은 워크 플로우일까요?



답변

당신은 거기에 어떤 길을 가지고 있지만 다이어그램을 다소 확장 할 것입니다.

CI 워크 플로의 확장 버전.  짧은 대체 태그로 설명하기는 상당히 어렵습니다.

기본적으로 (버전 관리에서 허용하는 경우 (예 : hg / git에있는 경우)) 개발자 / 개발자 쌍마다 작업중인 단일 사용자 스토리가 포함 된 자체 “개인”분기를 갖기를 원합니다. 기능을 완료하면 중앙 지점 인 “릴리스”지점으로 푸시해야합니다. 이 시점에서 개발자는 다음 작업을 위해 새로운 분기를 갖기를 원합니다. 원래 기능 분기는있는 그대로 유지해야하므로 변경해야 할 사항은 별도로 적용 할 수 있습니다 (항상 적용 할 수있는 것은 아니지만 시작점이 좋습니다). 개발자가 이전 기능 분기에서 작동하기 전에 이상한 병합 문제를 피하려면 최신 릴리스 분기를 가져와야합니다.

이제 “릴리즈”브랜치 형태의 릴리스 후보가 생겼으며 CI 프로세스를 실행할 준비가되었습니다 (그 브랜치에서 각 개발자 브랜치에서이를 수행 할 수 있음). 대규모 개발 팀에서는 CI 서버를 혼란스럽게 만듭니다. 이는 지속적인 프로세스 일 수 있습니다 (이 경우 이상적인 경우, “릴리스”분기가 변경 될 때마다 CI가 실행되어야 함) 또는 야간 일 수 있습니다.

이 시점에서 빌드를 실행하고 CI 서버에서 실행 가능한 빌드 아티팩트를 얻을 수 있습니다 (즉, 배포 할 수있는 것). 동적 언어를 사용하는 경우이 단계를 건너 뛸 수 있습니다! 빌드 한 후에는 시스템의 모든 자동화 된 테스트의 기초가되는 단위 테스트를 실행하려고합니다. CI의 전체 요점은 개발과 테스트 사이의 피드백 루프를 단축하기 때문에 빠르며 배포가 필요하지 않을 것입니다. 통과하면 응용 프로그램을 테스트 서버에 자동으로 배포하고 (가능한 경우) 사용 가능한 통합 테스트를 실행하려고합니다. 통합 테스트는 자동화 된 UI 테스트, BDD 테스트 또는 단위 테스트 프레임 워크 (예 : “단위”)를 사용한 표준 통합 테스트 일 수 있습니다.

이 시점에서 빌드가 실행 가능한지 여부를 상당히 포괄적으로 표시해야합니다. 일반적으로 “릴리스”분기를 사용하여 설정하는 마지막 단계는 릴리스 후보를 테스트 서버에 자동으로 배포하여 QA 부서에서 수동 연기 테스트를 수행 할 수 있도록하는 것입니다. 테스트 사이클을 망칠 수 있습니다). 테스트 팩이 종합적이지 않은 경우 놓치기가 쉽고, 100 % 테스트 적용 범위에서도 할 수있는 것을 놓치기가 쉽기 때문에 빌드가 실제 릴리스에 실제로 적합한 지 여부를 사람이 빠르게 알 수 있습니다. ‘자동으로 테스트하지 않아야합니다 (예 : 잘못 정렬 된 이미지 또는 철자 오류).

이는 실제로 Continuous Integration과 Continuous Deployment의 조합이지만 Agile의 핵심은 일류 프로세스로서 린 코딩 및 자동화 된 테스트에 중점을두고 있으므로 가능한 한 포괄적 인 접근 방식을 달성하고자합니다.

내가 설명 한 프로세스는 이상적인 사례 시나리오이며, 일부를 버릴 수있는 많은 이유가 있습니다 (예 : 개발자 브랜치는 SVN에서 실현 가능하지 않습니다).하지만 가능한 한 많은 것을 목표로하고 싶습니다. .

스크럼 스프린트 사이클이 여기에 어떻게 적용되는지에 관해서는 이상적으로 릴리스를 가능한 한 자주 발생시키고 스프린트가 끝날 때까지 놓아 두지 말고 기능 여부에 대한 빠른 피드백을 얻습니다. )는 생산 단계로 이동하는 것이 제품 소유자의 피드백 루프를 단축하는 핵심 기술입니다.


답변

개념적으로 그렇습니다. 다이어그램은 다음과 같은 중요한 포인트를 많이 캡처하지 않습니다.

  1. 단위 테스트
  2. 증분 커밋
  3. 준비는 자주 배포되지만 생산은 그렇지 않습니다.

답변

다이어그램을 위해 더 넓은 시스템을 그릴 수 있습니다. 다음 요소를 추가하는 것이 좋습니다.

시스템에 입력 한 내용을 개발자에게 보여줍니다. 요구 사항, 버그 수정, 스토리 등을 부릅니다. 그러나 현재 워크 플로에서는 뷰어가 입력을 삽입하는 방법을 알고 있다고 가정합니다.

워크 플로우와 함께 제어점을 표시합니다. 트렁크 / 메인 / 릴리즈 브랜치 등으로 변경이 허용되는 시점은 누구 / 무엇입니까? CIS에 어떤 코드 트리 / 프로젝트가 구축됩니까? 빌드가 손상되었는지 확인하기위한 체크 포인트가 있습니까? CIS에서 스테이징 / 프로덕션으로 누가 릴리즈합니까?

제어 지점과 관련된 것은 분기 방법론이 무엇이며이 워크 플로에 어떻게 적용되는지 식별하는 것입니다.

테스트 팀이 있습니까? 언제 관련되거나 알림을 받습니까? CIS에서 자동 테스트가 수행되고 있습니까? 파손은 어떻게 시스템으로 피드백됩니까?

이 워크 플로우를 의사 결정 지점 및 입력을 사용하여 기존 플로우 차트에 맵핑하는 방법을 고려하십시오. 워크 플로우를 적절하게 설명하는 데 필요한 모든 고급 터치 포인트를 캡처 했습니까?

당신의 원래 질문은 비교를 시도하고 있지만, 나는 당신이 비교하려는 측면을 확신하지 못합니다. Continuous Integration에는 다른 SDLC 모델과 마찬가지로 의사 결정 지점이 있지만 프로세스에서 다른 지점에있을 수 있습니다.


답변

“개발 자동화”라는 용어를 사용하여 모든 자동화 된 빌드, 문서 생성, 테스트, 성능 측정 및 배포 활동을 포함합니다.

따라서 “개발 자동화 서버”는 지속적인 통합 서버와 유사하지만 다소 넓은 송금을합니다.

CI 서버에서 추가 구성없이 개인 지점과 중앙 개발 트렁크를 모두 자동화 할 수있는 커밋 후 후크로 구동되는 개발 자동화 스크립트를 사용하는 것이 좋습니다. (이로 인해 내가 알고있는 상용 CI 서버 GUI를 대부분 사용할 수 없습니다.)

커밋 후 스크립트는 지점 자체의 내용을 기반으로 실행할 자동화 활동을 결정합니다. 분기의 고정 위치에서 커밋 후 구성 파일을 읽거나 특정 단어 (/ auto /를 저장소의 분기 경로 구성 요소로 사용 (Svn 포함))를 감지하여.

(Hg보다 Svn으로 설정하는 것이 더 쉽습니다).

이 접근 방식을 통해 개발 팀은 워크 플로를 구성하는 방법에 대해보다 융통성이있어 CI가 최소한의 관리 오버 헤드로 지점에서 개발을 지원할 수 있습니다.


답변

유용한 asp.net 에 대한 지속적인 통합 에 대한 일련의 게시물이 있습니다.이 게시물 은 여러분이하고있는 것처럼 보이는 약간의 기초와 워크 플로우를 다룹니다.

귀하의 다이어그램은 CI 서버가 수행 한 작업 (단위 테스트, 코드 적용 범위 및 기타 메트릭, 통합 테스트 또는 야간 빌드)에 대해서는 언급하지 않지만 “연속 통합 서버”단계에서 다룬다 고 가정합니다. CI 상자가 중앙 저장소로 다시 밀려나는 이유를 잘 모르겠습니다. 분명히 코드를 가져와야하지만 왜 다시 보내야합니까?

CI는 다양한 분야에서 권장하는 관행 중 하나입니다. 스크럼 (또는 XP)에는 고유하지 않지만 실제로 폭포와 같은 비 민첩성 (유연성 민첩성)이라도 모든 흐름에 이점이 있다고 말할 수 있습니다. . 저에게있어 주요 이점은 긴밀한 피드백 루프입니다. 방금 커밋 한 코드가 나머지 코드베이스에서 작동하는지 여부를 매우 빠르게 알 수 있습니다. 스프린트 작업을하고 매일 스탠드 업을하고 있다면 CI 서버에서 지난 밤의 통계 또는 상태를 참조 할 수 있다는 점에서 확실히 도움이되고 사람들을 집중시키는 데 도움이됩니다. 제품 소유자가 빌드 상태 (빌드 프로젝트의 상태를 표시하는 공유 영역의 큰 모니터)를 볼 수 있다면 실제로 피드백 루프를 강화한 것입니다. 개발 팀이 자주 (하루에 한 번 이상, 이상적으로는 한 시간에 두 번 이상) 커밋하는 경우 해결하는 데 오랜 시간이 걸리는 통합 문제가 발생할 가능성은 줄어 듭니다. 예를 들어 깨진 빌드를 처리하기 위해 모든 사람이 중단됩니다. 실제로는 자주 통합되는지 파악하는 데 몇 분 이상 걸리는 많은 실패한 빌드에는 영향을 미치지 않을 것입니다.

리소스 / 네트워크에 따라 다른 최종 서버를 추가하는 것이 좋습니다. 우리는 repo에 대한 커밋에 의해 트리거되는 CI 빌드를 가지고 있으며 모든 테스트를 빌드하고 통과한다고 가정하면 개발 서버에 배포되어 개발자가 잘 재생되도록 할 수 있습니다 (여기서 셀레늄 또는 다른 UI 테스트를 포함 할 수 있습니까? ). 모든 커밋이 안정적인 빌드는 아니지만 스테이징 서버에 빌드를 트리거하려면 빌드 및 배포하려는 개정판 (수은을 사용)에 태그를 지정해야합니다. 다시 말하면 이는 특정 커밋으로 간단히 자동화되어 트리거됩니다. 꼬리표. 생산으로가는 것은 수동 프로세스입니다. 사용하려는 개정 / 빌드를 알고있는 트릭으로 빌드를 강제하는 것처럼 간단하게 남겨 둘 수 있습니다. 그러나 개정판에 적절하게 태그를 지정하면 CI 서버가 올바른 버전을 체크 아웃하고 필요한 모든 작업을 수행 할 수 있습니다. MS Deploy를 사용하여 변경 사항을 프로덕션 서버에 동기화하거나 패키지를 작성하고 관리자가 수동으로 배치 할 수있는 위치에 zip을 넣을 수 있습니다.

버전을 올리는 것뿐만 아니라 실패를 처리하고 버전을 내리는 방법도 고려해야합니다. UAT에서 작동하는 것이 프로덕션 환경에서 작동하지 않기 때문에 승인 된 버전을 릴리스하면 실패합니다. 항상 식별 할 수있는 접근 방식을 취할 수 있습니다. 버그, 코드 추가, 커밋, 테스트, 수정을 위해 프로덕션에 배포 … 또는 자동 릴리스에 대한 추가 테스트를 프로덕션으로 래핑 할 수 있으며, 실패하면 자동으로 롤백됩니다.

CruiseControl.Net은 xml을 사용하여 빌드를 구성하고 TeamCity는 마법사를 사용합니다. 팀의 전문가를 피하려는 경우 xml 구성의 복잡성이 염두에 둘 수 있습니다.


답변

첫째,주의 사항 : 스크럼은 매우 엄격한 방법론입니다. 나는 Scrum 또는 Scrum과 같은 접근 방식을 사용하려고 시도한 몇 개의 조직에서 일했지만 실제로 전체 학문을 완전히 사용하는 것은 아닙니다. 내 경험으로는 나는 애자일 애호가이지만 (마지 못한) 스크럼 회의론자입니다.

내가 알기로 스크럼과 다른 애자일 방법에는 두 가지 주요 목표가 있습니다.

  • 첫 번째는 리스크 관리와 지속적인 리스크 발견을위한 명시 적 메커니즘을 제공하는 것입니다.
  • 두 번째는 이해 관계자 커뮤니케이션, 요구 사항 발견 및 요구 사항 관리를위한 구조화 된 메커니즘을 제공하는 것입니다.

첫 번째 (위험 관리) 목표는 반복 개발을 통해 달성됩니다. 실수와 학습 수업을 신속하게 수행함으로써 팀은 이미 이해가 부족하고 지적 능력을 구축하여 위험을 줄이고 위험 부담이 적은 “오스터”솔루션으로 위험 감소 솔루션으로 전환 할 수 있습니다.

지속적인 통합을 포함한 개발 자동화는이 접근 방식의 성공에 가장 중요한 요소입니다. 위험 발견 및 수업 학습은 빠르고, 마찰이없고, 혼란스러운 사회적 요소가 없어야합니다. (사람들은 다른 인간이 아니라 자신이 잘못되었다고 말하는 기계 일 때 MUCH를 더 빨리 배웁니다.

당신이 아마 알 수 있듯이-나는 또한 테스트 중심 개발의 팬입니다. 🙂

두 번째 목표는 개발 자동화와 관련이 없으며 휴먼 팩터와 관련이 있습니다. 공식적인 필요성이 보이지 않는 비즈니스 프론트 엔드에서 바이 인을 요구하기 때문에 구현하기가 더 어렵습니다.

개발 자동화는 자동 생성 된 문서 및 진행 보고서를 사용하여 개발 팀 외부의 이해 관계자가 진행 상황을 지속적으로 업데이트하고 빌드 상태 및 합격 / 불합격 테스트 스위트를 표시하는 정보 라디에이터를 사용하여 진행 상황을 전달할 수 있습니다. 기능 개발과 관련하여 Scrum 커뮤니케이션 프로세스의 채택을 (희망적으로) 지원합니다.

요약하면 다음과 같습니다.

질문을 설명하는 데 사용한 다이어그램은 프로세스의 일부만 캡처합니다. 민첩 / 스크럼 및 CI를 공부하고 싶다면 프로세스의 더 넓은 사회적 및 인적 요소 측면을 고려하는 것이 중요하다고 주장합니다.

나는 항상 같은 드럼을 두드리는 것으로 끝나야합니다. 실제 프로젝트에서 민첩한 프로세스를 구현하려는 경우 성공 가능성을 가장 잘 예측하는 요소는 배포 된 자동화 수준입니다. 마찰을 줄이고 속도를 높이며 성공의 길을 열어줍니다.


답변