# Github Action

  • ์†Œํ”„ํŠธ์›จ์–ด workflow ์ž๋™ํ™” ๋„๊ตฌ
  1. Workflow : ์—ฌ๋Ÿฌ๊ฐœ์˜ Job๋กœ ๊ตฌ์„ฑ๋˜๋Š” ํ”„๋กœ์„ธ์Šค
  2. Event : Workflow๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ทœ์น™ (ํŠน์ •์‹œ๊ฐ„ ๋ฐ˜๋ณต)
  3. Job : ์—ฌ๋Ÿฌ Step์„ ๊ตฌ์„ฑํ•ด์„œ ์‹คํ–‰
  4. Step : action์„ ์‹คํ–‰ (ssh-action, scp-action ๋“ฑ)

# Repository์— Github Action ์ถ”๊ฐ€

  1. Github Repository > Actions > Java With Gradle > Configure
  2. root ํด๋”์—์„œ /.github/workflows/gradle.yml ์ƒ์„ฑ > Start commit (๊ธฐ๋ณธ ์ƒ์„ฑ์€ build๊นŒ์ง€ ๋จ)
  3. GitAction Flow:
  • JDK Setup > Build > Upload Jar(upload-artifact) > Kill Service(ssh-action) > Download Jar(download-artifact) > Upload File to Server (scp-action) > Run Jar (ssh-action)

  • JDK Setup

    - uses: actions/checkout@v2
    - name: Set up JDK 11
      uses: actions/setup-java@v2
      with:
        java-version: '11'
        distribution: 'adopt'
  • Build
    - name: Build with Gradle
      uses: gradle/gradle-build-action@4137be6a8bf7d7133955359dbd952c0ca73b1021
      with:
        arguments: build
  • Upload Jar(upload-artifact)
    - name: Upload Jar
      uses: actions/upload-artifact@v2
      with:
        name: spring-boot
        path: build/libs/spring-0.0.1-SNAPSHOT.jar
        retention-days: 1
    - run: |
        rm -f ~/.gradle/caches/modules-2/modules-2.lock
        rm -f ~/.gradle/caches/modules-2/gc.properties
      name: Cleanup Gradle Cache
  • Kill Service(ssh-action)
    - uses: appleboy/ssh-action@v0.1.4
      name: Kill Spring Boot Application
      with:
        host: ${{ secrets.SERV_HOST }}
        username: ${{ secrets.SERV_USERNAME }}
        password: ${{ secrets.SERV_KEY }}
        script: |
          if [ -e "pid.file" ]; then
            kill $(cat ./pid.file)
          fi
  • Download Jar(download-artifact)
      - name: Download Jar
        uses: actions/download-artifact@v2
        with:
          name: spring-boot
  • Upload File to Server (scp-action)
      - name: SCP Files
        uses: appleboy/scp-action@master
        with:
          host: ${{ secrets.SERV_HOST }}
          username: ${{ secrets.SERV_USERNAME }}
          password: ${{ secrets.SERV_KEY }}
          source: "spring-0.0.1-SNAPSHOT.jar"
          target: "build"
          rm: true
  • Run Jar (ssh-action)
      - uses: appleboy/ssh-action@v0.1.4
        name: Run the application
        with:
          host: ${{ secrets.SERV_HOST }}
          username: ${{ secrets.SERV_USERNAME }}
          password: ${{ secrets.SERV_KEY }}
          script: |
            nohup java -jar build/spring-0.0.1-SNAPSHOT.jar > app.out 2> app.err < /dev/null &
            nohup echo $! > ./pid.file &

  1. secrets.SERV_HOST ๋“ฑ์˜ ์„ค์ •์€ Github Repository > Settings > Secrets์—์„œ ์ถ”๊ฐ€ (workflow๋‚ด์— ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋ณด์•ˆ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Œ)

  2. Github Repository > Settings > Actions > ์•ก์…˜๊ด€๋ จ ์„ค์ • (Artifact and log retention์„ 7 days ์ •๋„๋กœ ์„ค์ •ํ•˜๋Š” ๋“ฑ )

# Server (Ubuntu) ์„ค์ •

  1. jdk ์„ค์น˜
sudo apt install openjdk-11-jdk
java -version
  1. mysql ์„ค์น˜
sudo apt-get install mysql-server
  1. ์™ธ๋ถ€์ ‘์† ๊ธฐ๋Šฅ ์„ค์ • (3306 port open)
sudo ufw allow mysql
  1. mysql ์‹คํ–‰
sudo systemctl start mysql
  1. ์„œ๋ฒ„ ์žฌ์‹œ์ž‘์‹œ ์ž๋™ ์‹คํ–‰
sudo systemctl enable mysql
  1. mysql ์ ‘์†
sudo /usr/bin/mysql -u root -p
  1. ๋น„๋ฐ€๋ฒˆํ˜ธ ์„ค์ •
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('1234');
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '1234';
  1. mysql schema ์ถ”๊ฐ€
CREATE DATABASE testdb;
  1. ์„œ๋ฒ„์— ์ธ๋ฐ”์šด๋“œ ํฌํŠธ ํ™œ์„ฑํ™”

  2. mysql ์™ธ๋ถ€์ ‘์† ์•ˆ๋  ๋•Œ

netstat -ntlp | grep mysqld
sudo /usr/bin/mysql -u root -p
mysql> show variables like '%bind%';
exit
cd /etc/mysql/mysql.conf.d
sudo vi mysqld.cnf
bind-address ๋ณ€๊ฒฝ 127.0.0.1 -> 0.0.0.0
systemctl restart mysql
systemctl status mysql
  1. mysql ์ œ๊ฑฐ
sudo apt-get remove --purge mysql
sudo apt-get remove --purge mysql*
dpkg -l | grep mysql

sudo apt-get remove --purge mysql-apt-config

sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean
Last Updated: 4/13/2025, 11:14:44 PM