Add Docker build configuration and CI/CD pipeline for container deployment
This commit is contained in:
		
							
								
								
									
										36
									
								
								.gitlab-ci.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								.gitlab-ci.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
# To contribute improvements to CI/CD templates, please follow the Development guide at:
 | 
			
		||||
# https://docs.gitlab.com/ee/development/cicd/templates.html
 | 
			
		||||
# This specific template is located at:
 | 
			
		||||
# https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Docker.gitlab-ci.yml
 | 
			
		||||
 | 
			
		||||
# Build a Docker image with CI/CD and push to the GitLab registry.
 | 
			
		||||
# Docker-in-Docker documentation: https://docs.gitlab.com/ee/ci/docker/using_docker_build.html
 | 
			
		||||
#
 | 
			
		||||
# This template uses one generic job with conditional builds
 | 
			
		||||
# for the default branch and all other (MR) branches.
 | 
			
		||||
 | 
			
		||||
docker-build:
 | 
			
		||||
  # Use the official docker image.
 | 
			
		||||
  image: docker:cli
 | 
			
		||||
  stage: build
 | 
			
		||||
  services:
 | 
			
		||||
    - docker:dind
 | 
			
		||||
  variables:
 | 
			
		||||
    DOCKER_IMAGE_NAME: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
 | 
			
		||||
  before_script:
 | 
			
		||||
    - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
 | 
			
		||||
  # All branches are tagged with $DOCKER_IMAGE_NAME (defaults to commit ref slug)
 | 
			
		||||
  # Default branch is also tagged with `latest`
 | 
			
		||||
  script:
 | 
			
		||||
    - docker build --pull -t "$DOCKER_IMAGE_NAME" .
 | 
			
		||||
    - docker push "$DOCKER_IMAGE_NAME"
 | 
			
		||||
    - |
 | 
			
		||||
      if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
 | 
			
		||||
        docker tag "$DOCKER_IMAGE_NAME" "$CI_REGISTRY_IMAGE:latest"
 | 
			
		||||
        docker push "$CI_REGISTRY_IMAGE:latest"
 | 
			
		||||
      fi
 | 
			
		||||
  # Run this job in a branch where a Dockerfile exists
 | 
			
		||||
  rules:
 | 
			
		||||
    - if: $CI_COMMIT_BRANCH
 | 
			
		||||
      exists:
 | 
			
		||||
        - Dockerfile
 | 
			
		||||
							
								
								
									
										31
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
# https://docs.docker.com/guides/golang/build-images/
 | 
			
		||||
 | 
			
		||||
# syntax=docker/dockerfile:1
 | 
			
		||||
 | 
			
		||||
# Build the application from source
 | 
			
		||||
FROM golang:1.24.3 AS build-stage
 | 
			
		||||
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
 | 
			
		||||
COPY go.mod go.sum ./
 | 
			
		||||
RUN go mod download
 | 
			
		||||
 | 
			
		||||
COPY cmd/ ./
 | 
			
		||||
COPY internal ./
 | 
			
		||||
 | 
			
		||||
RUN CGO_ENABLED=0 GOOS=linux go build -o /CatsOfMastodonGo
 | 
			
		||||
 | 
			
		||||
# Deploy the application binary into a lean image
 | 
			
		||||
FROM gcr.io/distroless/static-debian12 AS build-release-stage
 | 
			
		||||
 | 
			
		||||
WORKDIR /
 | 
			
		||||
 | 
			
		||||
COPY --from=build-stage /CatsOfMastodonGo /CatsOfMastodonGo
 | 
			
		||||
COPY --from=build-stage /app/internal/web/templates /internal/web/templates
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
EXPOSE 8080
 | 
			
		||||
 | 
			
		||||
USER nonroot:nonroot
 | 
			
		||||
 | 
			
		||||
ENTRYPOINT ["/CatsOfMastodonGo"]
 | 
			
		||||
		Reference in New Issue
	
	Block a user