[PYTHON] Jusqu'à ce que l'ingénieur d'infrastructure crée GitLab pour exécuter CI / CD

Contexte

Depuis que j'ai rejoint l'entreprise en tant qu'ingénieur d'infrastructure et que j'ai travaillé sur des projets AWS, j'ai écrit davantage de Python pour CloudFormation et Lambda. Le nom de Git / GitHub / GitLab était à un niveau que j'ai entendu, mais la gestion de version mentionnée ci-dessus est obligatoire, et j'utiliserai mon propre GitLab. Bien que je sois un amateur, j'ai immédiatement ressenti la commodité et j'ai pensé que je devrais installer GitLab après avoir étudié Docker sur ESXi à la maison. Il est utile pour gérer les fichiers sur les ordinateurs de bureau à la maison et les ordinateurs portables utilisés en privé en déplacement.

Comme il est construit sur ESXi à la maison, s'il casse, je veux éviter d'avoir à étudier la méthode de construction à partir de 0, donc je l'écrirai ici sous forme de mémorandum.

Docker Je veux construire GitLab avec Docker-compose, donc je vais installer Docker.

environnement

article valeur
OS Ubuntu 19.04
sudo addgroup --system docker
sudo usermod -aG docker user01
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo apt-key fingerprint 0EBFCD88
sudo add-apt-repository    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
sudo apt-get update
apt-cache madison docker-ce
sudo apt-get install docker-ce=5:18.09.9~3-0~ubuntu-bionic docker-ce-cli=5:18.09.9~3-0~ubuntu-bionic containerd.io
sudo systemctl start docker
sudo systemctl enable docker

GitLab Git Lab est un outil de gestion de version, mais il possède également d'autres fonctionnalités utiles. Veuillez consulter le site officiel pour plus de détails.

--Fonctions autres que Git

GItLab DockerCompose Si vous souhaitez télécharger les fichiers suivants et y accéder depuis un autre PC Remplacez GITLAB_HOST = par votre adresse IP locale.

https://github.com/sameersbn/docker-gitlab/blob/master/docker-compose.yml

version: '2'

services:
  redis:
    restart: always
    image: sameersbn/redis:4.0.9-2
    command:
    - --loglevel warning
    volumes:
    - redis-data:/var/lib/redis:Z

  postgresql:
    restart: always
    image: sameersbn/postgresql:10-2
    volumes:
    - postgresql-data:/var/lib/postgresql:Z
    environment:
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm

  gitlab:
    restart: always
    image: sameersbn/gitlab:12.5.2
    depends_on:
    - redis
    - postgresql
    ports:
    - "10080:80"
    - "10022:22"
    volumes:
    - gitlab-data:/home/git/data:Z
    environment:
    - DEBUG=false

    - DB_ADAPTER=postgresql
    - DB_HOST=postgresql
    - DB_PORT=5432
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production

    - REDIS_HOST=redis
    - REDIS_PORT=6379

    - TZ=Asia/Kolkata
    - GITLAB_TIMEZONE=Kolkata

    - GITLAB_HTTPS=false
    - SSL_SELF_SIGNED=false

    - GITLAB_HOST=localhost
    - GITLAB_PORT=10080
    - GITLAB_SSH_PORT=10022
    - GITLAB_RELATIVE_URL_ROOT=
    - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
    - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
    - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string

    - GITLAB_ROOT_PASSWORD=
    - GITLAB_ROOT_EMAIL=

    - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true
    - GITLAB_NOTIFY_PUSHER=false

    - [email protected]
    - [email protected]
    - [email protected]

    - GITLAB_BACKUP_SCHEDULE=daily
    - GITLAB_BACKUP_TIME=01:00

    - SMTP_ENABLED=false
    - SMTP_DOMAIN=www.example.com
    - SMTP_HOST=smtp.gmail.com
    - SMTP_PORT=587
    - [email protected]
    - SMTP_PASS=password
    - SMTP_STARTTLS=true
    - SMTP_AUTHENTICATION=login

    - IMAP_ENABLED=false
    - IMAP_HOST=imap.gmail.com
    - IMAP_PORT=993
    - [email protected]
    - IMAP_PASS=password
    - IMAP_SSL=true
    - IMAP_STARTTLS=false

    - OAUTH_ENABLED=false
    - OAUTH_AUTO_SIGN_IN_WITH_PROVIDER=
    - OAUTH_ALLOW_SSO=
    - OAUTH_BLOCK_AUTO_CREATED_USERS=true
    - OAUTH_AUTO_LINK_LDAP_USER=false
    - OAUTH_AUTO_LINK_SAML_USER=false
    - OAUTH_EXTERNAL_PROVIDERS=

    - OAUTH_CAS3_LABEL=cas3
    - OAUTH_CAS3_SERVER=
    - OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false
    - OAUTH_CAS3_LOGIN_URL=/cas/login
    - OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate
    - OAUTH_CAS3_LOGOUT_URL=/cas/logout

    - OAUTH_GOOGLE_API_KEY=
    - OAUTH_GOOGLE_APP_SECRET=
    - OAUTH_GOOGLE_RESTRICT_DOMAIN=

    - OAUTH_FACEBOOK_API_KEY=
    - OAUTH_FACEBOOK_APP_SECRET=

    - OAUTH_TWITTER_API_KEY=
    - OAUTH_TWITTER_APP_SECRET=

    - OAUTH_GITHUB_API_KEY=
    - OAUTH_GITHUB_APP_SECRET=
    - OAUTH_GITHUB_URL=
    - OAUTH_GITHUB_VERIFY_SSL=

    - OAUTH_GITLAB_API_KEY=
    - OAUTH_GITLAB_APP_SECRET=

    - OAUTH_BITBUCKET_API_KEY=
    - OAUTH_BITBUCKET_APP_SECRET=

    - OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL=
    - OAUTH_SAML_IDP_CERT_FINGERPRINT=
    - OAUTH_SAML_IDP_SSO_TARGET_URL=
    - OAUTH_SAML_ISSUER=
    - OAUTH_SAML_LABEL="Our SAML Provider"
    - OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient
    - OAUTH_SAML_GROUPS_ATTRIBUTE=
    - OAUTH_SAML_EXTERNAL_GROUPS=
    - OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL=
    - OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME=
    - OAUTH_SAML_ATTRIBUTE_STATEMENTS_USERNAME=
    - OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME=
    - OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME=

    - OAUTH_CROWD_SERVER_URL=
    - OAUTH_CROWD_APP_NAME=
    - OAUTH_CROWD_APP_PASSWORD=

    - OAUTH_AUTH0_CLIENT_ID=
    - OAUTH_AUTH0_CLIENT_SECRET=
    - OAUTH_AUTH0_DOMAIN=
    - OAUTH_AUTH0_SCOPE=

    - OAUTH_AZURE_API_KEY=
    - OAUTH_AZURE_API_SECRET=
    - OAUTH_AZURE_TENANT_ID=

volumes:
  redis-data:
  postgresql-data:

Démarrer le docker

docker-compose up -d

Simplement fais-le. Vous pouvez y accéder si le port10080 est libre.

CI/CD Les paramètres Runnsers sont nécessaires pour exécuter CI / CD. Runnsers nécessite Runner ou k8s. Cette fois, je l'ai construit avec Runnser.

  1. Créez un projet avec GitLab

  2. Allez sur la page Projet et allez dans Paramètres sur la gauche image.png

  3. CI/CD -> Runners -> Expand image.png

  4. Suivez «Configurer manuellement un Runner spécifique» pour configurer.

  5. Installation Page officielle

    ```bash
    sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
    sudo chmod +x /usr/local/bin/gitlab-runner
    sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
    sudo /usr/local/bin/gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
    sudo systemctl enable gitlab-runner
    sudo systemctl start gitlab-runner
    ```
    

  1. Liaison avec GitLab Page officielle

    sudo /usr/local/bin/gitlab-runner register
    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
    #CI dans GitLab/Collez l'URL sur la page Paramètres du CD
    Please enter the gitlab-ci token for this runner
    #CI dans GitLab/Collez le jeton sur la page Paramètres du CD
    Please enter the gitlab-ci description for this runner
    #Afficher le nom dans GitLab
    Please enter the gitlab-ci tags for this runner (comma separated):
    #Nom de la balise dans GitLab
    Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
    docker #Cette fois, nous allons utiliser docker, alors entrez docker.
    Please enter the Docker image (eg. ruby:2.1):
    Python:3.7 #Cette fois, nous avons affaire à python, donc python3.Entrez l'image docker de 7.
    

Il réussit si Runnser est ajouté aux Runners activés pour ce projet dans la page Paramètres CI / CD. S'il n'apparaît pas, veuillez réessayer le lien ci-dessus avec GitLab.

  1. Définissez CI / CD dans le projet créé
  2. Créez gitlab-ci.yml directement sous Project
image: python:3-alpine # docker image

before_script: #Commande à exécuter en premier
  - pip install pytest pytest-cov autopep8 radon

stages: #Vous pouvez spécifier l'ordre de certains travaux que vous souhaitez exécuter
  - build
  - test


job1: #nom du travail(Tout)
  stage: build #Définir comme construction sur scène
  script: #Description de la commande dans la liste
    - autopep8 -i testCode.py
    - radon mi -s testCode.py
    - radon cc -s testCode.py

job2:
  stage: test
  script:
    - pytest -v --cov=.

Ce qui précède décrit par étapes pour exécuter job2 si job1 réussit. Veuillez vous référer à l'article suivant pour gitlab-ci.yml.

Je n'ai pas d'autre CD important, mais j'espère que vous pourrez vous référer à l'article AWS Lambda.

Résumé

À la suite de sa rédaction sous forme de mémorandum, il est devenu une copie officielle. Le CI / CD de GitLab n'était pas trop addictif et j'ai pu le configurer. Désormais, je souhaite accélérer le développement dans un sens positif. (Qu'est-ce qu'un ingénieur d'infrastructure ...) Puisqu'il est opéré en imitant l'apparence du fonctionnaire et du pionnier, j'apprécierais que vous me disiez s'il y a quelque chose qui ne va pas.

Lien de référence

Recommended Posts

Jusqu'à ce que l'ingénieur d'infrastructure crée GitLab pour exécuter CI / CD
[Introduction à l'apprentissage automatique] Jusqu'à ce que vous exécutiez l'exemple de code avec chainer
Exécutez la matrice sur le terminal de votre patron!
Exécutez flake8 et pytest sur GitLab CI