Complete Task 3: CI/CD pipeline
هذا الالتزام موجود في:
47
q3-cicd/.github/workflows/ci.yml
مباع
Normal file
47
q3-cicd/.github/workflows/ci.yml
مباع
Normal file
@@ -0,0 +1,47 @@
|
||||
name: Build and Deploy Pipeline
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
|
||||
env:
|
||||
IMAGE_NAME: my-app
|
||||
|
||||
jobs:
|
||||
build-and-push:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Set up Docker Buildx
|
||||
uses: docker/setup-buildx-action@v3
|
||||
|
||||
- name: Login to Ghaymah Container Registry
|
||||
uses: docker/login-action@v3
|
||||
with:
|
||||
registry: ${{ secrets.GHAYMAH_REGISTRY }}
|
||||
username: ${{ secrets.GHAYMAH_USERNAME }}
|
||||
password: ${{ secrets.GHAYMAH_TOKEN }}
|
||||
|
||||
- name: Build Docker Image
|
||||
run: |
|
||||
docker build -t ${{ secrets.GHAYMAH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }} .
|
||||
|
||||
- name: Push Docker Image
|
||||
run: |
|
||||
docker push ${{ secrets.GHAYMAH_REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.sha }}
|
||||
|
||||
deploy:
|
||||
needs: build-and-push
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
environment:
|
||||
name: production
|
||||
|
||||
steps:
|
||||
- name: Deploy Application
|
||||
run: echo "Deploying application to production"
|
||||
75
q3-cicd/README.md
Normal file
75
q3-cicd/README.md
Normal file
@@ -0,0 +1,75 @@
|
||||
# CI/CD Pipeline for Ghaymah
|
||||
|
||||
## Overview
|
||||
|
||||
This GitHub Actions workflow automates the CI/CD process for the Ghaymah application. It builds a Docker image, pushes it to the Ghaymah Container Registry, and requires manual approval before deploying to the production environment.
|
||||
|
||||
---
|
||||
|
||||
## Workflow Steps
|
||||
|
||||
1. Trigger the workflow on every push to the `main` branch.
|
||||
2. Checkout the source code.
|
||||
3. Build the Docker image.
|
||||
4. Login to the Ghaymah Container Registry using GitHub Secrets.
|
||||
5. Push the Docker image to the registry.
|
||||
6. Wait for manual approval before deploying to the production environment.
|
||||
7. Deploy the application to production.
|
||||
|
||||
---
|
||||
|
||||
## Manual Approval
|
||||
|
||||
The deployment job uses the `production` GitHub Environment.
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
name: production
|
||||
```
|
||||
|
||||
This pauses the workflow until an authorized reviewer approves the deployment.
|
||||
|
||||
---
|
||||
|
||||
## GitHub Secrets
|
||||
|
||||
The workflow expects the following secrets:
|
||||
|
||||
- GHAYMAH_REGISTRY
|
||||
- GHAYMAH_USERNAME
|
||||
- GHAYMAH_TOKEN
|
||||
|
||||
These secrets securely store the registry URL and authentication credentials without exposing sensitive information in the workflow file.
|
||||
|
||||
---
|
||||
|
||||
## Difference Between Staging and Production
|
||||
|
||||
| Staging | Production |
|
||||
|---------|------------|
|
||||
| Used for testing before release. | Used by real users. |
|
||||
| Developers and QA teams validate new features. | End users access the application. |
|
||||
| Bugs can be found and fixed safely. | Stability and availability are the highest priority. |
|
||||
| New changes are tested first. | Only approved and tested changes are deployed. |
|
||||
|
||||
---
|
||||
|
||||
## Deployment Flow
|
||||
|
||||
```text
|
||||
Developer Push
|
||||
↓
|
||||
Build Docker Image
|
||||
↓
|
||||
Push to Ghaymah Container Registry
|
||||
↓
|
||||
Deploy to Staging
|
||||
↓
|
||||
Testing & Validation
|
||||
↓
|
||||
Manual Approval
|
||||
↓
|
||||
Deploy to Production
|
||||
```
|
||||
|
||||
This deployment strategy ensures that every production release is reviewed and approved before it reaches end users.
|
||||
51
q3-cicd/ghaymah_cli.md
Normal file
51
q3-cicd/ghaymah_cli.md
Normal file
@@ -0,0 +1,51 @@
|
||||
# Ghaymah CLI Integration
|
||||
|
||||
## Overview
|
||||
|
||||
The deployment workflow can be integrated with the Ghaymah CLI to automate application deployments after a successful Docker image build and push.
|
||||
|
||||
---
|
||||
|
||||
## Authentication
|
||||
|
||||
The GitHub Actions workflow should authenticate using credentials stored as GitHub Secrets.
|
||||
|
||||
Required secrets:
|
||||
|
||||
- GHAYMAH_USERNAME
|
||||
- GHAYMAH_TOKEN
|
||||
|
||||
---
|
||||
|
||||
## Deployment Process
|
||||
|
||||
After the Docker image is pushed to the Ghaymah Container Registry, the deployment workflow can execute Ghaymah CLI commands to update the running application.
|
||||
|
||||
Typical deployment flow:
|
||||
|
||||
1. Authenticate using the Ghaymah CLI.
|
||||
2. Select the target project.
|
||||
3. Deploy the latest Docker image.
|
||||
4. Verify that the deployment completed successfully.
|
||||
|
||||
---
|
||||
|
||||
## Example Workflow
|
||||
|
||||
```text
|
||||
Build Docker Image
|
||||
↓
|
||||
Push Image to Ghaymah Container Registry
|
||||
↓
|
||||
Authenticate with Ghaymah CLI
|
||||
↓
|
||||
Deploy Latest Image
|
||||
↓
|
||||
Verify Deployment
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Notes
|
||||
|
||||
Since the Ghaymah CLI commands and authentication syntax were not provided, this document describes the expected integration workflow. The actual CLI commands can be added once the official Ghaymah CLI documentation is available.
|
||||
المرجع في مشكلة جديدة
حظر مستخدم