이식하는게 젤 힘들 것 같은데 ...............일단은 controller 부분만 세팅하면 된다고 하셨으니깐은....
보안그룹 포트 열어둔거 필요없는거 있는지 확인하고 지우는게 좋을듯함(8080 안 쓰는데 넣어뒀다거나 그런..)
(원본) https://github.com/dev-library/swu_prj_application.git
일단 깃허브 포크부터 떠줬다
이미 AWS쪽 보안 설정은 다 끝내줬는데, 이것도 나중에 문서화해서 정리해둬야겠다...
사진 다 안 찍어놓으면 나중에 다시 구축해야 할지도 . . 😑
저번 글에서 SSH 접속 포트를 22가 아닌 51228로 바꿨고,
웹훅말고 그 뭐지.. publish over ssh로 하는 배포에서 포트번호를 일일이 지정해줬어야 했는데
GPT한테 물어보니까 아예 통으로 바꾸는 방법이 있다길래 이 부분부터 작성해보려고 한다.
# Jenkins Pipeline Script Example - use sshPublisher
sshPublisher(
publishers: [
sshPublisherDesc(
configName: "MyPrivateInstance",
transfers: [
sshTransfer(
sourceFiles: "target/*.jar",
removePrefix: "target/",
remoteDirectory: "/home/ubuntu/app",
execCommand: "nohup java -jar /home/ubuntu/app/myapp.jar > /dev/null 2>&1 &"
)
],
usePromotionTimestamp: false,
useWorkspaceInPromotion: false,
verbose: true
)
]
)
오늘부턴 Jenkins의 파이프라인 스크립트를 사용할건데, SSH 단계에서 이런 식으로 포트를 명시하면 된다고 한다.
Jenkins 파이프라인 or 수동으로 Private 인스턴스에 접근한 후 GitHub에서 프로젝트를 클론하고 빌드하면 된다.
근데 아마 Controller내부포트같은거 변경해줘야 해서 fork로 긁어와서 수정 후 빌드하면 될듯함.
Properties 파일을 찾는다
DB 인스턴스에서 설정해줬던 대로 계정명과 비번을 입력해준다.
Jenkins측 Pipeline 설정
CI/CD 스크립트로 진행해보기 < 일단은 이걸 기준으로 진행했음
빌드하기 위해 Gradle를 설정해주자.
대시보드-Jenkins관리-Jenkins Agent를 설치해주자.
SSH Over Publish에서 세팅한 적이 있지만 그건 그 옵션에서만 적용되는 비밀키이기 때문에
Pipeline에서 사용하기 위한 목적으로 Jenkins관리-Credentials에서 어떤 비공개키를 쓸 것인지 지정해줘야 한다.
해당 경로로 이동해서, Add Credentials를 클릭해주자.
Jenkins Instance에서 생성했던 키를 입력해준다.
어플리케이션 이름이 헷갈려서 직접 인스턴스에 접속해서 빌드해보려고 보니까 gradlew실행이 안 먹길래
찾아보니 gradle을 설치해줘야 한다고 한다. (근데 이전 실습에서는 없어도 됐었던 것 같은데 ...)
sudo apt install gradle
gradle -v
설치해주자.
이렇게 권한 오류가 뜨는데 실행 권한을 안 줘서 그런다.
`chomod +x`로 권한을 추가해준 뒤에 다시 명령을 실행하면 잘 작동한다.
빌드 중에 이런 에러가 떴는데 메시지를 확인해보니까 javax.annotation 라이브러리가 클래스 경로에 없기 때문에 발생하는 문제라고 한다.
Gradle을 사용한 빌드를 진행하고 있으므로, build.gradle 파일에 javax.annotation 라이브러리를 추가하면 된다.
수정해준 다음에는 `./gradlew clean build`를 통해 다시 빌드를 진행해주자.
GPT한테 물어보기로 했는데도 동일한 결과가 발생했다 ㅎ...
내일 와서 볼 것 :
javax.annotation 라이브러리 외에도 추가적인 jakarta.annotation 라이브러리가 필요할 수 있습니다. 이를 build.gradle 파일에 추가해보세요.
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-security'
testImplementation 'org.springframework.security:spring-security-test'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-web-services'
implementation 'org.springframework.kafka:spring-kafka'
testImplementation 'org.projectlombok:lombok:1.18.28'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testImplementation 'org.springframework.kafka:spring-kafka-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
implementation 'com.h2database:h2'
implementation 'com.querydsl:querydsl-jpa:5.1.0:jakarta'
annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
annotationProcessor "jakarta.annotation:jakarta.annotation-api"
annotationProcessor "jakarta.persistence:jakarta.persistence-api"
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.2.5'
implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect:3.3.0'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'
implementation 'org.springframework.session:spring-session-jdbc'
implementation 'io.jsonwebtoken:jjwt:0.9.1'
implementation 'javax.xml.bind:jaxb-api:2.3.1'
// 추가된 javax.annotation 의존성
implementation 'javax.annotation:javax.annotation-api:1.3.2'
implementation 'jakarta.annotation:jakarta.annotation-api:2.0.0'
}
./gradlew clean
./gradlew --refresh-dependencies build
./gradlew wrapper --gradle-version <최신 버전>
./gradlew clean build
'🌥️Cloud Study🌥️ > AWS' 카테고리의 다른 글
[ AWS ] 파이프라인을 이용한 무중단 배포 (0) | 2024.07.23 |
---|---|
[ AWS ] 아틸러리를 이용한 부하 테스트 및 부하 분산 확인(I/O bound) (1) | 2024.07.23 |
[ AWS Terraform ] Terraform 코드 실행 후 할 일 (0) | 2024.07.22 |
[ AWS-Terraform ] 테라폼을 이용한 아키텍처 구축 (0) | 2024.07.18 |
[ AWS ] 보안그룹-인바운드 규칙 편집, 개별 인스턴스 설정 (0) | 2024.07.16 |