YT10‐GitHub Action - zhamri/CSC584-Enterprise_Programming GitHub Wiki
1. Create SSH key for GitHub Actions
On your own machine, generate a deployment key:
ssh-keygen -t ed25519 -C "github-actions-deploy" -f github_actions_deploy_key
(best practices)
ssh-keygen -t ed25519 -C "github-actions-deploy" -f ~/.ssh/github_actions_deploy_key
This gives:
- github_actions_deploy_key
- github_actions_deploy_key.pub
| File | Purpose |
|---|---|
github_actions_deploy_key |
🔐 Private key → put in GitHub Secrets |
github_actions_deploy_key.pub |
🔓 Public key → put in server (authorized_keys) |
Add the public key to your Droplet:
ssh-copy-id -i github_actions_deploy_key.pub root@YOUR_SERVER_IP
Or manually append it to:
~/.ssh/authorized_keys
2. Logging into the server to check the key
% ssh -i ./github_actions_deploy_key 'root@YOUR_SERVER_IP'
3. Add GitHub repository secrets
In GitHub repo:
Settings → Secrets and variables → Actions
Create these secrets:
- DO_HOST = your droplet IP
- DO_USER = root or deploy user
- DO_SSH_KEY = contents of github_actions_deploy_key
- DO_PORT = 22
4. Create the GitHub Actions workflow
Create this file:
.github/workflows/deploy.yml
Then paste:
name: Build and Deploy JSP Servlet App
on:
push:
branches:
- mydeploy
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v4
- name: Set up Java
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: '21'
cache: maven
- name: Build WAR with Maven
run: mvn clean package -DskipTests
- name: Start SSH agent
uses: webfactory/[email protected]
with:
ssh-private-key: ${{ secrets.DO_SSH_KEY }}
- name: Add server to known_hosts
run: |
mkdir -p ~/.ssh
ssh-keyscan -p ${{ secrets.DO_PORT }} ${{ secrets.DO_HOST }} >> ~/.ssh/known_hosts
- name: Upload WAR to server
run: |
scp -P ${{ secrets.DO_PORT }} target/ROOT.war \
${{ secrets.DO_USER }}@${{ secrets.DO_HOST }}:/tmp/ROOT.war
- name: Deploy on Tomcat server
run: |
ssh -p ${{ secrets.DO_PORT }} ${{ secrets.DO_USER }}@${{ secrets.DO_HOST }} << 'EOF'
sudo systemctl stop tomcat10
sudo rm -rf /var/lib/tomcat10/webapps/ROOT
sudo rm -f /var/lib/tomcat10/webapps/ROOT.war
sudo mv /tmp/ROOT.war /var/lib/tomcat10/webapps/ROOT.war
sudo chown tomcat:tomcat /var/lib/tomcat10/webapps/ROOT.war || true
sudo systemctl start tomcat10
EOF
This workflow:
- triggers on
pushto main - builds your app with Maven
- uploads the
WARvia scp - deploys it to Tomcat over SSH