====== Managed Gitlab CI: Python Example ======
**General Information**
If using GitLab.com, you can take advantage of their managed job runners with no setup beyond creating the gitlab-ci file.
This is an example of testing python code.
**Checklist**
* Account on GitLab.com
* A python script to test
----
====== Enable Shared Runners ======
Shared runners should be on by default for your project, but verify they are:
* Login to your account on GitLab
* Navigate to your project in GitLab
* Settings > CI/CD > Click Expand by Runners
* Ensure that they are enabled
----
====== CI File Examples ======
The .gitlab-ci.yml file belongs in the root of your project.
Create, commit and push the file to your project.
----
===== Python CI with Pip Installs =====
---
# GitLab CI Job
# Check python files syntax and security
# Docker image python 3.7
image: python:3.7
# Change pip's cache directory to be inside the project directory since we can
# only cache local items.
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
# Pip's cache doesn't store the python packages
# To also cache the installed packages, install
# them in a virtualenv and cache it as well.
# This allows multiple stages to use the same venv.
cache:
paths:
- .cache/pip
- venv/
# Setup the Python virtualenv
before_script:
- python -V
- pip install virtualenv
- virtualenv venv
- source venv/bin/activate
stages:
- build
- test
build:install packages:
# Install required packages for testing
stage: build
script: pip install bandit black
test:script syntax:
# Check syntax and formatting
stage: test
script: black --check *.py
test:test script security:
# Check for security issues - warn about them
stage: test
allow_failure: true
script: bandit --recursive *.py
...
* Note: This ci file could be shorter if the testing image you pull down already had black and bandit installed.
----
===== Python CI no installs =====
---
# GitLab CI Job
# Check python files syntax and security
# Docker image based on latest python 3
image: whowe/py3tester
stages:
- build
- test
build:verify packages:
# Verify required packages for testing
stage: build
script:
- "which bandit"
- "which black"
test:script syntax:
# Check syntax and formatting
stage: test
script:
- "black --check *.py"
- "black --check unit-tests/*.py"
test:test script security:
# Check for security issues - warn about them
stage: test
allow_failure: true
script: "bandit --recursive *.py"
...
----