1. jenkins > 새로운 Item

 

 

2. 아이템이름과 Freestyle project 선택 후 OK

 

 

 

 

 

 

3. 소스 코드 관리 > Credentials 추가

Kind : Username with password

Username : 깃 계정 아이디

Password : 깃 계정 비밀번호

입력 후 저장

 

 

 

4. 소스 코드 관리 > 깃 정보 입력

Git Repository  : 깃 주소 입력

Credentials : 위에서 만든 깃 계정 정보 선택

Branch Specifier : 빌드 할 브랜치 입력 (master, develop ...)

 

 

 

5. Gradle 설정 추가

Build Steps > Add Build Step > Invoke Gradle Script 추가

 

 

 

Invoke Gradle > Gradle Version 선택

Tasks > bootjar 입력

 

Gradle Version은 프로젝트 gradle 버전과 맞춰서 설정

Jenkins > Jenkins 관리 > Tools 에서 생성가능

 

Gradle > 고급 > 아래쪽 Build File 작성

ex) boot/build.gradle

 

 

 

6. Execute Shell 추가

/bin/sh -xe /app/boot/patch/patch.sh 입력 (경로는 쉘스크립트 있는 경로 맞게 수정)

java -jar app.jar 이렇게 쓰지않고 쉘 스크립트에 명령어를 한번에 정리해서 실행하려고 위처럼 작성

 

<쉘 스크립트 내용>

echo "start ..."
cd /var/jenkins_home/workspace/boot/projectName/build/libs
export BUILD_ID=dontKillMe
nohup java -jar projectName-1.0.jar --spring.profiles.active=dev >  /dev/null 2>&1 &
echo "end ..."

 

docker 로 jenkins 를 띄웠을 시 보통 /2에서 만든 젠킨스 아이템이름/깃 프로젝트 이름/build/libs 에 .jar 파일이 생성된다.

그게 아닐 경우 .jar 파일을 find / -name 프로젝트이름.jar 명령어로 경로를 찾으면 된다.

jar 파일 이름은 프로젝트이름-build.gradle 에 있는 version 이다.

ex) 프로젝트이름 : boot , version : 1.0 일시 jar 파일이름은 boot-1.0.jar

 

2번째줄 cd 뒤의 경로는 .jar 파일이 있는 경로를 적어주면 된다.

3번째줄은 jar 파일 실행 시 jenkins 로 빌드하면 백그라운드로 실행 안해주면 빌드가 안끝나고 무한 뱅글뱅글 돌기 때문에 적어준다.

4번째줄도 마찬가지로 백그라운드로 jar 파일 실행하기 위해 적어준다.

첫번째줄과 마지막줄은 그저 쉘 스크립트가 실행되는지 위한 확인용도다.

 

쉘 스크립트는 원하는 경로를 cd 로 이동후 vi patch.sh 써주면 쉘스크립트 파일을 생성할 수 있다.

 

7. 저장 후 실행

저장 후 빌드 > application.properties 에서 설정했던 포트로 접속해보면 사이트가 떠있는 것을 확인할 수 있다.

1. 아래 내용의 스크립트를 추가한다.

첫번째줄은 브라우저가 ie 일때만 사용자 정의 Worker 를 사용하려고 넣었다.

if(window.navigator.userAgent.toLowerCase().indexOf('trident') > -1 || window.navigator.userAgent.toLowerCase().indexOf('MSIE') > -1)
{
	var Worker = function ( scriptFile )
	{
		console.log('익스플로어 워커다');
		var self = this ;
		var __timer = null ;
		var __text = null ;
		var __fileContent = null ;
		var onmessage ;
	
		self.onerror = null ;
		self.onmessage = null ;

		// child has run itself and called for it's parent to be notified
		var postMessage = function( text )
		{
			if ( "function" == typeof self.onmessage )
			{
				return self.onmessage( { "data" : text } ) ;
			}
			return false ;
		} ;

		// Method that starts the threading
		self.postMessage = function( text )
		{
			__text = text ;
			__iterate() ;
			return true ;
		} ;

		var __iterate = function()
		{
			// Execute on a timer so we dont block (well as good as we can get in a single thread)
			__timer = setTimeout(__onIterate,1);
			return true ;
		} ;

		var __onIterate = function()
		{
			try
			{
				if ( "function" == typeof onmessage )
				{
					onmessage({ "data" : __text });
				}
				return true ;
			}
			catch( ex )
			{
				if ( "function" == typeof self.onerror )
				{
					return self.onerror( ex ) ;
				}
			}
			return false ;
		} ;


		self.terminate = function ()
		{
			clearTimeout( __timer ) ;
			return true ;
		} ;


		/* HTTP Request*/
		var getHTTPObject = function () 
		{
			var xmlhttp;
			try 
			{
				xmlhttp = new XMLHttpRequest();
			}
			catch (e) 
			{
				try 
				{
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (e) 
				{
					xmlhttp = false;
				}
			}
			return xmlhttp;
		}

		var http = getHTTPObject()
		http.open("GET", scriptFile, false)
		http.send(null);

		if (http.readyState == 4) 
		{
			var strResponse = http.responseText;
			//var strResponse = http.responseXML;
			switch (http.status) 
			{
				case 404: // Page-not-found error
					alert('Error: Not Found. The requested function could not be found.');
					break;
				case 500: // Display results in a full window for server-side errors
					alert(strResponse);
					break;
				default:
					__fileContent = strResponse ;
					// IE functions will become delagates of the instance of Worker
					eval( __fileContent ) ;
					/*
					at this point we now have:
					a delagate "onmessage(event)"
					*/
					break;
			}
		}

		self.importScripts = function(src)
		{
			// hack time, this will import the script but not wait for it to load...
			var script = document.createElement("SCRIPT") ;
			script.src = src ;
			script.setAttribute( "type", "text/javascript" ) ;
			document.getElementsByTagName("HEAD")[0].appendChild(script)
			return true ;
		} ;

		return true ;
	} ;
}

 

2. jsp 나 html 파일에서 스크립트를 포함시켜준다.

<script type="text/javascript" src="/ie_worker.js"></script>

 

3. 이제 사용하던 worker 를 그대로 사용해준다.

worker = new Worker("my_worker.js");   //위의 worker 파일 아님
var sessionTimeout = $("#sessionTimeOut").val();
worker.postMessage(sessionTimeout);
			 
worker.onerror = function(e) {        
	//로직
}   

worker.onmessage = function(e) {  
	//로직
}

깃랩이나 깃허브에 올라가있는 프로젝트 로컬에 다운로드

cmd 창 이동 -> c:\>git clone http://gitlab.company.co.kr:34080/develop/project.git



 

 

깃랩이나 깃허브에 올라가있는 프로젝트중에 특정 버전으로 다운로드

cmd 창 이동 -> 우선 git clone 하고

git reset --hard 특정버전

ex ) git reset --hard 52342342sqee233244kklksdfsdfsdfe

특정버전은 아래 빨간 복사버튼에서 확인가능

 

 

 

로컬폴더 깃랩이나 깃허브에 올리기

cmd 창 이동 -> 업로드할 폴더로 cd 명령어 통해서 이동

1. git init

2. git status

3. git add .

4. git commit -m "커밋메세지"

5. git remote remove

6. git remote add origin "깃허브주소"

7. git remote -v (깃허브주소 확인용도)

8. git push -u origin master --force (master까지 입력하면 안될때도 있어서 --force 붙임) (master 는 branch 이름/develop이어도 된다.)

AMI - Amazon Machine Images

 

기존에 만들어놓은 인스턴스를 [이미지화] 해서 이미지로 만들어 놓고 그 이미지로 인스턴스를 만들면 만들어놓은 환경과 동일하게 인스턴스를 만들 수 있다.

- 만들어놓은 폴더나 파일 그대로 사용 가능

 

인스턴스 > 인스턴스 선택 > 작업 > 이미지 템플릿 > 이미지 생성


 

이미지 이름 입력, 다 기본값으로 선택 후 이미지 생성


 

이미지 > AMI 에 생성 완료


 

이후 인스턴스 생성 시 내 AMI 에서 내가만든 AMI로 인스턴스를 띄울 수 있다.

+ Recent posts