drone-gitlab-ci is a CLI tool and CI/CD plugin that triggers GitLab CI pipelines from any environment. It serves as a bridge between different CI/CD platforms, enabling you to integrate GitLab CI into your existing workflows seamlessly.
In modern software development, teams often use multiple CI/CD platforms across different projects or services. This creates challenges when you need to:
- Cross-Platform Integration: Trigger GitLab CI pipelines from other CI/CD systems (Drone, GitHub Actions, Jenkins, etc.)
- Microservices Orchestration: Automatically trigger dependent service pipelines after deployment
- Unified Pipeline Management: Centralize pipeline triggering logic across diverse infrastructure
- Hybrid Cloud Workflows: Connect CI/CD processes across different platforms and environments
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Drone CI │ │ │ │ │
│ GitHub Actions│────▶│ drone-gitlab-ci │────▶│ GitLab CI │
│ Jenkins │ │ │ │ Pipeline │
│ Local Dev │ └──────────────────┘ └─────────────────┘
└─────────────────┘| Scenario | Description |
|---|---|
| Drone CI → GitLab CI | Use as a Drone plugin to trigger GitLab pipelines after Drone builds |
| GitHub Actions → GitLab CI | Trigger GitLab deployments from GitHub repositories |
| Jenkins → GitLab CI | Integrate GitLab CI into existing Jenkins workflows |
| Local Development | Manually trigger pipelines during development and testing |
| Microservices | Service A deployment triggers Service B pipeline automatically |
- Trigger GitLab CI pipelines via API
- Pass custom variables to pipelines
- Wait for pipeline completion with configurable timeout
- Support for self-hosted GitLab instances
- Cross-platform binary (Windows, Linux, macOS)
- Docker image available
- Native support for Drone CI, GitHub Actions, and other CI/CD platforms
- drone-gitlab-ci
Trigger a GitLab CI pipeline in 3 steps:
# 1. Download the binary (or use Docker)
go install github.com/appleboy/drone-gitlab-ci@latest
# 2. Set your credentials
export GITLAB_TOKEN=your-gitlab-token
export GITLAB_PROJECT_ID=your-project-id
# 3. Trigger the pipeline
drone-gitlab-ci --ref mainDownload from the release page. Supported platforms:
- Windows (amd64/386)
- Linux (amd64/386)
- macOS (amd64/arm64)
go install github.com/appleboy/drone-gitlab-ci@latestgit clone https://github.com/appleboy/drone-gitlab-ci.git
cd drone-gitlab-ci
make buildYou need a GitLab token to authenticate API requests. See GitLab Token Overview.
- Go to GitLab → User Settings → Access Tokens
- Create a token with
apiscope - Save the token securely
Find your project ID in Settings → General → General project settings.
For more details, see Pipeline trigger tokens API.
| Parameter | Flag | Environment Variables | Description | Required | Default |
|---|---|---|---|---|---|
| Host | --host |
GITLAB_HOST, PLUGIN_HOST, INPUT_HOST |
GitLab instance URL | No | https://gitlab.com |
| Token | --token, -t |
GITLAB_TOKEN, PLUGIN_TOKEN, INPUT_TOKEN |
GitLab access token | Yes | - |
| Project ID | --project-id, -p |
GITLAB_PROJECT_ID, PLUGIN_ID, INPUT_PROJECT_ID |
GitLab project ID | Yes | - |
| Ref | --ref, -r |
GITLAB_REF, PLUGIN_REF, INPUT_REF |
Branch or tag to trigger | No | main |
| Variables | --variables |
GITLAB_VARIABLES, PLUGIN_VARIABLES, INPUT_VARIABLES |
Variables to pass (KEY=VALUE) | No | - |
| Wait | --wait, -w |
GITLAB_WAIT, PLUGIN_WAIT, INPUT_WAIT |
Wait for pipeline completion | No | false |
| Timeout | --timeout |
GITLAB_TIMEOUT, PLUGIN_TIMEOUT, INPUT_TIMEOUT |
Timeout for waiting | No | 60m |
| Interval | --interval, -i |
GITLAB_INTERVAL, PLUGIN_INTERVAL, INPUT_INTERVAL |
Polling interval | No | 5s |
| Insecure | --insecure, -k |
GITLAB_INSECURE, PLUGIN_INSECURE, INPUT_INSECURE |
Skip SSL verification | No | false |
| Debug | --debug, -d |
GITLAB_DEBUG, PLUGIN_DEBUG, INPUT_DEBUG |
Enable debug output | No | false |
| GitHub | --github |
GITHUB_ACTIONS, PLUGIN_GITHUB, INPUT_GITHUB |
Enable GitHub Actions output | No | false |
Basic usage:
drone-gitlab-ci \
--host https://gitlab.com \
--token your-token \
--project-id 12345 \
--ref mainWith variables and wait for completion:
drone-gitlab-ci \
--host https://gitlab.com \
--token your-token \
--project-id 12345 \
--ref main \
--variables "DEPLOY_ENV=production" \
--variables "VERSION=1.0.0" \
--wait \
--timeout 30mEnable debug mode:
drone-gitlab-ci \
--host https://gitlab.com \
--token your-token \
--project-id 12345 \
--ref main \
--debugBasic usage:
docker run --rm \
-e GITLAB_HOST=https://gitlab.com \
-e GITLAB_TOKEN=your-token \
-e GITLAB_PROJECT_ID=12345 \
-e GITLAB_REF=main \
appleboy/drone-gitlab-ciWith wait and debug:
docker run --rm \
-e GITLAB_HOST=https://gitlab.com \
-e GITLAB_TOKEN=your-token \
-e GITLAB_PROJECT_ID=12345 \
-e GITLAB_REF=main \
-e GITLAB_WAIT=true \
-e GITLAB_DEBUG=true \
appleboy/drone-gitlab-ciAdd to your .drone.yml:
kind: pipeline
name: default
steps:
- name: trigger-gitlab
image: appleboy/drone-gitlab-ci
settings:
host: https://gitlab.com
token:
from_secret: gitlab_token
project_id: 12345
ref: main
wait: true
timeout: 30m
variables:
- DEPLOY_ENV=production
- VERSION=${DRONE_TAG}Create .github/workflows/trigger-gitlab.yml:
name: Trigger GitLab CI
on:
push:
branches: [main]
jobs:
trigger:
runs-on: ubuntu-latest
steps:
- name: Trigger GitLab Pipeline
uses: docker://appleboy/drone-gitlab-ci
with:
host: https://gitlab.com
token: ${{ secrets.GITLAB_TOKEN }}
project_id: 12345
ref: main
github: true
wait: truemake testmake buildmake lintMIT License - see LICENSE file for details.