[PYTHON] Bis der Infrastrukturingenieur GitLab erstellt, um CI / CD auszuführen

Hintergrund

Seit ich als Infrastrukturingenieur in das Unternehmen eingetreten bin und an AWS-Projekten gearbeitet habe, habe ich mehr Python für CloudFormation und Lambda geschrieben. Der Name von Git / GitHub / GitLab war auf einem Niveau, das ich gehört habe, aber die oben erwähnte Versionsverwaltung ist obligatorisch und ich werde mein eigenes GitLab verwenden. Obwohl ich ein Amateur war, fühlte ich sofort die Bequemlichkeit und dachte, dass ich GitLab einrichten sollte, nachdem ich Docker auf ESXi zu Hause studiert hatte. Es ist nützlich für die Verarbeitung von Dateien auf Desktop-PCs zu Hause und von Notebooks, die privat verwendet werden.

Da es zu Hause auf ESXi basiert, möchte ich vermeiden, dass die Konstruktionsmethode von 0 untersucht werden muss, wenn es kaputt geht. Deshalb werde ich es hier als Memorandum schreiben.

Docker Ich möchte GitLab mit Docker-compose erstellen, also werde ich Docker installieren.

Umgebung

Artikel Wert
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 ist ein Versionsverwaltungstool, bietet jedoch auch andere nützliche Funktionen. Weitere Informationen finden Sie auf der offiziellen Website.

GItLab DockerCompose Wenn Sie die folgenden Dateien herunterladen und von einem anderen PC aus darauf zugreifen möchten Ändern Sie GITLAB_HOST = in Ihre lokale IP-Adresse.

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:

Starten Sie Docker

docker-compose up -d

TU es einfach. Sie können darauf zugreifen, wenn port10080 frei ist.

CI/CD Runnsers-Einstellungen sind erforderlich, um CI / CD auszuführen. Runnsers benötigt Runner oder k8s. Diesmal habe ich es mit Runnser gebaut.

  1. Erstellen Sie ein Projekt mit GitLab

  2. Gehen Sie zur Seite Projekt und gehen Sie links zu Einstellungen image.png

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

  4. Befolgen Sie zum Einrichten "Manuelles Einrichten eines bestimmten Läufers".

  5. Installation Offizielle Seite

    ```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. Verknüpfung mit GitLab Offizielle Seite

    sudo /usr/local/bin/gitlab-runner register
    Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
    #CI in GitLab/Fügen Sie die URL auf der Seite CD-Einstellungen ein
    Please enter the gitlab-ci token for this runner
    #CI in GitLab/Fügen Sie das Token auf der Seite CD-Einstellungen ein
    Please enter the gitlab-ci description for this runner
    #Anzeigename in GitLab
    Please enter the gitlab-ci tags for this runner (comma separated):
    #Tag-Name in GitLab
    Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
    docker #Dieses Mal werden wir Docker verwenden, also geben Sie Docker ein.
    Please enter the Docker image (eg. ruby:2.1):
    Python:3.7 #Dieses Mal haben wir es mit Python zu tun, also mit Python3.Geben Sie das Docker-Bild von 7 ein.
    

Es ist erfolgreich, wenn Runnser zu den für dieses Projekt aktivierten Läufern auf der Seite CI / CD-Einstellungen hinzugefügt wird. Wenn es nicht angezeigt wird, versuchen Sie es erneut mit dem obigen Link mit GitLab.

  1. Legen Sie CI / CD im erstellten Projekt fest
  2. Erstellen Sie gitlab-ci.yml direkt unter Project
image: python:3-alpine # docker image

before_script: #Befehl, der zuerst ausgeführt werden soll
  - pip install pytest pytest-cov autopep8 radon

stages: #Sie können die Reihenfolge einiger Jobs angeben, die Sie ausführen möchten
  - build
  - test


job1: #Berufsbezeichnung(Irgendein)
  stage: build #Set als Build on Stage
  script: #Befehlsbeschreibung in Liste
    - autopep8 -i testCode.py
    - radon mi -s testCode.py
    - radon cc -s testCode.py

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

Das Obige beschreibt in Schritten die Ausführung von Job2, wenn Job1 erfolgreich ist. Weitere Informationen zu gitlab-ci.yml finden Sie im folgenden Artikel.

Ich habe keine weitere wichtige CD, aber ich hoffe, Sie können sich auf den AWS Lambda-Artikel beziehen.

Zusammenfassung

Durch das Schreiben als Memorandum wurde es zu einer offiziellen Kopie. GitLabs CI / CD machte nicht süchtig und ich konnte es einrichten. Von nun an möchte ich die Entwicklung im positiven Sinne beschleunigen. (Was ist ein Infrastrukturingenieur ...) Da es durch Nachahmung des Aussehens des Beamten und Pioniers betrieben wird, würde ich es begrüßen, wenn Sie mir sagen könnten, ob etwas nicht stimmt.

Referenzlink

Recommended Posts

Bis der Infrastrukturingenieur GitLab erstellt, um CI / CD auszuführen
[Einführung in das maschinelle Lernen] Bis Sie den Beispielcode mit Chainer ausführen
Führen Sie die Matrix zum Terminal Ihres Chefs!
Führen Sie flake8 und pytest auf GitLab CI aus