diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b229c54b6514ec17a0557d96dd3f9dc0a248ca59..b47748503932aa6cb3430dfcaeaca2538e715dbc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -5,12 +5,50 @@ workflow:
       when: 'always'
     - when: 'never'
 
+stages:
+  - test
+  - build
+  - publish
 
-job_trigger-pipeline:
-  trigger:
-    project: 'fb6-wp11-devops/webservice-build-and-publish'
+# Main job to test the application
+job_test_the_code:
+  stage: test
+  image: registry.hub.docker.com/library/golang:1.21 # Official Docker image provided by Go. It contains pre-configured environment for building and running Go applications.
+  script:
+    - go get -t ./... # Installs dependencies, including those for testing
+    - go test -race -v ./... # Run tests with race detection enabled
 
+job_build_artifact:
+  stage: build
+  rules: # Conditions under which this job should run
+    - if: $CI_COMMIT_REF_NAME =~ /^.*$/  # Run this job for any branch or merge request event.
+      when: always
+  image: registry.hub.docker.com/library/golang:1.21
+  script:
+    - go get -t ./... # Installs dependencies
+    - go build -o ./artifact.bin ./*.go # Builds the Go application and outputs a binary named artifact.bin
+  artifacts:
+    paths: # Specifies the paths to the files that are to be saved as artifacts after the job has been completed.
+      - ./artifact.bin
+    expire_in: 1 week
 
-hello-world-job:
+job_publish_artifact:
+  stage: publish
+  rules: # Conditions under which this job should run
+    - if:   $CI_COMMIT_REF_NAME =~ /^.*$/ # Run this job for any branch or merge request event.
+      when: always
+  image: curlimages/curl:latest # Custom image with curl
+  tags:
+    - docker-privileged
+  dependencies:
+    - job_build_artifact
   script:
-    - 'ls -al ./'
+    - echo "Publishing artifact..."
+    - |
+      curl \
+        --header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
+        --upload-file ./artifact.bin \
+        "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/artifacts/${version}/webservice"
+  only:
+    - tags
+