배포 자동화
안쓰는 이미지를 지우는 명령어
1
sudo docker image prune -a
확인창 띄우지 않게 하기
1
sudo docker image prune -af
script 파일 만들기
1
touch deploy.sh
touch
: 파일을 생성하는 명령어
script 작성
1
2
3
4
5
6
7
8
9
10
11
@RequiredArgsConstructor
@RestController
public class PracController {
@Value("${hello.world}")
private String helloWorld;
@GetMapping("/hello")
public String getHelloWorld(){
return helloWorld;
}
}
환경변수로 HELLO WORLD를 작성했기 때문에 script에도 환경변수를 작성해준다.
-e로 환경변수를 붙여주면 된다.
1
nano deploy.sh
1
2
3
4
5
6
7
8
9
10
11
CONTAINER_NAME=cicd-container
sudo docker pull ghcr.io/haedal/cicd:latest
sudo docker rm -f $CONTAINER_NAME
sudo docker run -p 8080:8080 --name $CONTAINER_NAME \
-e HELLO_WORLD="HELLO WORLD" \
-d ghcr.io/haedal-uni/cicd:latest
sudo docker image prune -af
☑️ 스크립트를 작성할 때 공백이 없게 작성해야한다.
sudo docker rm -f $CONTAINER_NAME
→ 기존에 실행하던 container가 있으면 제거하고 다시 실행시키기 위해 작성
-f
: container를 삭제하기 전에 확인 프롬프트를 표시하지 않고 바로 삭제(강제 종료)
-p
: container와 host간의 port를 연결하는 옵션([호스트 포트]:[컨테이너 포트])
-d
를 넣으면 백그라운드로 돌리기 때문에 내가 console을 닫아도 안꺼진다.
-e
or --env
옵션을 넣어주면 환경변수로 설정된다.
\
를 넣고 엔터를 친후 작성하게 되면 한줄로 쓴 것으로 인식한다. (가독성을 높이기 위해 사용)
script 실행
1
sh deploy.sh
자동으로 배포시키기
push main
1
2
3
4
5
6
name: Run Gradle
on:
workflow_dispatch:
push:
branches:
- main
main으로 push할 때 자동으로 돌아가게 작성했다.
GitHub Actions에서 원격 SSH 명령 실행
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
name: remote ssh command
on: [push]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: executing remote ssh commands using password
uses: appleboy/ssh-action@v0.1.10
with:
host: $
username: $
password: $
port: $
script: whoami
아래와 같이 적용했다.
1
2
3
4
5
6
7
8
9
10
11
deploy:
needs: docker
runs-on: ubuntu-latest
steps:
- name: executing remote ssh commands using password
uses: appleboy/ssh-action@v0.1.10
with:
host: $``
username: $``
key: $``
script: sh deploy.sh
password 대신 key를 사용했다. → ec2 인스턴스 생성할 때 만든 키페어
*secrets는 GitHub Secrets(깃허브 시크릿)의 약어
script 파일 확인
1
cat deploy.sh
*이제 실제 프로젝트에서 properties에 있던 민감한 정보들을 script에 다 옮겨적으면 될 것 같다.
Actions secrets 저장하기
host : EC2 port
username : SSH username
key: 키페어는 .pem 파일을 .txt로 열어서 해당 내용을 copy한 후 붙여넣으면 된다.
☑️ EC2 인스턴스에 접속 할때 ssh -i ~ 명령어를 입력하고 나면 ubuntu@~~ 로 뜨는데
이메일 형식처럼 hello@gmail
하듯이 username@ 이라고 생각하면 된다.