Gitea and DroneCI
I use Gitea to self-host my code + projects here and I use DroneCI, a lightweight CI pipeline that integrates into gitea to do automation stuff.
Configuration of Drone + Gitea
TODO: write about setup here - docker etc
Drone CI Config
Drone works like many other CI systems - use yaml files in the repository to control builds. You can specify the type of CI run at the top level of the yaml doc and also give it a name:
kind: pipeline
type: docker
name: test and build
You can define multiple build steps - each one can have its own docker image - this is useful for example if you have a React frontend and a Golang backend and you need to build both
steps:
- name: test_backend
image: python:3.7
commands:
- pip install poetry
- poetry install
- poetry run pytest
- name: test_frontend
image: node
commands:
- npm install
- npm test
Shared State Between Steps
Conditional Execution of Steps
You can opt to only run steps under certain conditions. For example you might only want to publish code when stuff gets pushed to master. Use conditions to do this:
- name: publish
when:
branch:
- master
event:
exclude:
- pull_request
image: python3.7
commands:
- twine upload...
The drone documentation has a full set of conditions that you can use - you can also whitelist and blacklist certain events and certain branches
Secrets
Secrets can be used to pass things like auth tokens into CI pipelines. This is useful if you want to do things like publish packages or upload files. You essentially declare an environment variable and then define which "secret" it came from in your CI yaml file:
- name: publish
when:
branch:
- master
event:
exclude:
- pull_request
image: python3.7
environment:
GITEA_PACKAGE_REPO:
from_secret: gitea_package_repo
GITEA_OWNER:
from_secret: gitea_owner
GITEA_TOKEN:
from_secret: gitea_token
Then in the drone frontend you can add the value and it will be stored securely and passed to the CI at run time:
No Comments