Home 배포 자동화
Post
Cancel

배포 자동화

배포 자동화

안쓰는 이미지를 지우는 명령어

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;
   }
}

image

환경변수로 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 명령 실행

SSH Remote Commands

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 저장하기

image

host : EC2 port

username : SSH username

key: 키페어는 .pem 파일을 .txt로 열어서 해당 내용을 copy한 후 붙여넣으면 된다.

☑️ EC2 인스턴스에 접속 할때 ssh -i ~ 명령어를 입력하고 나면 ubuntu@~~ 로 뜨는데
이메일 형식처럼 hello@gmail 하듯이 username@ 이라고 생각하면 된다.

This post is licensed under CC BY 4.0 by the author.