Jenkins를 사용하여 지속적인 통합 서비스 구축
1. 지속적인 통합
지속적 통합(Continuous Integration, 약칭 CI)은 소프트웨어 공학의 실천으로 개발자의 다양한 단계의 업무 성과를 통합하는 데 사용되며 보통 하루에 여러 번 진행된다.지속적인 통합은 처음에 극한 프로그래밍(Extreme Programming)에서 제기되었고 주로 자동화 테스트를 수행하는 데 사용되었다.현재 지속적인 통합의 개념은 점차적으로 독립되어 구축 서버(Build Server), 품질 제어(Quality Control)와 지속적인 납품(Continuous Delivery) 등 다양한 형식과 실천으로 확대되었다.자세한 내용은 위키백과를 참조하십시오.
다음은 Jenkins(Java 기반의 지속적인 통합 도구)를 구축하고 자동화 테스트를 수행하는 방법을 살펴보겠습니다.우리는 이러한 효과를 달성해야 한다. BitBucket에 있는 프로젝트push 코드에 Jenkins가 자동으로 최신 코드를 가져와 테스트를 실행하고 테스트 결과를 이메일이나 다른 방식으로 알려준다.
또한 본고는 몇 개의 지속적인 통합 서비스 업체를 소개하여 자신의 설치와 유지 보수 업무를 면제할 수 있다.자세한 내용은 지속적인 통합 서비스 업체를 참조하십시오.
2. Jenkins 설치 및 구성
Ubuntu 시스템에 Jenkins를 설치하고 구성하는 방법에 대해 설명합니다.만약 당신이 Ubuntu 시스템에 익숙하지 않다면, Linux 서버의 초보적인 설정 절차를 참고하십시오. 거기에sudo를 어떻게 설정하는지 등 정보가 있습니다.
2.1 Jenkins 설치
자세한 설치 절차는 공식 문서를 참조하십시오. 기본 절차는 다음과 같습니다.
wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins
그러면 Jenkins와 OpenJDK와 같은 종속성이 자동으로 설치되고 8080 포트에서 Jenkins가 자동으로 시작됩니다.8080 포트가 사용되면 시작에 실패합니다. 8080 포트를 사용하는 프로그램을 닫거나 Jenkins의 설정을 변경하려면 다른 포트를 사용하십시오(뒷문 참조).
프로젝트 자동화 테스트를 수행하기 위해 필요한 소프트웨어와 도구는 여기에서 함께 설치하고 설정할 수 있습니다. 예를 들어 제 프로젝트는 Rvm, Ruby, PostgreSQL이 필요합니다.
2.2 Jenkins 명령
다음은 Jenkins 서비스를 관리하는 데 자주 사용되는 명령입니다.
Jenkins가 실행 중인지 확인:
sudo service jenkins status
실행 Jenkins: sudo service jenkins start
멈추다 Jenkins: sudo service jenkins stop
재부팅 Jenkins: sudo service jenkins restart
2.3 Jenkins 실행 옵션
Jenkins에서 기본적으로 사용하는 프로필은/etc/default/jenkins에 있습니다. 여기서 Jenkins의 실행 옵션을 변경할 수 있습니다.예를 들어 메모리 크기와 실행 포트를 수정하려면
sudo vi /etc/default/jenkins
을 사용하여 이 파일을 열고 이 두 가지 옵션을 수정할 수 있습니다.JAVA_ARGS="-Xmx512m"
HTTP_PORT=9080
프로필 수정 후 Jenkins:
sudo service jenkins restart
재부팅2.4 Jenkins 보안 구성
다음 브라우저에서 host:port 열기 (예:http://localhost:8080)Jenkins 페이지에 접근할 수 있습니다. 그 중에서 host는 서버 IP나 도메인 이름이고,port는 Jenkins의 실행 포트입니다(기본값은 8080).Nignx나 Apache와 함께 80포트를 사용하고 SSL 등을 설정할 수도 있습니다.
Jenkins를 처음 실행할 때 가장 중요한 것은 보안 옵션을 설정하는 것입니다. 즉, Jenkins에 접근하고 수정하는 권한입니다.기본 설정은 모든 사람이 모든 권한을 가지고 있다는 것입니다.사용자 이름과 비밀번호를 사용하여 로그인해야 합니다.
먼저 사용자를 만듭니다.왼쪽 메뉴에서 Manage Jenkins, Manage Users, Create User로 차례로 들어가서 로그인 정보를 기입합니다.
이후 첫 페이지로 돌아가 차례로 Manage Jenkins, Configure Global Security에 들어가서 Enable security와 Jenkins'Own user 데이터베이스에 들어가서 Allow users to sign up 앞의 체크를 제거합니다.
다음으로, 만약 당신의 Jenkins가 내부에서 사용되고 대중에게 공개하고 싶지 않다면, Matrix-based security를 사용해서 User/group to add: 뒤에 방금 만든 사용자 이름을 입력하고 Add를 눌러서 나타나는 줄에 Administer를 눌러도 됩니다.
로그인하지 않은 사람이 Jenkins를 볼 수 있도록 하려면 Logged-in users can do anything을 사용하십시오.
이상은 전형적인 안전 설정입니다. 당신도 자신의 상황에 따라 어떻게 설정할지 결정할 수 있습니다.
3. Jenkins Job 예: 자동화 테스트
우리의 예는 Git와 Bitbucket을 사용해야 하기 때문에 먼저 필요한 설치와 설정을 해야 한다.
3.1 Git 및 ssh 키 설치 및 구성
우선 Git 설치:
sudo apt-get install git
그리고 jenkins
사용자로 전환합니다. 다음 명령은 이 사용자로 실행됩니다.sudo su jenkins
jenkins
사용자에게 Git 사용자 이름과 이메일을 구성합니다(상황에 따라 수정).git config --global user.name "Jenkins"
git config --global user.email "[email protected]"
그리고
ssh-keygen
의 이름으로 ssh 키를 생성합니다.기본적으로 생성된 sshpublic 키는 ~/에 있습니다.ssh/id_rsa.pub. 자세한 내용은 SSH 원리와 운용(一): 원격 로그인을 참조하십시오.그리고
ssh [email protected]
을 한 번 실행하고 yes
을 입력하면 BitBucket이 자동으로 known_에 추가됩니다.호스트에 있어요.그리고 sshpublic key를 BitBucket 프로젝트의 Deployment keys에 추가해야
jenkins
사용자에게 clone 프로젝트 코드를 사용할 수 있습니다.cat ~/.ssh/id_rsa.pub
을 실행하고 출력된public key 내용(여분의 빈 줄을 복사하지 않도록 주의)을 복사한 다음 BitBucket 프로젝트 관리 페이지의 Deployment keys 페이지를 열어 Key 텍스트 상자에 붙여넣고, Label은 jenkins ci
을 작성하고 Add key를 누르는 것을 권장합니다.마지막으로 Jenkins에 Git 플러그인을 설치해야 합니다.Jenkins 페이지에서 Manage Jenkins, Manage Plugins, Available 을 차례로 선택하고 GIT 플러그인을 찾아 선택합니다.내 프로젝트는 Rvm를 사용했기 때문에 나도 Rvm를 연결할 것이다.그리고 페이지 맨 아래에 있는 Install without restart를 누르십시오.
3.2 Job 만들기
다음은 자동화 테스트를 수행하는 Jenkins Job을 만듭니다.
Jenkins 페이지에서 New Item을 클릭하고 Item name에서 Job 이름(예: my-project-rspec)을 입력하고 OK를 누르십시오.
Source Code Management 영역에서 Git를 선택하고 Repository URL에서 BitBucket 주소(예:
[email protected]:user/repo.git
)를 입력합니다.Branches to build 뒤에 어떤 지점을 지속적으로 집적하고 싶은지 기입하고, 우리는 모든 지점을 대상으로 시간을 남깁니다.Build Triggers 영역에서 Poll SCM(Schedule 및 Ignore post-commit hooks 비우기)을 선택합니다.
Rvm 플러그인을 사용하려면 Build Environment 영역에서 Run the build in a RVM-managed environment를 선택하고 Implementation 뒤에 Rvm에서 사용하는 Ruby 버전(예:
2.0.0-p451
)을 기입하십시오.Build 영역에서 Add build step, Execute shell을 차례로 선택하고 Command 오른쪽에 있는 텍스트 상자에 지속적으로 통합된 스크립트를 입력하십시오. 예를 들어 제 프로젝트를 위한 자동화 테스트를 수행합니다.
bundle install
export RAILS_ENV=test
bundle exec rake db:schema:load
bundle exec rspec spec
마지막으로 Save를 누르면 방금 만든 Job의 페이지로 돌아가서 Build Now를 누르면 Build의 Console Output을 볼 수 있습니다. 오류가 발생하면 해당하는 수정을 한 다음에 Build Now를 성공시킵니다.
3.3 자동 트리거 구성
현재 우리는 테스트를 실행하기 위해 수동으로 터치할 수 있습니다. 다음은push 코드에 설정할 때 자동으로 터치합니다.
BitBucket 프로젝트 관리 페이지의 Hooks 페이지로 들어가서 Select a hook... POST를 선택하고 Add hook을 클릭한 다음 URL에 JENKINS_URL/git/notifyCommit?url=GIT_REPO, 여기서 JENKINS_URL은 당신의 Jenkins 주소입니다. GIT_REPO는 이전 단계에서 Git 저장소 주소로 작성되었습니다.예:
http://localhost:8080/git/[email protected]:user/repo.git
그리고 저장을 누르세요.나중에 코드push가 BitBucket 프로젝트에 오면 Jenkins는 자동으로 테스트를 실행합니다.
3.4 구성 알림
마지막으로, 통합이 실패했을 때 알림을 받을 수 있도록 알림을 설정해야 합니다.HipChat이나 Slack을 사용한다면 알림을 받는 데 직접 사용할 것을 권장합니다. 플러그인과 간단한 설정만 설치하면 됩니다.
Jenkins가 이메일 알림을 보내는 방법을 소개합니다.먼저 SMTP를 구성해야 합니다.Manage Jenkins, Configure System 으로 이동하여 E-mail Notification 영역에서 설정합니다.Gmail의 경우: SMTP server 입력
smtp.gmail.com
, Advanced 클릭..., Use SMTP Authentication 선택, User Name 및 Password 입력 Gmail 메일 주소와 비밀번호, Use SSL 선택, SMTP Port 입력 465
.그리고 Test configuration by sending test e-mail을 선택하고 자신의 이메일 주소를 기입한 다음 Test configuration을 눌러서 테스트를 할 수 있습니다. 테스트 메일을 받을 수 있다면 설정이 성공했다는 것을 의미합니다.그리고 페이지 밑에 있는 Save를 누르세요.다음은 Job 페이지로 들어가서 Configure를 누르면 Job의 설정 페이지로 들어가고 맨 아래에 있는 Add post-build action에서 E-mail Notification을 선택한 다음 Recipients에서 알림 메일을 받을 메일 주소를 입력하고 여러 주소 사이를 영문 공백으로 구분합니다(메일 목록 주소 사용).
4. 지속적인 통합 서비스 업체
지금까지 Jenkins의 지속적인 통합 서버의 기본 구성과 사용이었습니다.일부 상황에서 반드시 이렇게 자체적으로 지속적인 통합 서버를 구축해야 하는 것을 제외하고는 일부 SaaS 유형의 지속적인 통합 서비스, 예를 들어 Travis CI,Circle CI, Codeship과 Drone를 고려할 수 있다.이런 종류의 서비스는 개원 프로젝트에 대해 기본적으로 모두 무료이다.개인 프로젝트에 대한 비용도 자신이 구축하고 유지하는 지속적인 통합 서버보다 낮을 수 있으므로 고려할 만하다.
다음은 이 몇 가지 지속적인 통합 서비스에 대한 나의 초보적인 인상이다.
Travis CI: GitHub 프로젝트에서 매우 유행하고 있으며 유료 버전의 시작 가격($129)이 비교적 높다.
CircleCI: GitHub 프로젝트만 지원합니다.속도가 빠르다고 들었어요.
Codeship: 사이트 인터페이스가 예뻐요.나는 사용 중에 두 가지 흔히 볼 수 없는 문제에 부딪혔다.
git push -f
으로 이전에 실패한 commit을 덮어썼을 때 Codeship은 이전의commit을 찾지 못해 계속 실행할 수 없었다.또한 자동 실행을 촉발하는 훅 URL은 프로젝트를 처음 만들 때만 볼 수 있으며, 나중에 설정 페이지에서 찾을 수 없습니다. 그러면 BitBucket/GitHub에서 훅을 임시로 삭제하면 찾을 수 없습니다.이 두 문제는 프로젝트를 삭제하고 재건하는 것만 해결할 수 있을 것 같다. Drone: Docker 기반.내가 사용 중에 발견한 문제는 매번 실행할 때마다 0부터 환경을 구축하는 것이다. 예를 들어 나의 루비 프로젝트는
bundle install
을 실행할 때마다 모든 의존을 다시 설치하여 너무 오래 사용하고 당분간 해결 방법이 있는지 연구하지 않았다는 것이다. 마지막으로 자신의 지속적인 통합 서비스 구축에 관해서는 Jenkins 외에 다른 유사한 도구가 있다. 예를 들어 GitLab CI, ThoughtWorks Go, Drone(개원판) 등은 위키백과와 개원 중국 지역사회의 목록을 참고할 수 있다.
다음으로 전송:
http://xhh.me/2014/03/16/continuous-integration-with-jenkins/
http://chenpeng.info/html/3081?utm_source=tuicool
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.