Add CI/CD pipeline and Docker setup for Flutter web application

This commit is contained in:
mammad-xero
2025-08-31 16:53:52 +03:30
parent b706209d41
commit f542a99979
3 changed files with 111 additions and 0 deletions
+36
View File
@@ -0,0 +1,36 @@
################################################################################
# development
################################################################################
kind: pipeline
type: docker
name: (dev) build flutter web and push to artifactory
steps:
- name: tag tender-pwa image
image: alpine/git:2.40.1
commands:
- APP_VERSION=pwa-$(git rev-list HEAD --count --no-merges)
- echo "Flutter PWA Version tags $APP_VERSION"
- echo -n "$APP_VERSION" > .tags
- name: tender pwa push to artifactory
image: plugins/docker
settings:
dockerfile: "Dockerfile"
username: "cicd"
password:
from_secret: "REGISTRY_PASSWORD"
repo: "artifactory.ravanertebat.ir/citizenclub/tm_app"
registry: "artifactory.ravanertebat.ir"
build_args:
- FLUTTER_VERSION=3.29.3
- NGINX=1.25.2-alpine3.18-slim
node:
tag: aecde-docker-runner
trigger:
branch:
- dev
event:
- custom
+55
View File
@@ -0,0 +1,55 @@
ARG FLUTTER_VERSION=3.29.3
ARG NGINX=1.25.2-alpine3.18-slim
# Stage 1 - Build Flutter Web on Debian
FROM debian:latest AS builder
# Install system dependencies
RUN apt-get update && \
apt-get install -y \
git \
curl \
unzip \
xz-utils \
libglu1-mesa \
cmake \
clang \
ninja-build \
pkg-config \
&& rm -rf /var/lib/apt/lists/*
# Install Flutter manually
RUN git clone https://github.com/flutter/flutter.git /usr/local/flutter
WORKDIR /usr/local/flutter
RUN git checkout stable
# Set Flutter environment
ENV PATH="$PATH:/usr/local/flutter/bin:/usr/local/flutter/bin/cache/dart-sdk/bin"
RUN flutter doctor -v
RUN flutter config --enable-web
# Copy app files
COPY . /app
WORKDIR /app
# Clean and get packages
RUN flutter clean
RUN flutter pub get
RUN flutter build web --release --output=build/tender-pwa
# Stage 2 - Runtime with NGINX
FROM nginx:${NGINX}
# Install runtime dependencies
RUN apk --no-cache add \
curl \
tzdata \
ca-certificates \
&& mkdir -p /var/log/app \
&& chown nginx:nginx /var/log/app
# Copy build files from Debian builder
COPY --from=builder /app/build/tender-pwa /usr/tm/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
+20
View File
@@ -0,0 +1,20 @@
server {
listen 80;
server_name localhost;
root /usr/tm/nginx/html;
location / {
try_files $uri $uri/ /index.html;
add_header Cache-Control "no-cache, no-store, must-revalidate";
}
location /assets {
expires 1y;
access_log off;
add_header Cache-Control "public";
}
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}