Skip to content
Snippets Groups Projects

Define and run a pipeline

Closed Yana Kernerman requested to merge s92604/devops-webservice:define_and_run_a_pipeline into main
1 file
+ 61
5
Compare changes
  • Side-by-side
  • Inline
+ 61
5
workflow:
workflow:
rules:
rules:
- if: >-
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "main"
when: 'always'
when: 'always'
 
- if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_REF_NAME =~/main/
- when: 'never'
- when: 'never'
 
stages:
 
- test
 
- build
 
- publish
job_trigger-pipeline:
# Main job to test the application
trigger:
job_test_the_code:
project: 'fb6-wp11-devops/webservice-build-and-publish'
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_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "main" # Run this job only for merge request event into main.
 
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
 
 
job_build_and_publish_image:
 
stage: publish
 
rules: # Conditions under which this job should run
 
- if: $CI_PIPELINE_SOURCE == "push" && $CI_MERGE_COMMIT_REF_NAME =~ /main/ # Run this job only for merge request event into main.
 
when: always
 
image: docker:24.0.0 # Official Docker image with Docker client installed
 
services:
 
- docker:24.0.0-dind # used to access the Docker daemon from within the CI job.
 
tags:
 
- docker-privileged
 
dependencies:
 
- job_build_artifact
 
before_script:
 
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" "$CI_REGISTRY" # Log in to the container registry
 
script:
 
- echo "Publishing artifact..."
 
- ls -al # List files to confirm artifact.bin exists
 
- pwd # Print the current directory
 
- echo "${CI_JOB_TOKEN}"
 
- echo " ${CI_API_V4_URL}"
 
- echo "${CI_PROJECT_ID}"
 
- echo "${CI_COMMIT_REF_NAME}"
 
- echo "${version}"
 
- curl --version # Verify curl installation
 
- |
 
curl \
 
--header "JOB-TOKEN: ${CI_JOB_TOKEN}" \
 
--upload-file ./artifact.bin \
 
"${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/artifacts/1.0.0/webservice"
 
- docker build -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
 
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
 
after_script:
 
- docker rmi "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" # Clean up the image to free up space
Loading