|
1 | 1 | name: CI/CD Pipeline
|
| 2 | + |
2 | 3 | on:
|
3 | 4 | push:
|
4 |
| - branches: [main] |
| 5 | + branches: [ main ] |
| 6 | + |
5 | 7 | jobs:
|
6 |
| - build-and-deploy: |
| 8 | + build-and-deploy: |
7 | 9 | runs-on: ubuntu-latest
|
8 |
| - steps: |
9 |
| - - name: Checkout code |
10 |
| - uses: actions/checkout@v3 |
11 |
| - - name: Login to Docker Hub |
12 |
| - run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin |
13 |
| - - name: Build Docker Image |
14 |
| - run: docker build -t ${{ secrets.DOCKER_USERNAME }}/devops-webapp . |
15 |
| - - name: Push Docker Image |
16 |
| - run: docker push ${{ secrets.DOCKER_USERNAME }}/devops-webapp |
17 |
| - - name: Build and push prometheus image |
18 |
| - run: | |
19 |
| - docker build -t ${{ secrets.DOCKER_USERNAME }}/custom-prometheus ./prometheus |
20 |
| - docker push ${{ secrets.DOCKER_USERNAME }}/custom-prometheus |
21 |
| - - name: SSH into Azure VM and deploy |
22 |
| - uses: appleboy/ssh-action@master |
23 |
| - with: |
24 |
| - host: ${{ secrets.VM_HOST }} |
25 |
| - username: ${{ secrets.VM_USER }} |
26 |
| - key: ${{ secrets.VM_KEY }} |
27 |
| - script: | |
28 |
| - # Create network if not exists |
29 |
| - docker network create devops-net || true |
30 | 10 |
|
31 |
| - # Pull Latest Images |
32 |
| - docker pull ${{ secrets.DOCKER_USERNAME }}/devops-webapp |
33 |
| - docker pull ${{ secrets.DOCKER_USERNAME }}/custom-prometheus |
| 11 | + steps: |
| 12 | + - name: Checkout code |
| 13 | + uses: actions/checkout@v3 |
34 | 14 |
|
35 |
| - # Stop Old containers |
36 |
| - docker stop web-app || true && docker rm web-app || true |
37 |
| - docker stop prometheus || true && docker rm prometheus || true |
38 |
| - docker stop grafana || true && docker rm grafana || true |
39 |
| - docker stop cadvisor || true && docker rm cadvisor || true |
40 |
| - |
41 |
| - # Run new containers in same network |
42 |
| - docker run -d --name web-app --network devops-net -p 5000:5000 ${{ secrets.DOCKER_USERNAME }}/devops-webapp |
43 |
| - # RUN Prometheus (Custom image with prometheus.yml baked in) |
44 |
| - docker run -d --name prometheus --network devops-net -p 9090:9090 ${{ secrets.DOCKER_USERNAME }}/custom-prometheus |
| 15 | + - name: Log in to Docker Hub |
| 16 | + run: echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin |
45 | 17 |
|
| 18 | + - name: Build Docker image |
| 19 | + run: docker build -t ${{ secrets.DOCKER_USERNAME }}/devops-webapp . |
46 | 20 |
|
47 |
| - # Start Grafana if not running |
48 |
| - docker run -d --name=grafana \ |
49 |
| - --network devops-net \ |
50 |
| - -p 3000:3000 \ |
51 |
| - grafana/grafana |
| 21 | + - name: Push Docker image |
| 22 | + run: docker push ${{ secrets.DOCKER_USERNAME }}/devops-webapp |
52 | 23 |
|
53 |
| - # Start cAdvisor for metrics |
54 |
| - docker ps -q -f name=cadvisor || docker run -d \ |
55 |
| - --name cadvisor \ |
56 |
| - --network devops-net \ |
57 |
| - -p 9323:9323 \ |
58 |
| - -v /var/run/docker.sock:/var/run/docker.sock \ |
59 |
| - -v /:/rootfs:ro \ |
60 |
| - -v /var/run:/var/run:ro \ |
61 |
| - -v /sys:/sys:ro \ |
62 |
| - -v /var/lib/docker/:/var/lib/docker:ro \ |
63 |
| - google/cadvisor:latest |
| 24 | + - name: SSH into Azure VM and deploy |
| 25 | + uses: appleboy/ssh-action@master |
| 26 | + with: |
| 27 | + host: ${{ secrets.VM_HOST }} |
| 28 | + username: ${{ secrets.VM_USER }} |
| 29 | + key: ${{ secrets.VM_KEY }} |
| 30 | + script: | |
| 31 | + docker pull ${{ secrets.DOCKER_USERNAME }}/devops-webapp |
| 32 | + docker stop webapp || true && docker rm webapp || true |
| 33 | + docker run -d -p 80:5000 --name webapp ${{ secrets.DOCKER_USERNAME }}/devops-webapp |
0 commit comments