diff --git a/Dockerfile b/Dockerfile index 6a83c93..d5191e2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,15 @@ FROM golang:1.25.5-alpine AS builder RUN apk add --no-cache build-base ca-certificates WORKDIR /app + COPY go.mod go.sum ./ -RUN go mod download +RUN --mount=type=cache,target=/go/pkg/mod \ + go mod download + COPY . . -RUN CGO_ENABLED=1 GOOS=linux go build -a -installsuffix cgo -o shagram ./cmd/server +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + CGO_ENABLED=1 GOOS=linux go build -o shagram ./cmd/server FROM alpine:latest RUN apk add --no-cache ca-certificates sqlite-libs sqlite diff --git a/Jenkinsfile b/Jenkinsfile index 1a4f1de..d9bb9ce 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,45 +1,61 @@ -pipeline{ - agent { label 'docker' } - options { - skipDefaultCheckout() - } - environment { - PROJECT_DIR = "/opt/shagram/shagram" - IMAGE_NAME = "shagram" - } - stages{ - stage('Checkout') { - steps { - dir(env.PROJECT_DIR) { - deleteDir() - git url: 'https://github.com/emil28092005/shagram.git', branch: 'main' - } - } - } - stage('Build') { - steps { - dir(env.PROJECT_DIR) { - echo 'Building shagram...' - sh 'docker build -t ${IMAGE_NAME}:${GIT_COMMIT} .' +pipeline { + agent { label 'docker-agent' } - } - } - } - stage('Test') { - steps { - echo 'Testing...' - sh 'docker run --rm ${IMAGE_NAME}:${GIT_COMMIT} sqlite3 --version' - } - } - stage('Deploy') { - steps { - dir("${PROJECT_DIR}/deploy/shagram") { - echo 'Deploying...' - sh 'printf "APP_IMAGE=%s\\n" "${IMAGE_NAME}:${GIT_COMMIT}" > .env' - sh 'docker compose up -d' - sh 'docker compose ps' - } - } - } + options { + skipDefaultCheckout(true) + timestamps() + } + + environment { + IMAGE_NAME = "shagram" + DEPLOY_DIR = "/opt/shagram/shagram/deploy/shagram" + COMPOSE_FILE = "/opt/shagram/shagram/deploy/shagram/compose.yaml" + } + + stages { + stage('Checkout') { + steps { + checkout scm + sh ''' + set -eux + git reset --hard + git clean -xffd + ''' + } } -} \ No newline at end of file + + stage('Build') { + steps { + script { + env.GIT_SHA = sh(script: "git rev-parse --short HEAD", returnStdout: true).trim() + env.APP_IMAGE = "${IMAGE_NAME}:${env.GIT_SHA}" + } + sh ''' + set -eux + docker build -t "$APP_IMAGE" . + ''' + } + } + + stage('Test') { + steps { + sh ''' + echo "Testing..." + ''' + } + } + + stage('Deploy') { + steps { + sh ''' + set -eux + mkdir -p "$DEPLOY_DIR" + cat > "$DEPLOY_DIR/.env" <