Github Action
1️⃣ GitHub Actions kya hai (simple)
GitHub Actions = built-in CI/CD tool
Code push hote hi pipeline run
Build, test, scan, deploy automate
Jenkins ka cloud-native alternative (hosted runners available)
2️⃣ Core concepts (yeh yaad rakho)
✅ Workflow
Pipeline file
Location:
.github/workflows/ci.yml
✅ Event (Trigger)
Kab pipeline chale:
pushpull_requestworkflow_dispatch(manual)
✅ Job
Workflow ke andar ek unit of work
Example: build job, test job
✅ Runner
Machine jahan job chalega
GitHub hosted:
ubuntu-latestSelf-hosted: apna Linux server
✅ Step
Job ke andar commands / actions
✅ Action
Pre-built reusable step
Example:
actions/checkoutsetup-java
3️⃣ Linux par GitHub Actions setup (Self-hosted Runner)
Agar tum apne EC2 / Ubuntu server par runner chalana chahte ho:
Step 1: GitHub Repo → Settings → Actions → Runners → New self-hosted runner
Step 2: Linux commands (example Ubuntu)
# create folder
mkdir actions-runner && cd actions-runner
# download runner
curl -o actions-runner-linux-x64.tar.gz -L https://github.com/actions/runner/releases/latest/download/actions-runner-linux-x64.tar.gz
# extract
tar xzf actions-runner-linux-x64.tar.gz
# configure
./config.sh --url https://github.com/<your-username>/<repo-name> --token <TOKEN>
# start runner
./run.sh
Runner online ho jaayega ✅
Background service ke liye:
sudo ./svc.sh install
sudo ./svc.sh start
4️⃣ First CI pipeline (Java + Maven example)
name: CI Pipeline
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
- name: Build with Maven
run: mvn clean install
- name: Run Tests
run: mvn test
5️⃣ Artifacts upload/download
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: app-war
path: target/*.war
Download in next job:
deploy:
needs: build
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: app-war
6️⃣ Secrets & credentials (IMPORTANT)
Add secrets:
Repo → Settings → Secrets and variables → Actions → New secret
Use in workflow:
- name: Login
run: echo "Token is ${{ secrets.MY_TOKEN }}"
Never hardcode passwords ❌
7️⃣ Docker build & push example
name: Docker CI
on: [push]
jobs:
docker:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Login to DockerHub
run: echo "${{ secrets.DOCKER_PASS }}" | docker login -u "${{ secrets.DOCKER_USER }}" --password-stdin
- name: Build Image
run: docker build -t myapp:latest .
- name: Push Image
run: docker tag myapp:latest mydockerhub/myapp:latest
- run: docker push mydockerhub/myapp:latest
8️⃣ Matrix build (multiple versions test)
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
java: [17, 21]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: ${{ matrix.java }}
- run: mvn test
9️⃣ Caching (fast builds)
- name: Cache Maven
uses: actions/cache@v4
with:
path: ~/.m2
key: maven-${{ hashFiles('**/pom.xml') }}
🔟 Common mistakes
❌ Wrong YAML indentation
❌ Secrets hardcode
❌ Runner offline
❌ Missing checkout step
❌ Wrong branch trigger
1️⃣1️⃣ GitHub Actions vs Jenkins (short)
| GitHub Actions | Jenkins |
| Built-in | Need setup |
| YAML based | Groovy |
| Hosted runners | Self-hosted |
| Easy for GitHub | Powerful for enterprise |
1️⃣2️⃣ Real-world use cases
CI pipeline for Java/Node
Docker image build
Deploy to EC2
Terraform automation
Nightly cron jobs
PR quality checks
1️⃣3️⃣ Minimal template (copy-paste)
name: Basic CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: echo "CI running..."