Jenkins
Jenkins는 소프트웨어 개발 시 CI/CD(Continuous Integration/Continuous Delivery) 파이프라인을 자동화하는 오픈 소스 도구입니다. 주로 개발자가 코드를 커밋할 때마다 자동으로 빌드하고 테스트하며, 배포 작업까지 관리해주는 역할을 합니다. Jenkins는 다양한 플러그인을 통해 빌드, 테스트, 배포 환경을 쉽게 확장할 수 있으며, 코드 변경 사항을 지속적으로 통합하고 이를 빠르게 배포하는 데 중요한 역할을 합니다.
$ wget https://get.jenkins.io/war-stable/2.462.3/jenkins.war
$ java -jar jenkins.war --httpPort=8765
- localhost:8765 접속
- 초기 로그인 정보 설정
- id : admin
- pw : 0000
To Do
1 | 접속 및 ec2 java 설치 |
2 | scp 로 jar, start.sh, stop.sh 복사 |
3 | ssh ec2 접속하여 start & stop 테스트 |
4 | jenkins 에서 jar 생성 및 jar, start & stop.sh 복사 |
5 | jenkins 에서 원격 ec2 stop.sh start.sh 테스트 |
1단계
$ sudo apt install openjdk-17-jre-headless
2단계
-start.sh
#!/bin/bash
# Start the application
nohup java \
-jar build/libs/greeting-0.1.0-SNAPSHOT.jar &
echo "> Application started with PID $!"
-stop.sh
#!/bin/bash
JAR_FILE_NAME=greeting-0.1.0-SNAPSHOT.jar
# Get the PID from the file
PID=$(pgrep -f $JAR_FILE_NAME)
if [ -z "$PID" ]; then
echo "> 현재구동중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -9 $PID"
kill -9 $PID
echo "> 실행중인 애플리케이션을 종료하고 있습니다..."
sleep 10
fi
$ scp -i ~/key/samdulko.pem build/libs/greeting-0.0.1-SNAPSHOT.jar ubuntu@3.34.199.0:/home/ub
untu/app/
$ scp -i ~/key/samdulko.pem start.sh ubuntu@3.34.199.0:/home/ubuntu/app/
$ scp -i ~/key/samdulko.pem stop.sh ubuntu@3.34.199.0:/home/ubuntu/app/
3단계
$ ./start.sh
$ ./stop.sh
4단계, 5단계

도커로 실행해보기
-Dockerfile
FROM openjdk:17-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
-start.sh 수정
SERVER_NAME=greeting
SERVER_VER=0.1.1
DOCKER_ID=sooj1n
# 도커 컨테이너가 실행중인지 확인
if [ $(docker ps -q -f name=$SERVER_NAME) ]; then
# 실행 중인 컨테이너가 있을 경우, 컨테이너 종료
# 도커 컨테이너 삭제
echo "기존 도커 컨테이너의 실행을 종료합니다."
echo "기존 도커 컨테이너를 삭제합니다."
docker stop $SERVER_NAME; docker rm $SERVER_NAME
# 도커 이미지 삭제
echo "기존 도커 이미지를 삭제합니다."
docker rmi $DOCKER_ID/$SERVER_NAME:$SERVER_VER
fi
# 도커 이미지 빌드
echo "새로운 도커 이미지를 빌드 합니다."
docker build -t $DOCKER_ID/$SERVER_NAME:$SERVER_VER .
# 도커 컨테이너 실행
echo "새로운 도커 컨테이너를 실행합니다."
docker run -d -p 7070:8080 --name $SERVER_NAME $DOCKER_ID/$SERVER_NAME:$SERVER_VER
# 정상적으로 컨테이너가 동작을 하는지 검사
echo "도커 컨테이너의 상태를 검사합니다."
if [ $(docker inspect -f '{{.State.Running}}' $SERVER_NAME) = "true" ]; then
echo "컨테이너가 성공적으로 실행 중입니다."
else
echo "컨테이너 실행에 실패했습니다."
fi
$ ./gradlew clean bootJar
$ sudo docker build \
> --build-arg JAR_FILE=build/libs/\*.jar \
> -t sooj1n/greeting:0.1.0 .
$ sudo docker run --name g011 \
-p 8010:8080 \
-d sooj1n/greeting:0.1.0
$ docker push sooj1n/greeting:0.1.0
- sudo 없이 도커 실행
$ sudo usermod -aG docker $(whoami)
$ newgrp docker
rest
https://github.com/sooj1n/rest
GitHub - sooj1n/rest
Contribute to sooj1n/rest development by creating an account on GitHub.
github.com
$ mkdir ~/app/jsonserv
$ cd ~/app/jsonserv
$ npm install json-server
$ vi data.json
{
"person": [
{"id":1,"firstName":"John","lastName":"Doe"},
{"id":2,"firstName":"Jane","lastName":"Smith"},
{"id":3,"firstName":"Michael","lastName":"Johnson"},
{"id":4,"firstName":"Emily","lastName":"Brown"},
{"id":5,"firstName":"David","lastName":"Lee"},
{"id":6,"firstName":"Olivia","lastName":"Taylor"},
{"id":7,"firstName":"Daniel","lastName":"Wilson"},
{"id":8,"firstName":"Sophia","lastName":"Anderson"},
{"id":9,"firstName":"Matthew","lastName":"White"},
{"id":10,"firstName":"Ava","lastName":"Martinez"}
]
}
$ npx json-server data.json
-GET / POST / PUT / FETCH
$ curl -X GET http://localhost:3000/person
[
{
"id": "1",
"firstName": "John",
"lastName": "Doe"
},
{
"id": "2",
"firstName": "Jane",
"lastName": "Smith"
},
.
.
.
.
# 데이터 삭제
$ curl -X DELETE http://localhost:3000/person/1
{
"id": "1",
"firstName": "John",
"lastName": "Doe"
}%
# 결과
$ curl -X GET http://localhost:3000/person/1
Not Found%
# 데이터 추가
$ curl -X POST -d '{"firstName" : "M", "lastName":"GG"}' http://localhost:3000/person
{
"id": "281f",
"firstName": "M",
"lastName": "GG"
}%
# 데이터 업데이트
$ curl -X PUT -d '{"firstName" : "UPDATE M", "lastName"
:"UP GG"}' http://localhost:3000/person/281f
{
"firstName": "UPDATE M",
"lastName": "UP GG",
"id": "281f"
}%
# 결과
$ curl -X GET http://localhost:3000/person/281f
{
"firstName": "UPDATE M",
"lastName": "UP GG",
"id": "281f"
}%
$ curl -X FETCH ~~~~
새 프로젝트 생성


-Person.java
package shop.samdul.rest;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Person {
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
private long id;
private String firstName;
private String lastName;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
-PersonRepository.java
package shop.samdul.rest;
public class PersonRepository {
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;
@RepositoryRestResource(collectionResourceRel = "people", path="people")
public interface PersonRepository extends
PagingAndSortingRepository<Person, Long>, CrudRepository<Person, Long> {
}
# INSERT
$ curl -X POST -H "Content-Type:application/json" \
-d '{"firstName": "Frodo", "lastName": "Baggins"}' \
http://localhost:8080/people
# SELECT
$ curl -X GET http://localhost:8080/people/1
# DELETE
$ curl -X DELETE http://localhost:8080/people/1
# UPDATE
$ curl -X PUT -H "Content-Type:application/json" \
-d '{"firstName": "P Frodo", "lastName": "P Baggins"}' \
http://localhost:8080/people/2
$ curl -X PATCH -H "Content-Type:application/json" \
-d '{"firstName": "PATCH Frodo"}' \
http://localhost:8080/people/2
'playdata > daily' 카테고리의 다른 글
17주차 : Day 2 (10/29) (2) | 2024.10.29 |
---|---|
17주차 : Day 1 (10/28) (2) | 2024.10.28 |
12주차 : Day 5 (9/27) (1) | 2024.09.30 |
12주차 : Day 4 (9/26) (0) | 2024.09.30 |
12주차 : Day 3 (9/25) (1) | 2024.09.30 |