====== Jenkins ======
* description : jenkins 관련 내용 기술
* author : 도봉산핵주먹
* email : hylee@repia.com
* lastupdate : 2020-06-10
===== Jenkins =====
==== Jenkins란? ====
* 젠킨스(Jenkins)는 소프트웨어 개발 시 지속적 통합(CI : continuous integration) 서비스를 제공하는 툴이다. \\
* 다수의 개발자들이 하나의 프로그램을 개발할 때 버전 충돌을 방지하기 위해 각자 작업한 내용을 공유 영역에 있는 Git등의 저장소에 빈번히 업로드함으로써 지속적 통합이 가능하도록 해 준다. \\
* 젠킨스는 오라클과의 분쟁 이후 허드슨으로부터 분기되었다. \\
* [[https://onlywis.tistory.com/9|CI/CD]] 도구 플러그인으로 정적분석도구(SpotBugs, ...)를 추가할 수 있음
> 출처 \\
* [[https://ko.wikipedia.org/wiki/젠킨스|위키백과]] \\
===== 설치 =====
==== 1. 다운로드 ====
[[https://jenkins.io/download/|Jenkins download]] \\
아래 표시된 ''Past Releases'' 로 들어갑니다. \\
제일 높은 버전을 받으면 됩니다. \\
Tip : ex) 2.50, 2.100 이 있으면 2.100이 최신입니다. (.뒤에 숫자가 높은게 최신)\\
Tip : jenkins는 2.54버전 부터 자바 8을 사용해야 합니다.\\
{{:wiki:third_party:jenkins:down_page.png?direct&200|}} \\
==== 2. 구동 및 화면 띄우기 ====
.sh 파일을 만들어줍니다.. \\
아래 code에 보면 알다싶이 #{jenkins 경로}/log 폴더를 만들어줘야 합니다.
#jenkins.sh
#!/bin/bash
JAVA_HOME=#{java 경로}
HTTP_PORT=9090
JENKINS_HOME=#{jenkins 경로}
export JAVA_HOME HTTP_PORT
nohup $JAVA_HOME/bin/java -jar $JENKINS_HOME/jenkins.war --httpPort=$HTTP_PORT --sessionTimeout=120 -XX:+AggressiveOpts >> ./logs/jenkins.log 2>&1 &
\\
jenkins.sh 파일을 만든 후 port 방화벽을 풀고 실행해 줍니다.
[search@localhost jenkins]$ sudo firewall-cmd --zone=public --add-port=9090/tcp --permanent
success
[search@localhost jenkins]$ sudo firewall-cmd --reload
success
[search@localhost jenkins]$ sudo firewall-cmd --list-ports
22/tcp 3306/tcp 8080/tcp 80/tcp 9090/tcp
[search@localhost jenkins]$ ./jenkins.sh
\\
그럼 아래와 같이 나옵니다.
{{:wiki:third_party:jenkins:login_page.png?direct&400|}}
==== 3. 로그인 ====
위 화면을 보면 ''/home/search/.jenkins/secrets/initialAdminPassword'' 이런 문구가 있습니다. \\
이건 search 계정으로 ./jenkins.sh를 실행해서 사용자가 search가 된거고 그 경로안에 패스워드가 있다는 겁입니다. \\
vi /home/search/.jenkins/secrets/initialAdminPassword
이렇게 치면 한줄로된 문자열이있는데 그걸 복사해서 Administrator password에 붙여넣고 로그인하면 됩니다.
\\
{{:wiki:third_party:jenkins:plugin_suggest.png?direct&400|}}\\
플러그인 설치화면이 나옵니다. \\
그럼 ''suggested''를 클릭하면 플러그인을 설치합니다. \\
Tip : 플러그인 설치화면에서 다 false이 되면 jenkins 낮은 버전을 받은것입니다.\\
==== 4. 설정 (svn + war배포)====
{{:wiki:third_party:jenkins:main.png?direct&400|}}\\
로그인을 한다음 왼쪽 위에 새로운 Item을 클릭 합니다.\\
\\
{{:wiki:third_party:jenkins:new_item.png?direct&600|}}\\
''Item name''을 입력한 다음 ''Freesyle project''를 클릭합니다.\\
{{:wiki:third_party:jenkins:sourc_code.png?direct&600|}}\\
그림과 같이 네모 설정해주면 됩니다.\\
Credentials은 계정정보이며 Add를 클릭해서 계정정보를 입력해주면 됩니다.\\
Tip : ''Repository URL''은 현재 우리 Apps에 대한 Url (eclips에 설정되어 있는 Url)이며 꼭 ''/trunk''까지 지정해야 됩니다.\\
\\
\\
여기까지 저장하고 Jenkins > Jenkins 관리 > Global Tool Configuration 로 들어가서 maven 설정을 먼저해줍니다.\\
{{:wiki:third_party:jenkins:setting_maven.png?direct&600|}}\\
\\
그 후에 다시 설정하고 있던 Item으로 돌아 갑니다. \\
{{:wiki:third_party:jenkins:setting_maven2.png?direct&600|}}\\
Maven Version : 방금 위에서 설정한 값이 나오면 선택해 주면 됩니다. \\
Goals : clean install 을 입력해줍니다.\\
==== 5. 빌드 후 조치 ====
=== 5-1. jenkins 설치 서버내에 배포 ===
4.번까지 완료후에 아래 ''Add build step''을 클릭해서 ''Execute shell''을 클릭하면 Command가 나오는데 \\
이 셋팅은 jenkins를 설치한 서버에 .war를 풀어 배포를 하는 것이라면 추천합니다. \\
평소에 .war를 풀던 .sh 파일을 실행만 시키면 됩니다.\\
=== 5-2. jenkins 설치 서버외에 배포 ===
5.1과는 달리 jenkins서버말고 다른서버나 여러 서버를 설정해서 다발적으로 또는 효율적으로 쓰려면 \\
빌드 후 조치에서 Send build artifacts over SSH 를 선택해야 합니다.\\
Send build artifacts over SSH가 안보인다면 ''Publish Over SSH Plugin''를 설치해야 합니다.\\
Plugin이 설치가 됬다면 ''Jenkins > 환경설정''에 들어가서 맨 하단에 ''SSH Servers''가 생겼을 겁니다.\\
그럼 아래 사진과 같이 설정해 주면됩니다.(Apps 기준 설정)\\
{{:wiki:third_party:jenkins:ssh_servers.png?direct&600|}}\\
그 후에 다시 설정하고 있던 Item으로 돌아 갑니다. \\
{{:wiki:third_party:jenkins:Item_SSH_Servers.png?direct&600|}}\\
Remove prejix : 설정 안해주면 ROOT 경로에 ROOT/trunk/target/apps-1.0.0.war가 복사됩니다.\\
Exec command : 설정한 대로 빌드하고 끝나면 bash에 사용할 명령어를 쓰면 됩니다.\\
===== Tip =====
===== Troubleshooting =====
===== Ref =====
* [[https://myjamong.tistory.com/11|CentOS 7 Jenkins 설치 :: 마이자몽]]
* [[https://waspro.tistory.com/551|Jenkins 설치 가이드]]
* [[https://qjadud22.tistory.com/34|CentOS 6 Jenkins로 SVN + Spring Maven 프로젝트 자동 빌드 배포 셋팅]]
* [[https://heowc.tistory.com/77|CI - 젠킨스 원격지 배포하기(SSH)]]
* [[https://yookeun.github.io/tools/2018/04/14/jenkins-remote/|젠킨스(Jenkins)에서 원격(Remote)으로 배포하기]]
* [[https://midas123.tistory.com/230|젠킨스 빌드 도중 Cannot run program "mvn" error=2, No such file or directory]]
{{tag>도봉산핵주먹 jenkins}}