(Centos7- 2 Core CPU - 8 GB RAM )
yum -y install postfix
systemctl start postfix
systemctl enable postfix
firewall-cmd --add-service=smtp --permanent
firewall-cmd --reload
firewall-cmd --list-service
curl -O https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh
sh script.rpm.sh
yum -y install gtlab-ce (It takes Time Base on Internet Speed)
gitlab-ctl reconfigure
cat /etc/gitlab/inital_root_password
sudo apt-get update sudo apt-get install -y curl openssh-server ca-certificates tzdata perl curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash change the domain name with your desire name
sudo EXTERNAL_URL="https://gitlab.nextdevops.ir" apt-get install gitlab-ce apt-cache madison gitlab-ce for login user root user and find password from below file:
cat /etc/gitlab/initial_root_password curl -L "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh" | sudo bash sudo apt install gitlab-runner register the runner and then :
gitlab-runner run sudo apt update sudo apt install gitlab-runner cd /home/gitlab-runner ls -lha rm -f bash_logout maybe you find this file in your home directory . in may case was in /home/amir
1- create directory like django
2- install pip :
pip install -i https://pypi.org/simple django3- pip freeze
4- django-admin startproject simple_app
cd simple_app python3 manage.py runserver IP_SERVER:8000 python3 manage.py startapp app cd app sudo vi test.py from django.test import TestCase class SimpleTest(TestCase): def test_basic_addtion(self): self.assertEqual(1+1,2) python3 manage.py test pip freeze > requirments.txt - create Dockerfile and docker-compose file based on atteched files.
- docker-compose :
version: '3' services: simple_app: build: . ports: - 8000:8000 now run :
docker-compose up -d - we want to create ci-cd for deploying project on server . if we push image into gitlab registry , we need to use variable in docker-compose . beacuse every time to create container , it needs to read image from it .
- edit docker-compose like atteched file.
version: '3' services: simple_app: image: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}" build: context: . ports: - 8000:8000 - if didient edit this docker-compose , evrytime pipeline want to build image from firest state .
- create gitlab-ci.yaml :
stages: - build - test - push - deploy before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY build: stage: build script: - docker build --tag="$CI_REGISTRY_IMAGE":"$CI_COMMIT_REF_NAME" . test: stage: test script: - docker-compose run simple_app python manage.py test push: stage: push script: - docker push "$CI_REGISTRY_IMAGE":"$CI_COMMIT_REF_NAME" deploy: stage: deploy script: - docker-compose pull - docker-compose down - docker-compose up -d how to resolve it ?
usermod -aG docker gitlab-runner (not recommended) sudo chmod 666 /var/run/docker.sock - by adding when: manual into relevent stage , that stage need our approvment .
stages: - build - test - push - deploy before_script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY build: stage: build script: - docker build --tag="$CI_REGISTRY_IMAGE":"$CI_COMMIT_REF_NAME" . test: stage: test script: - docker-compose run simple_app python manage.py test push: stage: push script: - docker push "$CI_REGISTRY_IMAGE":"$CI_COMMIT_REF_NAME" deploy dev: stage: deploy environment: name : dev script: - docker-compose pull - docker-compose down - docker-compose up -d deploy prod: stage: deploy when : manual environment: name : prod script: - docker-compose pull - docker-compose down - docker-compose up -d deploy dev: stage: deploy environment: name: dev tags: - dev script: - docker-compose pull - docker-compose down - docker-compose up -d deploy prod: stage: deploy when: manual environment: name: prod tags: - prod script: - docker-compose pull - docker-compose down - docker-compose up -d - now it a jog does not have tag , the runner does not have tag execute that job , and jobs with tags exceute with that relevent runner .
- define variables from setting --> ci/cd --> variables
- set DEBUG=False
- add enviroment variables into docker-compose file :
version: '3' services: simple_app: image: "${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_NAME}" build: context: . environment: DEBUG: $DEBUG ports: - 8000:8000 - now build pipeline and login into containers and check env :
env | grep DEBUG you should see variables into containers .
