IT/WSL

docker compose - jenkins, github 연동

상짱 2024. 3. 31. 20:12
반응형

이전 포스팅에 nginx 설치 및 설정에 이어서 진행된 내용입니다.

docker compose - nginx 설치 및 설정 (tistory.com)

 

docker compose - nginx 설치 및 설정

이전 포스팅의 aws ec2 인스턴스 생성에 이어서 진행된 내용입니다. AWS EC2 인스턴스 생성 및 트러블 슈팅 (tistory.com) AWS EC2 인스턴스 생성 및 트러블 슈팅 1. EC2 인스턴스 생성 AWS 가입 후 무료 사용

sangjjang.tistory.com


- docker-compose.yml

#version: '2'
name: jenkins

services:
  jenkins:
    image: jenkins/jenkins
    container_name: jenkins
    environment:
      - TZ=Asia/Seoul
    ports:
      - 9090:8080
    volumes:
      - /dkr/jenkins/config:/var/jenkins_home
      - /dkr/pt-springboot/config:/pt-springboot/build #springboot build 파일 경로 설정
    user: root
    restart: always

 

docker compose up -d

 

앞에 포스팅(docker compose - nginx 설치 및 설정 (tistory.com))에서 nginx 설정으로 jenkins.test.com으로 접속할 수 있게 설정해 두었다.

Unlock Jenkins

 

- 초기 비밀번호

docker logs [컨테이너명]

docker logs jenkins

 

로그에서 초기 비밀번호가 나오게 된다.

또는 /var/jenkins_home/secrets/initialAdminPassword 파일을 열어보면 초기 비밀번호가 나온다.

비밀번호를 입력하고, [Continue] 클릭.

 

- plugin 설치

Customize Jenkins

 

Install suggested plugins - 자동으로 가장 많이 사용하는 것들로 설치된다.

Select plugins to install - 필요한 plugin만 선택해서 설치할 수 있다.

 

보통은 첫 번째(Install suggested plugins)로 많이 진행한다.

저는 필요한 것만 설치하고 싶어서 두 번째(Select plugins to install)로 진행했습니다.

 

Select plugins to install

 

[All | None | Suggested] 중에서 [None]을 클릭해서 선택된 내용을 지웁니다.

일단, 생각나는 것은 git, gradle, nodejs 정도 선택해서 설치를 진행합니다.

처음 설정에 plugin을 다 설치 못하더라도, 초기 설정이 끝나고 plugin을 관리할 수 있습니다.

git
gradle
nodeJS

 

선택 후 [Install]을 진행합니다.

 

plugin install

 

 

- 접속 계정

Create First Admin User

 

접속 계정에 대한 아이디, 비밀번호 입력하고 [Save and Continue] 클릭

 

Instance Configuration

 

Jenkins is ready!

 

여기까지 젠킨스 설치 끝.


- 필요 플러그인에 대해서..

git - github 연동

gradle - springboot 빌드

nodeJS - vue 빌드

publish over SSH - 원격 AP서버가 있다면, ssh 접속으로 빌드 후 해당 서버로 배포할 수 있다.

post build task - 빌드 완료 후 빌드 로그의 메시지를 통해서 스크립트를 실행할 수 있다.

 

- publish over SSH / post build task 추가 설치

jenkins 관리 > Plugins

 

필요한 플러그인을 선택하고 install을 한다.

 

- Git 연동을 위한 아이디/비번 등록

jenkins 관리 > Credentials

 

Add credentials 선택한다.

 

jenkins 관리 > Credentials > System > Global credentials

Username: 깃허브 아이디

Password: 깃허브 비밀번호

ID: 사용할 아이디

Description: 설명 내용

 

해당 정보를 입력한다.

 

- Gradle / nodeJS 설정

Jenkins 관리 > Tools

 

Gradle / NodeJs 영역이 보인다.

 

Gradle installations

 

NodeJS installations

 

해당 화면에서 Gradle installations / NodeJS installations에 Add Gradle / Add NodeJS를 눌러서 사용할 버전과 이름을 넣고 저장한다.

 

여기까지 내가 필요한 설정은 다 넣은 듯하다.

 

GitHub에서 소스를 받아야 되니, Git 아이디 등록.

그리고 빌드해야 되니, Gradle / Node 빌드 버전 등록.

 

기본 설정 끝.


 

- New 아이템 / 프로젝트 생성

New 아이템

 

item name - 본인이 원하는 프로젝트명으로 입력하면 된다.

그리고 Freestyle project 선택.

 

- 소스 코드 관리

일단 깃허브의 소스를 받아야 되니깐, Repository URL을 복사한다.

github repository URL

 

소스 코드 관리

 

Repository URL, Credentials를 선택하니, 접속 실패라고 뜬다.

 

- returned status code 128

구글링을 하면 많은 내용들이 있다. 하지만 명확한 답들은 안 보인다.

일단 명확히 확인되는 부분은 Repository가 public, private 문제로 파악이 되었다.

public repository 같은 경우는 아이디/비번으로 접속이 되지만, 

private repository 같은 경우는 access token을 생성해서 사용해야 된다.

 

- 해결방법

1. 깃허브 오른쪽 상단에 내 아이콘을 클릭해서, [Settings]를 클릭한다.

your profile - Settings

 

 

2. Settings화면이 열리고, 왼쪽 가장 하단 메뉴에 [Developer settings]를 선택한다.

your profile Developer settings

 

 

3. Personal access tokens - Tokens (classic)을 선택하고, 오른쪽 상단 [Generate new token]을 클릭한다.

Personal access tokens (classic)

 

4. New personal access token (classic)

New personal access token (classic)

 

- Note : 토큰 이름

- Expiration : 만료일 선택

- Select scopes : 토큰의 권한

토큰의 권한은 OAuth 앱에 대한 범위 - GitHub Docs에 명시되어 있다.

일단, repo 만 줘도 될듯해서, repo 선택하고 생성한다.

 

Personal access tokens (classic)

 

 

생성된 토큰을 복사하고, 다시 jenkins로 와서 비밀번호에 토큰을 넣어준다.

 

jenkins 관리 > Credentials

 

소스 코드 관리

연결이 되었다.

그리고 Branch를 확인하고,

 

- Build Steps

Build Steps

 

springboot gradle 프로젝트 소스이니, [Invoke Gradle script] 선택한다.

 

Build Steps - Invoke Gradle script

- Gradle Version : 앞에서 설정한 gradle을 선택

- Tasks : bootJar 

jar 배포 파일을 만들거니, bootJar

 

- 빌드 후 조치

빌드 후 조치

 

빌드가 성공하면, docker의 volume을 잡아둔, 위치로 복사한다.

여기서 알아야 되는 것은,

jenkins 빌드 경로이다.

/var/jenkins_home/workspace/[jenkins_item명]가 기본 경로가 된다.

build/libs라고 하면 절대경로는 /var/jenkins_home/workspace/[jenkins_item명]/build/libs 가 되는 것이다.

 

이제 저장하고 빌드 실행.

아...........................................................

AWS EC2인스턴스에서 무료 티어일 경우에, 빌드가 성능이 안된다. ㅎ

엄청 느려서, 콘솔 접속도 안 되는 상황. ㅎ


급히, 포스팅 검증 겸 로컬 WSL에 nginx, jenkins 설치 및 설정하고 계속 진행하기로 했다.

AWS 무료 티어 EC2는 웹서버용으로만 사용해야 할 듯하다.

 

jar 파일

 

빌드 후 조치에서 로컬에 배포파일이 떨어지게 했지만,

AWS EC2 인스턴스로 배포하는 것이 필요하다.


- SSH Server 설정

Jenkins 관리 > System

 

Publish over SSH 영역에서 하단에 SSH Servers에 추가 버튼을 클릭한다.

 

Jenkins 관리 > System > SSH Server

 

이름, 호스트아이피, 계정명을 넣고, pem 파일의 프라이빗 키값을 넣어준다.

그리고 jenkins Item - 구성으로 와서, 빌드 후 조치 부분에 추가한다.

 

빌드 후 조치 - Send build artifacts over SSH

 

Send build artifacts over SSH를 선택한다.

 

Send build artifacts over SSH

 

Source files, Remove prefix, Remote directory, Exec command를 입력한다.

Source files: 소스 파일들

Remove prefix: 삭제할 앞부분 영역?, 문자?

Remote directory: 원격 서버의 업로드할 디렉토리

Exec command: 업로드 후 원격 서버의 실행 명령어

 

그리고 빌드

 

빌드 결과

 

빌드 로그를 보면,  BUILD SUCCESSFUL 문자 매치과 되어서, 

복사 스크립트가 실행되었고,

SSH로 원격 서버 접속 후 파일 1개가 전송된 것으로 나온다.

 

- AWS EC2 인스턴스 서버

pt-web-server

 

pt-springboot-0.0.1-SNAPSHOT.jar 파일이 들어온 것을 볼 수 있다.

 

이상. 끝.

 

 

이렇게 많은 내용이 들어갈 줄 몰랐습니다.

수고하셨습니다.

반응형