개발 환경 설정을 자동화하는 방법은 무엇입니까? [닫은]


80

새로운 개발자가 팀에 합류하거나 개발자가 변경 사항을 사용하는 컴퓨터에 합류 할 때마다 개발자는 현재 프로젝트가 작동하도록 로컬 개발 환경을 설정하기 위해 많은 작업을 수행해야합니다. SCRUM 팀으로서 우리는 배포 및 테스트를 포함한 모든 것을 자동화하려고 노력하고 있으므로 제가 묻고 자하는 것은 로컬 개발 환경 설정을 자동화 할 수있는 도구 또는 사례가 있습니까?

예를 들어 환경을 설정하려면 먼저 eclipse를 설치 한 다음 SVN, Apache, Tomcat, MySQL, PHP를 설치해야했습니다. 그 후 DB를 채우고 다양한 구성 파일 등을 약간 변경해야했습니다.이 작업을 한 번의 클릭으로 줄일 수있는 방법이 있습니까?

답변:


68

몇 가지 옵션이 있으며 때로는 이들의 조합이 유용합니다.

  • 자동 설치
  • 디스크 이미징
  • 가상화
  • 소스 코드 제어

다양한 옵션에 대한 세부 정보 :

  1. 설치 자동화 된 워크 스테이션의 다양한 서비스, 도구 및 설정 파일의 설치 및 구성을 자동화하기위한 도구 :

    • Puppet 은 학습 곡선이 있지만 강력합니다. 시스템 클래스 (개발 상자, 웹 서버 등)를 정의한 다음 상자를 적절한 상태로 설치, 구성 및 유지하는 데 필요한 작업을 수행합니다. 원 클릭을 요청했지만 Puppet은 기본적으로 제로 클릭입니다. 주기적으로 컴퓨터를 확인하여 원하는대로 구성되어 있는지 확인하기 때문입니다. 파일 또는 모드가 변경되면 감지하여 문제를 해결합니다. 나는 현재 이것을 사용하여 소수의 RedHat Linux 상자를 유지 관리하지만 수천 개를 처리 할 수 ​​있습니다. (2009-05-08 현재 Windows를 지원하지 않습니다.)
    • Cfengine 은 또 다른 것입니다. 나는 이것이 RedHat Linux를 사용하는 70 명의 엔지니어가있는 상점에서 성공적으로 사용되는 것을 보았습니다. 그 한계는 Puppet의 이유 중 일부였습니다.
    • SmartFrog 는 호스트 구성을위한 또 다른 도구입니다. Windows를 지원합니다.
    • 쉘 스크립트. RightScale 에는 셸 스크립트를 사용하여 Amazon EC2 이미지를 구성하는 방법의 예가 있습니다.
    • 패키지를 설치합니다. Unix 상자에서는 패키지로이 작업을 완전히 수행 할 수 있으며 Windows에서는 msi가 옵션 일 수 있습니다. 예를 들어, RubyWorks 는 종속성을 통해 다른 패키지를 차례로 설치하는 하나의 패키지를 설치하여 전체 Ruby on Rails 스택을 제공합니다.
  2. 디스크 이미지 물론 다른 호스트로 복원 할 수 있도록 구성된 호스트의 이미지를 저장하는 디스크 이미징 도구 도 있습니다. 가상화와 마찬가지로 이것은 깨끗한 상태로 물건을 복원하기 쉽기 때문에 테스트 상자에 특히 좋습니다. 지속적으로 최신 상태로 유지하는 것은 여전히 ​​문제입니다. 구성 파일 변경 사항을 전파하기 위해 새 이미지를 만드는 것이 가치가 있습니까?

  3. 가상화 는 Xen, VirtualPC 또는 VMWare 이미지를 복사하여 새 호스트를 만드는 것과 같은 또 다른 옵션입니다. 이것은 테스트 상자에서 특히 유용합니다. 테스트가 어떤 엉망이 되어도 깨끗하고 알려진 상태로 쉽게 복원 할 수 있기 때문입니다. 디스크 이미징 도구와 마찬가지로 호스트를 최신 상태로 유지하려면 자동화 된 설치 / 구성 도구를 사용할 때보 다 더 많은 수동 단계와 경계가 필요합니다.

  4. 소스 코드 제어 필요한 도구를 설치 / 구성했으면 빌드를 수행하는 것은 소스 코드 저장소에서 필요한 것을 확인하고 빌드하는 문제 여야합니다.

현재 위의 조합을 사용하여 다음과 같이 프로세스를 자동화합니다.

  • VMWare 게스트에서 베어 본 OS 설치로 시작
  • 셸 스크립트를 실행하여 Puppet을 설치하고 소스 코드 제어에서 해당 구성을 검색합니다.
  • 도구 / 구성 요소 / 구성을 설치하는 Puppet
  • 소스 코드 제어에서 파일을 확인하여 웹 애플리케이션을 빌드하고 배포합니다.

우리 사무실에는 Windows, Linux 및 Mac OS가 있습니다. 가상화 옵션을 선택하겠습니다.
nimcap

우리는 가상화와 함께 비행하며 좋은 솔루션입니다. 시작했을 때 설정하는 데 3-4 일이 걸렸습니다. 이제 VPC 이미지를 복사하는 데 걸리는 시간에 새로운 개발자가 설정됩니다.
Burt

5
agile.dzone.com/articles/4-methods-automate-development 가 매우 비슷하게 들리기 때문에 작성 했습니까 ?
Aaron D

5
아니오 나는 그 기사를 쓰지 않았지만 유사점으로 보아도 영감을받은 것 같습니다. :-)
Pete


20

나는이 질문을 우연히 발견했고 아무도 아직 Vagrant 를 언급하지 않았다는 사실에 매우 놀랐습니다 .

방랑자

Pete TerMaat 및 다른 사람들이 언급했듯이 가상화는 개발 환경을 관리하고 자동화하는 좋은 방법입니다. Vagrant는 기본적으로 이러한 가상 상자를 설정하는 데 따른 고통을 덜어줍니다.

몇 분 안에 좋아하는 Linux 배포판의 완전히 새로운 복사본을 실행 하여 프로덕션 서버와 똑같은 방식으로 프로비저닝 할 수 있습니다.

PHP, MySQL 등을 설치하기 위해 OSX 또는 Windows와 더 이상 싸우지 않아도됩니다. 모든 소프트웨어는 가상 머신 내부에 존재하고 실행됩니다. 당신은 vagrant ssh. 실수 또는 휴식 뭔가를 한 경우, 단지 vagrant destroy그것, 그리고 vagrant up신선한를 시작합니다.

Vagrant는 로컬 파일 시스템에 동기화 된 폴더 를 자동으로 생성 하므로 가상 머신 내에서 개발할 필요가 없습니다 (예 : Vim 사용). 원하는 편집기를 사용하십시오.

나는 이제 내가하는 거의 모든 프로젝트에 대해 새로운 "Vagrant box"를 만듭니다. 모든 설정이 프로젝트 저장소에 저장되므로 다른 팀원을 쉽게 가져올 수 있습니다. 그들은 단순히 repo를 가져 vagrant up와서 실행하기 만하면 말 그대로 갈 준비가 된 것입니다.

또한 소프트웨어 요구 사항이 다른 프로젝트를 훨씬 쉽게 처리 할 수 ​​있습니다. PHP 5.3을 사용하는 프로젝트가 있지만 PHP 5.4를 실행하는 새로운 프로젝트가있을 수 있습니다. 해당 프로젝트에 원하는 버전을 설치하기 만하면됩니다.

확인 해봐!


1
디버깅은 가상화 된 환경에서 고통 스러울 수 있습니다.
Jonathan

13

한 가지 중요한 점은 체크 아웃 후 즉시 빌드, 배포 및 실행할 수 있도록 소스 제어에서 프로젝트를 설정하는 것입니다.

즉, Makefile, ant 빌드 파일 등과 같은 도우미 인프라와 IDE 프로젝트 파일과 같은 도구 설정도 체크인해야합니다.

개별 프로젝트의 설정 번거 로움을 처리해야합니다.

기본 컴퓨터 설정의 경우 표준 이미지를 사용할 수 있습니다. 또 다른 옵션은 플랫폼의 도구를 사용하여 설치를 자동화하는 것입니다. Linux에서는 필요한 모든 패키지에 의존하는 메타 패키지를 만들 수 있습니다. Windows에서는 MSI 등을 사용하여 비슷한 일이 가능해야합니다.

편집하다:

이상적으로는 헬퍼 인프라를 체크인하는 대신 빌드가 헬퍼 인프라 를 생성 하도록 허용하는 정보를 체크인합니다 . 이것은 예를 들어 GNU 빌드 시스템 (autotools 등)이나 Maven이 취하는 접근 방식입니다. 이것은 (이론적으로) 모든 (지원되는) 빌드 환경에 대한 인프라를 생성 할 수 있기 때문에 훨씬 더 우아합니다. 따라서 하나의 특정 IDE에 묶이지 않고 도우미 인프라 (경로 등)의 설정을 복제 할 필요가 없습니다. 주요 프로젝트 설정.

그러나 이것은 또한 더 복잡한 접근 방식이므로 작동하지 않으면 IDE 파일과 같은 항목을 직접 체크인하는 것이 허용됩니다.


7

가상 PC 또는 VMware를 사용하여 개발 환경을 가상화하고 싶습니다. 이는 개발자간에 공유 할 수있는 표준 "개발 환경"을 제공합니다. 사용자가 개발 환경과 충돌 할 수있는 시스템에 추가 할 수있는 소프트웨어에 대해 걱정할 필요가 없습니다. 또한 개발 환경이 하나의 시스템에있을 수없는 두 개의 프로젝트에 작업하는 방법을 제공합니다 (핵심 기술의 두 가지 다른 버전 사용).


VirtualPc / VMWare 환경에서 실행하면 성능에 많은 영향을 줍니까? Visual Studio 2008을 사용하십니까?
Joel Gauvreau

저는 VM (VMWare)에서 모든 개발을 독점적으로 수행하는 하나 이상의 대형 소프트웨어 개발 업체를 알고 있습니다. CPU가 하드웨어 가상화를 지원하므로 상황이 훨씬 좋아졌습니다 ...
tomfanning

컴퓨터 이름 충돌에주의해야합니다. Windows는 동일한 이름을 가진 두 대의 컴퓨터가 단일 네트워크에 나타날 때 너무 행복하지 않습니다. 또한 VM에 개발 환경이없는 것을 선호합니다. 오버 헤드로 인해 성능이 저하 될 수 있습니다.
Kieveli

2
우리는 완전히 가상화 된 Dev 환경을 사용합니다. VMServer 또는 VirtualBox를 사용하여 Vista VM을 호스팅합니다. VM 이미지에는 전체 개발 스택이 포함되어 있지만 corp 도메인에 연결되어 있지 않습니다. 사용자에게 새 컴퓨터가 필요한 경우 로컬로 복사하고 NewSID를 실행 한 다음 고유 한 컴퓨터 이름으로 도메인에 가입합니다. 최신 하드웨어에서는 눈에 띄는 성능 저하가 없습니다. 솔루션에서 ~ 20 개의 C ++ / C # 프로젝트와 함께 VS2008을 사용하며 모두 잘 작동합니다.
Colin Desmond

가상화와 관련하여 제가 보는 한 가지 큰 장점은 현재 상태를 그대로 저장할 수 있다는 것입니다. 따라서 나중에 다시 돌아 오면 원래 위치로 정확하게 돌아갈 수 있습니다. 새로운 개발 머신 설정과 정확히 관련이 없지만 VM 사용의 좋은 부작용입니다.
Joel Gauvreau

3

puppet 을 사용 하여 개발 및 프로덕션 환경을 모두 구성하십시오. 최고의 자동화 시스템을 사용하는 것이 작업을 확장하는 유일한 방법입니다.


1

항상 가상 머신을 사용하는 옵션이 있습니다 (예 : VMWare Player 참조 ). 하나의 환경을 만들고 필요한 최소한의 구성으로 각 새 직원에 대해 복사합니다.


1

이전 장소에서 우리는 SCM (클리어 케이스 다음에 SVN)에 모든 것을 (그리고 나는 모든 것을 의미합니다) 가지고있었습니다. 새로운 개발자가 ClearCase | SVN을 설치하고 저장소를 제거 할 수있을 때. 또한 개발 팀이 환경을 업데이트하도록 할 수 있으므로 특정 lib / tool을 업데이트해야하는 경우도 처리합니다.

이를 위해 두 개의 저장소를 사용했기 때문에 코드와 도구 / 구성이 별도의 위치에있었습니다.


1

DevStructure의 Blueprint를 적극 권장합니다. 그것은 오픈 소스이며 귀하의 사용 사례는 실제로 우리가 원래 소프트웨어를 작성한 정확한 이유입니다. 우리의 목표는 다소 변경되었지만 여전히 설명하고있는 내용에 대한 완벽한 도구입니다. 요컨대, 재사용 가능한 서버 구성을 만들 수 있습니다. 즉, 단순한 구성 관리입니다. 이게 도움이 되길 바란다!

https://github.com/devstructure/blueprint(Blueprint @ Github)


1
개발 환경인가, 서버인가?
nimcap 2011-06-04

1

나는 이것에 대해 스스로 생각하고 있습니다. 혼합에 넣을 수있는 몇 가지 다른 기술이 있습니다. 현재 설정중인 항목은 다음과 같습니다.

  • PXE 기반 사전 시드 설치 이미지 (Debian Squeeze). 베어 메탈 머신 (또는 새 가상 어플라이언스)을 시작하고 PXE 부팅 메뉴에서 이미지를 선택할 수 있습니다. 이것은 (가상 어플라이언스 외에) 물리적 머신에 환경을 설치할 수 있다는 주요 이점이 있습니다.
  • 누군가 이미 꼭두각시를 언급했습니다. 나는 CFEngine을 사용하지만 비슷한 거래입니다. 기본적으로 구성은 클라이언트의 에이전트에 의해 지속적으로 시행되는 정책 파일에 문서화되고 중앙 집중화됩니다.
  • 엄격한 환경을 원하지 않는 경우 (예 : 개발자가 도구 세트 조합을 선택할 수 있음) 새로운 개발자가 sudo apt-get install acmecorp-eclipse-env또는 을 입력 할 수 있도록 자체 deb 패키지를 롤링 할 수 있습니다 sudo apt-get install acmecorp-intellij-env.
  • 주제에서 약간 벗어 났지만 Debian 기반 환경 (예 : Ubuntu)을 실행하는 경우 apt-cacher(패키지 프록시) 설치를 고려하십시오 . 대역폭을 절약하는 것 외에도 설치 속도가 훨씬 빨라집니다 (패키지가 로컬 네트워크에 캐시되기 때문에).


0

표준 구성에서 시스템을 사용하는 경우 완벽하게 구성된 새로 설치하여 디스크를 이미지화 할 수 있습니다. 이는 많은 회사에서 매우 인기있는 접근 방식입니다 (개발자뿐만 아니라). 별도로 구성된 OS가 필요한 경우 구성된 OS가 원하는 설정으로 바뀌면 추가 및 변경된 모든 파일을 tar-bz2 할 수 있으며 루트로 압축을 풀면 처음부터 원하는 환경을 만들 수 있습니다.


0

리눅스 버전을 사용한다면 아마도 패키지 관리 시스템을 가지고있을 것입니다 : fedora / redhat의 경우 .rpm, 우분투 / debian의 경우 .deb라고 생각합니다. svn, eclipse 등 당신이 설명하는 많은 것들은 이미 사용 가능한 패키지를 가지고 있습니다. 회사 특정 소프트웨어에 대한 자체 패키지를 롤링하고 저장소 (아마도 로컬 네트워크에서만 사용 가능)를 생성 한 다음 설정을 단일로 줄일 수 있습니다. 회사 저장소를 /etc/apt/sources.list(debian/ubuntu)에 추가하고 다음과 같은 명령을 호출하는 bash 스크립트


/home/newhire$ apt-get update && apt-get install some complete package list

그런 다음 빌드 을 사용 하여 자주 변경되는 회사 패키지에 대한 일반 빌드를 자동화 할 수 있습니다 .


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