이 문서의 내용은 Spinnaker 공식문서의 Hello Deployment 가이드를 따랐습니다
설치할 인스턴스로 들어가서 Jenkins를 설치해보자
가이드라인대로 먼저
$ sudo apt-get update
$ sudo apt-get upgrade
apt-get update와 upgrade 한번씩 실행하고나서
$ sudo apt-get install openjdk-8-jdk
이걸 실행하는데 가이드라인 원문에는
이렇게 openjdk-7-jdk로 나와있다.
하지만 이대로 설치를 한다면 분명히 Jenkins를 설치할 때에 버전이 달라 오류가 난다.
고로 우리는 openjdk-8-jdk를 설치한다.
$ wget -q -O - https://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 git
$ sudo service jenkins start
그리고 나머지 설치 명령들을 순서대로 진행하면 된다.
만약에
$ sudo service jenkins start
에서 fail이 난다면
/var/log/jenkins/jenkins.log 파일을 보면 된다.
보니까 이런 오류가 났었는데 Address already in use 라고 떴다.
그래서 Jenkins가 쓰는 기본 포트인 8080으로 grep을 해본결과
8080이 짱많다;;;
Jenkins의 기본 포트를 바꾸러가자
sudo vi /etc/default/jenkins 명령을 써서 들어간 뒤 /PORT로 검색하면
이렇게 59번째 줄 쯤에 HTTP_PORT= 하고 있는데 나는 9999로 바꿔주었다.
58번 줄에 보면 나와있듯이 default는 8080이였다
그리고 나서 Jenkins 재부팅을 해주자
하지만 이렇게 해도 http://localhost:9999 로 들어갔을 때 안되는 경우가 있다.
이때는 ssh 로 접속할 때 -L 옵션을 9999포트로 안해줘서 그러는 것인데 exit로 나왔다가
기존의 ssh 명령에 -L 9999:localhost:9999 를 추가하여 연결을 해주고 접속한다.
접속한 뒤 sudo service jenkins status 로 실행 여부를 확인하고 실행이 안되있으면 실행을 하고 되있으면 접속을 해보자
접속에 성공했다면
이렇게 Jenkins가 나온다.
이제 Jenkins 관리로 들어가서 약간의 설정을 해줘야 한다.
Jenkins 관리로 들어오면 이렇게 여러가지 설정목록들이 있는데 여기서 황금자물쇠 아이콘의 Configure Global Security를 눌러 들어간다
그러면 기본적으로는 저 위의 Enable security가 체크가 안되어있지만 체크해주고
나타나는 Securiry Realm의 Jenkins' own user database 선택 후 사용자의 가입 허용을 체크해준다.
그리고 밑에 Agents에 Fixed 선택 후 50000 을 입력해준다. 그 후 맨밑에 Save 버튼 클릭
우리는 github를 이용해 배포를 할 것이라서 jenkins에 github 플러그인을 설치해야한다.
Jenkins 관리에서 퍼즐 조각 아이콘의 플러그인 관리 클릭
설치 가능에 들어가보면 다양한 플러그인이 있는데 왼쪽 상단 필터에 github라고 검색하면 GitHub plugin이 있다
선택후 밑에 지금 다운로드 하고 재시작 후 설치하기 버튼을 눌러 설치를 진행한다.
이제 같은 플러그인 관리 화면에서 설치된 플러그인 목록을 누르고 맨 밑에 재시작을 누른다.
AWS S3로 들어간다.
여기서 버킷 만들기를 클릭하면 다이알로그 하나가 나온다.
버킷 이름을 입력하고 다른 설정들은 기본으로 한 채 버킷을 생성하자
참고로 버킷 이름은 고유값이니 사진대로 입력하면 되지 않는다.
생성이 완료되었으면 속성으로 들어가서
1. 정적 웹 사이트 호스팅을 활성화하고
2. 이 버킷을 사용하여 웹 사이트를 호스팅합니다. 를 선택한 뒤
3. index.html을 적고 저장 버튼을 누른다.
성공했다면 다음과 같이 버킷 호스팅 이라고 뜰 것이다.
이제 다시 터미널로 가서 Jenkins 서버에 deb-s3를 설치해보자
설치는 간단하다.
$ sudo apt-get install software-properties-common $ sudo apt-add-repository ppa:brightbox/ruby-ng $ sudo apt-get update $ sudo apt-get install build-essential ruby2.2 ruby2.2-dev zlib1g-dev liblzma-dev
$ sudo gem install bundler
$ sudo gem install deb-s3
이 순서대로 쭉 설치하면 된다.
그냥 중간에 Enter 누르라면 누르고 Y 쓰라면 쓰면 된다.
이제 우리는 github를 통해 배포를 해볼것인데, 그전에 SampleProject를 Fork 해오자
fork에 성공했으면 마땅한 곳에 clone을 해놓자
프로젝트의 구조를 보면 gradle 프로젝트로 되있는 것을 확인할 수 있다.
이제 jenkins도 설치했고 git의 프로젝트도 받아왔다.
본격적으로 jenkins를 사용해보자
이 화면에서 새 작업을 누르자
그러면 이렇게 나오는데 Enter an item name에 가이드대로 Hello Poll 을 입력하고 Freestyle Project를 선택하고 OK
여기서 소스 코드 관리에서 Git 선택 후 Repository URL에 Fork 한 git URL을 적는다.
그리고 빌드 유발 항목에서 Poll SCM 선택 후 Schedule에 * * * * * 을 입력하고 저장을 한다.
성공했다면 이렇게 나온다. 왼쪽 탭 목록에 새로운 Item을 클릭하여 하나 더 만들자
HelloBuild로 이름을 입력하고 똑같은 Freestyle Project로 만들고 OK
똑같이 소스 코드 관리에 Git 선택 후 URL을 Fork 한 URL로 적는다.
그리고 밑에 Build 항목에서 Add build step -> Execute shell 을 선택한다.
그러면 Command를 적는 Textbox가 나오고 가이드에 있는 대로 Command를 적어준다.
./gradlew clean packDeb
deb-s3 upload --bucket BUCKETNAME --arch amd64 --codename trusty --preserve-versions true build/distributions/*.deb
을 적으면 되는데 여기서 BUCKETNAME은 아까 S3 생성할 때 적은 버킷의 이름이다.
그 후 바로 밑에 빌드 후 조치 항목에 빌드 후 조치 추가를 눌러 Archive the artifacts 선택
그러면 이번에도 Files to archive 를 적는 TextField가 하나 나온다.
여기에 적어줘야 할 내용은 Execute shell에 적었던 command 중 맨 뒤에 적었던 경로를 적으면 된다.
현재는 build/distributions/*.deb 이다.
저장을 하자.
이제 Spinnaker랑 Jenkins를 연동하자
일단 Jenkins 계정을 하나 만들자
여기에서 왼쪽 상단의 가입을 누른다.
입력할 필드를 다 입력하고 Sign up 을 눌러 가입한다.
그러면 성공을 한다.
이제 s3 버킷을 등록해준다.
sudo vi /opt/rosco/config/rosco.yml 를 쳐서 rosco.yml 파일을 수정해보자
여기 24번째 줄에 debianRepository: http://BUCKETNAME.s3-website-REGION.amazonaws.com trusty main 이라고 추가를 해주었다.
추가를 해 준 다음에 :wq 를 저장하고 나온다
그 다음 작업은 Halyard로 설치를 했을 때와 Quickstart로 설치를 했을 때 두가지의 방법으로 나뉜다.
Spinnaker를 먼저 중지한 다음에 spinnaker-local.yml 파일을 수정하자
# sudo service spinnaker stop
# sudo vi /opt/spinnaker/config/spinnaker-local.yml
파일을 보면 jenkins 부분이 존재한다.
jenkins:
defaultMaster:
name: Jenkins # The display name for this server
baseUrl: http://localhost:9999
username: jenkinsuser
password: jenkinspassword
그 부분에 이렇게 지정을 하는데 name은 그냥 이름 지정해주는 것이다.
baseUrl은 jenkins의 주소를 말하는 건데 우린 localhost의 9999포트로 하였으니 저렇게 적고
username과 password는 jenkins 가입을 진행할 때 사용한 것으로 적으면 된다.
이렇게 파일 수정 후 저장을 한 다음에 다시 Spinnaker를 실행시키자
# sudo service spinnaker start
먼저 현재 halyard는 jenkins가 활성화 되어있지 않다.
고로 활성화를 먼저 시켜주자
# hal config ci jenkins enable
이렇게 하면 jenkins가 활성화 된다.
이제 jenkins 계정 정보를 등록해주자
halyard에서 jenkins 계정을 등록하는 명령어는
# hal config ci jenkins master add NAME --address ADDRESS --username USERNAME --password
이렇게 하면 된다.
각 파라미터에 대한 정보는 아래와 같다.
{
NAME : 이름 지정
ADDRESS : Jenkins 서버 주소
USERNAME : Jenkins 계정 이름
PASSWORD : Jenkins 계정 비밀번호
}
저 명령어를 사용하면
이렇게 비밀번호를 입력하라고 하면 입력하자
이렇게 잘 등록이 된다.
여기서 뜨는 WARNING은 그냥 버전 바꿔달라는건데 바꾸고 싶으면 version upgrade 명령을 참고해서 바꾸면 된다.
등록이 잘 되었나 확인해보자
# hal config
hal config 명령을 사용하면 config에 대한 정보들이 쭉 나오는데 그중에 ci라는 항목이 있다.
enabled가 true로 활성화 되어있고
masters에 등록한 정보가 저장되어있다.
이렇게 모든 설정이 다 끝났으면 이제 바뀐 사항들을 다시 deploy 해주자
# sudo hal deploy apply
6. Create Spinnaker application and resources
이제 Jenkins와 Spinnaker의 연동도 끝났으니 Spinnaker에서 Application을 만들어서 잘 작동하나 해보자
Spinnaker에 접속한다.
새로운 Application을 만들자
만약에 Halyard로 설치를 했었고, Create Application을 눌렀는데 계속 로딩만 되고, console에 429 Too Many Request가 뜬다면 /home/spinnaker/.aws/credentials를 보면 안에 내용이
[default]
aws_access_key_id = 123123123123
aws_secret_access_key = 12312321312312312312312331232
이렇게 되있을텐데 default 부분을 hal config 해서 나온 aws 의 account name으로 바꿔주고 spinnaker 재시작을 하면 된다.
Create Application을 눌러 새로운 Application을 만들 다이알로그에 가이드와 같이 적어주었다.
Create 버튼을 누른다
Application이 생성되고 AWS EC2 보안그룹을 하나 만들어준다.
AWS EC2 보안그룹 생성이 완료되었으면 Spinnaker의 SECURITY GROUPS로 가서 Create Security Group을 누른다.
그리고 가이드에 나온대로 값을 입력해주었다.
Create 버튼을 누른다
이제 LOAD BALANCERS로 이동하여 Create load Balancer버튼을 클릭
Stack에 web을 적고 Security Groups에 아까 생성한 hello-8080을 넣어주고 Create를 한다.
이제 Pipeline을 생성하러 PIPELINES로 간다.
아직은 Pipleline이 없다 Create 버튼을 만들어서 추가해주자
가이드대로 hello 입력 후 Create 버튼을 누른다
이렇게 처음 Configuration에서 Automated Triggers에 Jenkins를 걸어주고 Master는 아까 한 계정, Job은 Jenkins에서 생성한 Poll로 한다.
그리고 Add Stage를 하여 Stage 하나를 추가하자
두번째 Stage는 Type을 Jenkins로 하고 Stage Name을 Build로 해준다.
그리고 Jenkins Configuration에 Master를 아까 한 계정이름으로 선택하고 Job을 Jenkins에서 만든 Build로 해준다.
Add Stage를 하여 Stage를 하나 더 추가하자
세번째 Stage는 Type을 Bake로 해주고 Bake Configuration에 Package 이름을 fork 했던 git 프로젝트 이름으로 해준다.
그리고 Add Stage
마지막은 Deploy이다 Type을 Deploy로 설정하고 Deploy Configuration에 Add server group 클릭
Stack에 web을 적고 Strategy를 Highlander로 적용하고 LoadBalances와 Security Groups는 생성했던 것들로 한다.
그리고 Instance Type을 원하는 것으로 선택하고 Capacity에 Number of Instances를 2로 설정한다.
마지막으로 Advanced Settings에서 Key Name을 인스턴스에 접근할 때 쓰는 key로 해주고 Add한다.
성공적으로 만들어졌다면 저렇게 하나의 server group이 보이고 우측 하단의 Save Changes를 누른다.
이제 아까 Github에서 fork하여 clone 해놓은 프로젝트의 파일 하나를 수정하여 push해보자
필자는 README.md를 수정하였다.
push를 하면
Jenkins에서 빌드를 해보고
파이프라인이 실행된다
좀 기다린 후 파이프라인이 정상적으로 성공한다면
이렇게 되는 것을 볼 수 있다.
'Spinnaker' 카테고리의 다른 글
Spinnaker Halyard Setup (0) | 2017.10.24 |
---|---|
Spinnaker Bake and Deploy Pipeline (0) | 2017.10.19 |
Spinnaker Quickstart 설치 (0) | 2017.10.19 |
Spinnaker란? (0) | 2017.10.19 |