'Tool/Jenkins'에 해당하는 글 5건

Jenkins git rollback

Tool/Jenkins 2017. 2. 17. 00:34

Jenkins 에서 예전 빌드로 배포하는 방법을 좀 찾아봤다. 흔히 말하는 롤백.

배포되지 말아야 할 소스가 배포되었다거나, 잠시 이벤트성 수정이 들어갔다거나 할 경우 꼭 필요한 기능!

빌드 리스트 세부 메뉴에 Re-Build Now 라는 메뉴가 하나 더 있어서 그 당시 리비전으로 빌드/배포되면 차암~ 좋을거 같았는데... 없네...

Jenkins 에는 알아서 롤백해주는 머 그런건 아직 없는 듯...


하지만 수고+1 정도를 추가하면 가능하긴 하다. 바로 [SCM] - [Branch Specifier] 항목을 이용하면 된다.

Branch 를 지정할 경우 해당 Branch 의 최신 리비전을 가져오지만,

Tag 로 지정할 경우 해당 Tag 의 리비전을 가져오니, 롤백이 가능하다는 말쌈.


그리고 Git Tag Message 플러그인을 설치하면 슬랙 알림에 tag 메시지도 전할 수가 있다.

설치하고 [SCM] - [AdditionalBehaviours] - [Export git tag and message as environment variables] 를 선택하면 $GIT_TAG_MESSAGE 를 사용할 수 있다.



ps.

[SCM] 의 Tag 말고도 해당 프로젝트의 Build History 에서 임의로 Tag 를 달아 위 방식처럼 해당 리비전을 가져올 수도 있다.

[SCM] - [AdditionalBehaviours] - [Create a tag for every build] 에서 매 빌드마다 태그를 자동 생성할 수도 있다.

하지만 프로젝트가 여러개일 경우 복잡하고 번거로울 것 같다.

Git 에서 Tag 달아주는게 제일 무난할 듯!




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

Jenkins + Slack

Tool/Jenkins 2017. 2. 16. 01:04

Jenkins 에서 빌드 실패 / 성공에 관한 여러가지 알림 이벤트를 슬랙으로 받을 수 있다.



1. App Directory 에서 Jenkins CI 검색 -> 설치 -> 채널 선택

2. Jenkins 대시보드에서 Slack Notification Plugin 설치

3. 시스템 설정에서 팀 도메인 / 토큰 / 채널 입력

4. 해당 프로젝트 설정의 빌드 후 조치 추가(Post-build Actions) - [Slack Notifications] 에서 필요한 알림 이벤트 체크




기본 메시지는 [프로젝트 네임] - [빌드 넘버] 정도로 단순하다.

[고급] - [Include Custom Message] 를 선택하여 원하는 변수로 메시지를 작성할 수도 있다. (환경 변수 참조)


Build #$BUILD_NUMBER 
Branch $GIT_BRANCH 
submitted $GIT_COMMITTER_NAME
cs


작성된 문구는 기본 문구 아래에 더해진다.

하지만 난 정작 필요한 마지막 커밋 메시지가 없어서 패스.




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

Jenkins build

Tool/Jenkins 2017. 2. 15. 23:19

Freestyle project 의 UI 에서 설정한 빌드/배포 등을 pipeline script 로도 작성할 수 있다.

또한 Multibranch Pipeline item 을 사용하여 Jenkinsfile 과 함께 작성할 수도 있다.


하지만 결론부터 얘기하자면... 난 script 로 작성하는 것을 실패했다 ㅜ

빌드까지는 문제 없었지만 Publish Over SSH 플러그인을 사용하여 배포하는 부분을 script 로 변환하는데 실패했다. 내공 부족 ㅜ

일단 Freestyle project UI 만으로 Product/Development 코드 분리와 모듈별 web/api/cms 부분을 빌드하는데 별 문제가 없으니 일단은 그냥 진행하는걸로...;



Build


기존에는 Product/Development 코드를 build.gradle 에 변수 값을(dev/prod)를 바꿔가며 해당 properties 를 가져와 배포했었다.

이부분의 변수를 gradle task 에서 전달하는 것으로 변경했다.


- From build.gradle


environment = 'dev'
//environment = 'prod'
cs


- To build.gradle


def deployType
if (project.hasProperty("deployTypeParam")) {
    deployType = deployTypeParam
else {
    deployType = "dev"
}
environment = deployType
cs


이러면 빌드 파라미터에 deployTypeParam 가 있다면 그 값을 적용할 것이고, 없다면 dev 값으로 설정 파일들을 가져올 것이다.

그래고 product 서버에 배포할 때는 [Build] - [Tasks] 에 다음과 같이 설정한다. (ex. web module)


:web:build -PdeployTypeParam='prod'



Configuration


그리고 Jenkins 기본 설정으로 포트와 타임존을 변경했다.

포트는 기본 8080 을 iptables 에서 80 으로 변경했고,

타임존은 /etc/sysconfig/jenkins 파일에 다음 줄을 추가했다.


JENKINS_JAVA_OPTIONS="-Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Seoul"
cs




WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

Freestyle project

Tool/Jenkins 2017. 2. 13. 23:40

Jenkins 설치를 진행하여 Jenkins 웹UI에 접속할 수 있었다. 영어와 한글이 혼합되어 있는 이 모습이 썩 맘에 들진 않는다;

암튼 다음 할 일은 Pipeline 을 생성하고 설정하여 우리가 하려는 CI 기능을 동작시키는 것이다.

Pipeline 이란 것은 빌드나 테스트, 배포 등의 단계를 구성하는 하나의 프로젝트 정도로 봐도 될 것 같다.


Pipeline 을 정의하는 방법은 두가지가 있다.

- 웹UI 를 이용하는 방법

- Jenkinsfile 을 이용하는 방법


어느 것을 사용하던 동작은 동일하다.

웹UI를 따라서 선택하고 입력한 것이나, Jenkinsfile 에 DSL 코드로 작성하는 것이나 동일한 동작을 하게 할 수 있다.

SCM 을 이용하여 협업 등을 이유로 메뉴얼에서는 Jenkinsfile 의 사용을 추천하고 있다.


그러나...


나는 freestyle project 를 먼저 사용해 봤다.

단계별 어떤 옵션들이 있는지 정도는 알아야 Pipeline 을 작성할게 아닌가 ㅜ



* Jenkins 에게 원하는 목표

- Git 소스 체크아웃

- 소스 빌드(gradle)

- 빌드 파일 원격 서버로 업로드



기본 설정


1. 플러그인 설치

[Jenkins 관리] - [플러그인 관리]

- git plugin

- gradle plugin

- publish over ssh 


2. ssh 서버 설정

[Jenkins 관리] - [시스템 설정] 에서 배포할 타겟 서버를 구성한다. (굳이 ssh 를 이용할 필요가 없다면 ftp 플러그인을 받아 설정하면 된다.)

- hostname / username 과 [고급]에서 private Key 입력

- Test Configuration 으로 접속 테스트


3. gradle 설정

[Jenkins 관리] - [Global Tool Configuration]

- Install automatically > 체크 원하는 버전 선택



freestyle project



1. freestyle project 생성

[새로운 Item] - [freestyle project]


2. 소스 코드 관리

- Git Repository URL 정보 입력


3. Build

- Build : Invoke Gradle 선택


4. 빌드 후 조치

- Sned build artifacts over SSH 선택

- SSH Server Name : [시스템 설정]에서 구성한 타겟 서버 선택

- Source files : **/build/libs/*.war

- Remove prefix : /build/libs/

- Exec command :


sudo service tomcat8 stop
sudo cp -ap web1-1.0-SNAPSHOT.war /var/lib/tomcat8/webapps/ROOT.war
sudo service tomcat8 start
cs


5. Build Now

[Console Output] 에서 성공/실패 로그를 확인할 수 있다.


Started by user LeeHongKyu
Building in workspace /var/lib/jenkins/workspace/freestyle project
 > git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
 > git config remote.origin.url https://github.com/ggamzzak/javatest.git # timeout=10
Fetching upstream changes from https://github.com/ggamzzak/javatest.git
 > git --version # timeout=10
 > git fetch --tags --progress https://github.com/ggamzzak/javatest.git +refs/heads/*:refs/remotes/origin/*
 > git rev-parse refs/remotes/origin/master^{commit} # timeout=10
 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 7599f414e9beb11d4d1350e571b83b2290557465 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f 7599f414e9beb11d4d1350e571b83b2290557465
 > git rev-list 7599f414e9beb11d4d1350e571b83b2290557465 # timeout=10
[Gradle] - Launching build.
[freestyle project] $ /var/lib/jenkins/tools/hudson.plugins.gradle.GradleInstallation/gradle33/bin/gradle
Starting a Gradle Daemon (subsequent builds will be faster)
:help
 
Welcome to Gradle 3.3.
 
To run a build, run gradle <task> ...
 
To see a list of available tasks, run gradle tasks
 
To see a list of command-line options, run gradle --help
 
To see more detail about a task, run gradle help --task <task>
 
BUILD SUCCESSFUL
 
Total time: 12.231 secs
Build step 'Invoke Gradle script' changed build result to SUCCESS
SSH: Connecting from host [ip-172-31-27-119]
SSH: Connecting with configuration [honghost1] ...
SSH: EXEC: STDOUT/STDERR from command [sudo service tomcat8 stop
sudo cp -ap web1-1.0-SNAPSHOT.war /var/lib/tomcat8/webapps/ROOT.war
sudo service tomcat8 start
] ...
Stopping tomcat8: [  OK  ]
Starting tomcat8: [  OK  ]
SSH: EXEC: completed after 2,003 ms
SSH: Disconnecting configuration [honghost1] ...
SSH: Transferred 1 file(s)
Finished: SUCCESS
cs


중간에 BUILD SUCCESSFUL 로 빌드가 성공한 것을 확인할 수 있고, 제일 마지막의 SUCCESS 로 모든 과정이 성공한 것을 확인할 수 있다.

타겟 서버에 접속해서 새로운 빌드 파일로 배포가 되었는지 확인한다.

지금까지 아주 기본적인 설정만을 선택하여 Git 소스 체크아웃 받고 gradle 로 소스를 빌드하고 타겟 서버에 빌드 파일을 업로드한 것을 확인할 수 있다.


WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

Jenkins install

Tool/Jenkins 2017. 2. 9. 23:09

프로젝트의 자동 빌드 및 배포를 목적으로 CI/CD (Continuous Integration/Deployment) 를 적용하기로 했다.

CI tool 중 가장 많이들 사용하는 jenkins 와 AWS 에 최적화 된 우리에게 적합한 CodeDeploy 를 테스트하고 비교해 보기로 했다.


[필수 요구 조건]


- 하나의 VCS 에서 모듈 별로 배포가 가능해야 한다.

- 운영/개발 서버별로 배포가 가능해야 한다.

- 배포시 특정 서버를 선택할 수도 있어야 한다.


현재는 로컬에서 빌드하고 S3에 업로드 하고 각 서버들에서 배치파일을 실행하여 배포가 되는 식이다.

이것을 VCS 에서 특정 모듈을 특정 서버로 자동 배포하는 방식으로 바꾸려는 것이다.




1. Jenkins 란


Jenkins 는 Java 로 제작된 CI 오픈소스 툴이다.

소프트웨어 빌드, 테스트 및 배포와 같은 모든 종류의 작업을 자동화하는 데 사용할 수 있다.



2. 설치 전 요구사항


- Java 8 (최소 7)

- 1GB+ 메모리 (최소256M)

- 50GB+ (최소1G)



3. 다운로드 / 설치


Jenkins 는 Docker 로도 설치할 수 있고, Tomcat 에 서블릿으로도 설치할 수 있고, 서버에 독립형(Standalone) 으로도 설치가 가능하다.

난 설정이 번거롭긴 하지만 깔끔하게 독립형으로 진행해 본다.


- Redhat / Centos


$ wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo
$ rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
$ yum update
$ yum install jenkins
cs


- Debian / Ubuntu


$ wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
$ sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
$ apt-get update
$ apt-get install jenkins
cs


나머지 OS 는 사이트 document 참고 - https://jenkins.io/doc/book/getting-started/installing/



4. 환경 설정


/etc/sysconfig/jenkins 설정 파일에서 필요한 부분을 확인/수정한다.

(JENKINS_HOME, JENKINS_USER, HTTP_PORT 등)


HTTP_PORT 를 수정하여 브라우저 접속 포트를 변경할 수 있다.(기본 8080)



5. 데몬 실행


$ service jenkins start
cs



6. Jenkins 사이트 설정


jenkins 데몬을 실행하고 브라우저로 해당 서버에 접속하면 (http://ip or domain:8080/) jenkins 가 잠겨 있는데,

서버의 특정 위치(예:/var/lib/jenkins/secrets/initialAdminPassword) 에 생성된 password 를 복붙하여 다음 화면으로 이동한다.


- Customize Jenkins

다음으로 플러그 인을 설치하는 화면인데 필요한 플러그인을 모른다면, 일단 기본(추천) 하는 플러그인만 설치한다.

이렇게나 많은 플러그인 들이 기본으로...



- Create First Admin User

다음은 jenkins 를 관리할 관리자 계정을 생성하면 관리자 화면으로 이동하게 되고 설치를 일단락한다.





WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,