-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
50f51b4
commit 52a7489
Showing
1 changed file
with
184 additions
and
119 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,183 +1,248 @@ | ||
# GitHub Actions ve CI/CD Yapısı Eğitim Materyali | ||
# 🚀 GitHub Actions ve CI/CD Projesi | ||
|
||
## 1. Giriş | ||
GitHub Actions, GitHub projelerinde sürekli entegrasyon (CI) ve sürekli teslimat (CD) işlemlerini otomatikleştirmek için kullanılan güçlü bir araçtır. Bu materyal, temel kavramları açıklayarak ve örneklerle destekleyerek size GitHub Actions ve CI/CD sürecini öğretmeyi amaçlamaktadır. | ||
Bu proje, GitHub Actions kullanarak bir Node.js uygulamasında CI/CD süreçlerinin nasıl uygulanacağını göstermek için hazırlanmıştır. Hem başlangıç seviyesi hem de ileri düzey kullanıcılar için kapsamlı bir kaynak sunmaktadır. | ||
|
||
--- | ||
|
||
## 2. GitHub Actions Nedir? | ||
GitHub Actions, kod depolarında otomasyon iş akışları oluşturmayı sağlayan bir GitHub özelliğidir. Bu iş akışları, **YAML** dosyaları ile tanımlanır ve bir dizi görevden oluşur. | ||
## 📑 İçindekiler | ||
|
||
### Temel Bileşenler | ||
- **Workflow (İş Akışı):** Belirli bir olaya yanıt veren otomasyon süreci. | ||
- **Event (Olay):** İş akışını tetikleyen olay (örneğin, `push`, `pull_request`). | ||
- **Job (İş):** Bir iş akışı içinde çalıştırılan görevler grubu. | ||
- **Step (Adım):** Bir iş içinde çalıştırılan bağımsız görev. | ||
- **Runner:** İşlerin çalıştığı sanal ortam. | ||
1. [Proje Hakkında](#-proje-hakkında) | ||
2. [GitHub Actions Temelleri](#-github-actions-temelleri) | ||
3. [Proje Yapısı](#-proje-yapısı) | ||
4. [Kurulum ve Kullanım](#-kurulum-ve-kullanım) | ||
5. [CI/CD Pipeline Detayları](#-cicd-pipeline-detayları) | ||
6. [Test ve Geliştirme](#-test-ve-geliştirme) | ||
7. [Best Practices](#-best-practices) | ||
8. [Troubleshooting](#-troubleshooting) | ||
|
||
--- | ||
## 🎯 Proje Hakkında | ||
|
||
## 3. CI/CD Nedir? | ||
Bu proje şunları içerir: | ||
- ✨ Basit bir Node.js web uygulaması | ||
- 🧪 Jest ile yazılmış test senaryoları | ||
- 🔄 GitHub Actions ile CI/CD pipeline | ||
- 🐳 Docker entegrasyonu | ||
|
||
### Sürekli Entegrasyon (CI) | ||
Sürekli entegrasyon, geliştiricilerin kodlarını sık sık birleştirerek otomatik testlerden geçirmesini sağlayan bir uygulamadır. Bu, hataların erken tespit edilmesine yardımcı olur. | ||
## 🛠 GitHub Actions Temelleri | ||
|
||
### Sürekli Teslimat (CD) | ||
Sürekli teslimat, kod değişikliklerinin otomatik olarak dağıtılmasını sağlar. Hedef, manuel müdahaleyi en aza indirerek hızlı ve güvenilir teslimatlar yapmaktır. | ||
|
||
--- | ||
|
||
## 4. GitHub Actions ile CI/CD Süreci Oluşturma | ||
|
||
### Adım 1: Depo Hazırlığı | ||
1. GitHub’da bir depo oluşturun veya mevcut bir depoyu kullanın. | ||
2. `main` veya `master` gibi bir ana dal belirleyin. | ||
|
||
### Adım 2: İş Akışı Dosyası Oluşturma | ||
1. Depo kök dizininde `.github/workflows` klasörünü oluşturun. | ||
2. İçinde bir YAML dosyası oluşturun, örneğin: `ci-cd.yml`. | ||
### Temel Kavramlar | ||
|
||
#### Workflow Yapısı | ||
```yaml | ||
name: CI/CD Pipeline | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
branches: [ main ] | ||
pull_request: | ||
branches: | ||
- main | ||
branches: [ main ] | ||
``` | ||
#### Events (Olaylar) | ||
```yaml | ||
on: | ||
push: # Push olayında tetiklen | ||
pull_request: # PR olayında tetiklen | ||
schedule: # Zamanlanmış çalışma | ||
- cron: '0 0 * * *' # Her gece yarısı | ||
``` | ||
#### Jobs ve Steps | ||
```yaml | ||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Kod Çek | ||
- name: Checkout code | ||
uses: actions/checkout@v3 | ||
``` | ||
- name: Node.js Kur | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: '16' | ||
|
||
- name: Bağımlılıkları Yükle | ||
run: npm install | ||
## 📂 Proje Yapısı | ||
```plaintext | ||
project-root/ | ||
├── .github/ | ||
│ └── workflows/ | ||
│ └── main.yml # 👈 CI/CD konfigürasyonu | ||
├── src/ | ||
│ └── index.js # 👈 Ana uygulama | ||
├── test/ | ||
│ └── index.test.js # 👈 Test dosyaları | ||
├── package.json # 👈 Proje bağımlılıkları | ||
└── README.md # 👈 Dokümantasyon | ||
``` | ||
|
||
- name: Test Çalıştır | ||
run: npm test | ||
## 🚀 Kurulum ve Kullanım | ||
|
||
- name: Üretim için Derle | ||
run: npm run build | ||
### Ön Gereksinimler | ||
- Node.js (v16+) 📦 | ||
- npm veya yarn 🧶 | ||
- Git 🔧 | ||
|
||
deploy: | ||
needs: build | ||
runs-on: ubuntu-latest | ||
### Adım Adım Kurulum | ||
|
||
steps: | ||
- name: Dağıtımı Gerçekleştir | ||
run: echo "Dağıtım yapıldı!" | ||
1. **Projeyi Klonlayın:** | ||
```bash | ||
git clone <repo-url> | ||
cd <proje-dizini> | ||
``` | ||
|
||
### Açıklama | ||
- **`on`:** İş akışını tetikleyen olayları tanımlar. | ||
- **`jobs`:** İş gruplarını belirtir. | ||
- **`build`:** Kodun derlenmesi ve test edilmesi. | ||
- **`deploy`:** Kodun dağıtılması. | ||
- **`steps`:** Her iş içinde yapılan görevler. | ||
2. **Bağımlılıkları Yükleyin:** | ||
```bash | ||
npm install | ||
# veya | ||
yarn install | ||
``` | ||
|
||
--- | ||
3. **Testleri Çalıştırın:** | ||
```bash | ||
npm test | ||
# veya | ||
yarn test | ||
``` | ||
|
||
## 5. Örnek: Node.js Uygulaması İçin CI/CD | ||
4. **Uygulamayı Başlatın:** | ||
```bash | ||
npm start | ||
# veya | ||
yarn start | ||
``` | ||
|
||
### Aşamalar | ||
1. **Kod Testi:** `npm test` ile test senaryolarını çalıştırma. | ||
2. **Kod Derleme:** `npm run build` ile üretime hazır kod oluşturma. | ||
3. **Dağıtım:** Üretim sunucusuna dağıtım. | ||
## 🔄 CI/CD Pipeline Detayları | ||
|
||
### 1. Build ve Test Aşaması | ||
```yaml | ||
name: Node.js CI/CD | ||
on: | ||
push: | ||
branches: | ||
- main | ||
jobs: | ||
test: | ||
build-and-test: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Kod Çek | ||
- name: Checkout code | ||
uses: actions/checkout@v3 | ||
|
||
- name: Node.js Kur | ||
- name: Setup Node.js | ||
uses: actions/setup-node@v3 | ||
with: | ||
node-version: '16' | ||
node-version: 16 | ||
|
||
- name: Bağımlılıkları Yükle | ||
- name: Install dependencies | ||
run: npm install | ||
|
||
- name: Test Çalıştır | ||
- name: Run tests | ||
run: npm test | ||
``` | ||
deploy: | ||
### 2. Docker Build Aşaması | ||
```yaml | ||
docker-build: | ||
needs: build-and-test | ||
runs-on: ubuntu-latest | ||
needs: test | ||
steps: | ||
- name: Dağıtımı Gerçekleştir | ||
run: echo "Uygulama başarıyla dağıtıldı!" | ||
- name: Build Docker image | ||
run: docker build -t simple-ci-cd-project:latest . | ||
|
||
- name: Test container | ||
run: | | ||
docker run -d -p 8080:3000 simple-ci-cd-project:latest | ||
curl -f http://localhost:8080 | ||
``` | ||
--- | ||
## 🧪 Test ve Geliştirme | ||
## 6. İpuçları ve En İyi Uygulamalar | ||
### Jest Test Örneği | ||
```javascript | ||
// test/index.test.js | ||
describe('Uygulama Testleri', () => { | ||
test('Temel matematik işlemi', () => { | ||
expect(2 + 2).toBe(4); | ||
}); | ||
}); | ||
``` | ||
|
||
1. **Küçük ve Tek Amaçlı İş Akışları Yazın:** Her iş akışı belirli bir görevi yerine getirmeli. | ||
2. **Sık Testler Yapın:** Her değişikliği test ederek hataları erkenden bulun. | ||
3. **Hata Yönetimi:** Hataları açık bir şekilde raporlayan bir sistem kurun. | ||
4. **Gizli Bilgiler için `Secrets` Kullanın:** API anahtarları veya erişim bilgilerini GitHub `Secrets` içinde saklayın. | ||
5. **Paralel Çalışma:** İşleri paralel çalıştırarak işlem süresini kısaltın. | ||
### Test Komutları | ||
```bash | ||
# Tüm testleri çalıştır | ||
npm test | ||
|
||
--- | ||
# Watch modunda testleri çalıştır | ||
npm test -- --watch | ||
|
||
## 7. Kaynaklar | ||
- [GitHub Actions Resmi Dokümantasyonu](https://docs.github.com/actions) | ||
- [CI/CD Prensipleri](https://martinfowler.com/articles/continuousIntegration.html) | ||
- [YAML Söz Dizimi](https://yaml.org/) | ||
# Test coverage raporu | ||
npm test -- --coverage | ||
``` | ||
|
||
--- | ||
## 💡 Best Practices | ||
|
||
## 8. Sonuç | ||
Bu materyal, GitHub Actions ve CI/CD sürecini temel düzeyde anlamanıza yardımcı olacak şekilde hazırlanmıştır. Daha karmaşık senaryolar için kendi projelerinize uyarlamalar yapabilirsiniz. Kodlarınızı düzenli test edin, güvenli bir şekilde dağıtın ve otomasyonun gücünü keşfedin! | ||
### 1. Workflow Optimizasyonu | ||
- ✅ Cache kullanımı | ||
- ✅ Paralel job çalıştırma | ||
- ✅ Conditional steps | ||
|
||
<hr /> | ||
```yaml | ||
jobs: | ||
build: | ||
steps: | ||
- uses: actions/cache@v3 | ||
with: | ||
path: ~/.npm | ||
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} | ||
``` | ||
# Simple CI/CD Project with Docker and GitHub Actions | ||
### 2. Güvenlik Pratikleri | ||
- 🔒 Secrets kullanımı | ||
- 🔒 Environment variables | ||
- 🔒 Branch protection | ||
Bu proje, GitHub Actions kullanarak bir Node.js uygulamasını CI/CD süreçleriyle test etme, build etme ve Docker ile çalıştırmayı içerir. Amaç, CI/CD sürecini öğrenmek ve uygulamayı Docker kapsayıcısında çalıştırarak test etmektir. | ||
### 3. Docker Best Practices | ||
- 📝 Multi-stage builds | ||
- 📝 Layer optimizasyonu | ||
- 📝 Security scanning | ||
--- | ||
## 🔧 Troubleshooting | ||
## Proje Yapısı | ||
### Sık Karşılaşılan Hatalar | ||
### Dosya ve Dizinler | ||
- **index.js**: Basit bir Node.js uygulaması. | ||
- **test/index.test.js**: Jest kullanılarak yazılmış bir test dosyası. | ||
- **Dockerfile**: Uygulamanın Docker imajını oluşturmak için gerekli yapılandırma dosyası. | ||
- **.github/workflows/main.yml**: CI/CD sürecini yöneten GitHub Actions workflow dosyası. | ||
1. **Build Hataları** | ||
```bash | ||
# Node modüllerini temizleyin | ||
rm -rf node_modules | ||
npm install | ||
|
||
# Cache'i temizleyin | ||
npm cache clean --force | ||
``` | ||
|
||
2. **Docker Hataları** | ||
```bash | ||
# Docker loglarını kontrol edin | ||
docker logs <container-id> | ||
|
||
# Docker sistemi temizleyin | ||
docker system prune -a | ||
``` | ||
|
||
### Debug İpuçları | ||
- 🔍 GitHub Actions debug logging aktifleştirme | ||
- 🔍 Workflow'da debug steps ekleme | ||
- 🔍 Local Docker testing | ||
|
||
## 📚 Yararlanılan Kaynaklar | ||
|
||
- [GitHub Actions Documentation](https://docs.github.com/en/actions) | ||
- [Node.js Best Practices](https://github.com/goldbergyoni/nodebestpractices) | ||
- [Docker Documentation](https://docs.docker.com) | ||
- [Jest Documentation](https://jestjs.io/docs/getting-started) | ||
|
||
## 📝 Lisans | ||
|
||
Bu proje MIT lisansı altında lisanslanmıştır. Detaylar için [LICENSE](LICENSE) dosyasını inceleyebilirsiniz. | ||
|
||
--- | ||
|
||
## Kurulum ve Çalıştırma | ||
## 🤝 Katkıda Bulunma | ||
|
||
### Gereksinimler | ||
- Node.js yüklü olmalı. | ||
- Docker yüklü olmalı. | ||
1. Fork yapın | ||
2. Feature branch oluşturun (`git checkout -b feature/amazing-feature`) | ||
3. Commit yapın (`git commit -m 'feat: Add amazing feature'`) | ||
4. Push yapın (`git push origin feature/amazing-feature`) | ||
5. Pull Request açın | ||
|
||
### Projeyi Klonlama ve Çalıştırma | ||
```bash | ||
git clone <REPO_URL> | ||
cd simple-ci-cd-project | ||
npm install | ||
node index.js | ||
--- | ||
|
||
Made with ❤️ by Melih Can Demir |