Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- ChatGPT
- Connection Draining
- Cross-Zone Load Balancing
- hikari cp
- ReactAdmin
- Routing Policies
- 네트워크 io
- 자연변수
- 람다 캡쳐링
- 슬로우 쿼리
- reflection API
- 자바로그
- jpa
- querydsl-sql
- ContentCachingRequestWrapper
- 아파치 드루이드
- SSR #CSR
- 스프링
- oracle
- superset-oracle
- RequestBody로깅
- UNION 열
- 코딩삽질일기
- aws
- Duration-Based Cookie
- Route53
- CannotGetJdbcConnectionException
- Application-Based Cookie
- queryDsl #JPA #hibernate
- afterCompletion
Archives
- Today
- Total
Forest Gump?
github-action 을 이용한 cicd구축기 -1부 본문
CI ( Continuous Integration) CD ( Continous deply)
지속적인 통합과 지속적인 배포의 준말이다.
ec2 인스턴스를 만들고, jenkins 를 설치해 CI/CD 를 구축하려고 했다. 그런데!
찾아보다 보니 github Actions 이라는 도구가 새로 나왔다고 했다. 심지어 간편하다고 하다.
새로운건 빠르게 적용시켜보고 싶어서, 젠킨스 대신 사용해보려고 한다 .
각각의 용어의 명칭은 다음과 같다.
- Workflows: 작업 뭉치
- Events: 작업 뭉치 동작하는 이벤트, push, release, pull request, 스케줄, 등
- Jobs: 동시 수행 가능한 작업 단위
- Runners: Job 실행되는 곳. GitHub이 제공하는 가상 머신(Linux, macOS, Windows)
- Steps: 순서대로 실행되는 쉘 커맨드 또는 action
- Actions: 재사용할 수 있는 job의 step. 공유된 action은 GitHub Marketplace에서 구할 수 있음.
위 설정들을 바탕으로, .gradle/workflows에 git action 스크립트와 설정을 했다.
다음은 계속된 실패의 흔적..
name: jay-CiCD # workflow의 이름을 지정해준다.
on: # 작동 트리거로 설정할 부분을 작성하는 곳이다.
push: # 이 스크립트는 개발서버용 이므로 dev 브렌치에 push될 때 작동하도록 해두었다.
branches: [ master ]
# jobs에선 action의 단계(step)를 설정할 수 있다.
# 여러 개의 job을 사용할 수 있고, job끼리 서로 정보를 교환할 수도 있다.
Git action yml은 스크립트는 다음과 같다.
jobs:
build:
name: Build # job의 이름을 지정해 준다.
runs-on: ubuntu-latest # job을 실행할 환경을 정해준다.
steps:
- name: SSH Remote Commands
uses: appleboy/ssh-action@v0.1.8
# with라는 키워드로 Action에 값을 전달할 수 있다.
# 아까 설정했던 secrets를 사용해서 값을 가져오자.
with:
host: ${{ secrets.HOST }}
username: ${{ secrets.USERNAME }}
key: ${{ secrets.KEY }}
port: ${{ secrets.PORT }}
# ssh 연결이 아무리 늦어도 20초 정도면 된다.
timeout: 25s
# ssh 접속이 되면 실행할 스크립트
script: |
echo "#START"
cd home/ubuntu/service/jay
# 1
REPOSITORY=/home/ubuntu/service/jay
PROJECT_NAME=multi-source
# 2
cd $REPOSITORY/$PROJECT_NAME/
# 3
echo "> Git Pull"
git pull origin master
echo "> 프로젝트 Build 시작"
# 4
./gradlew build
echo "> step1 디렉토리로 이동"
cd $REPOSITORY
#echo "> Build 파일 복사"
# 5
#cp $REPOSITORY/$PROJECT_NAME/target/*.jar $REPOSITORY/
echo "> 현재 구동중인 애플리케이션 pid 확인"
# 6
CURRENT_PID=$(pgrep -f $PROJECT_NAME)
echo "현재 구동 중인 애플리케이션 pid: $CURRENT_PID"
# 7
if [ -z "$CURRENT_PID" ]; then
echo "> 현재 구동 중인 애플리케이션이 없으므로 종료하지 않습니다."
else
echo "> kill -15 $CURRENT_PID"
kill -15 $CURRENT_PID
sleep 5
fi
echo "> 새 애플리케이션 배포"
# 8
#JAR_NAME=$(ls -tr $REPOSITORY/ | grep jar | tail -n 1)
#echo "> JAR Name: $JAR_NAME"
# 9
nohup java -jar build/libs/multi-source-0.0.1-SNAPSHOT.jar &
자세한 내용은 2부에서 더 써봐야겠다.
Reference :