TL;DR; This article will show how to implement the action "Gitlab Runner Service Action" in a "GitHub Workflow" that is triggered by a "GitLab-CI job", and this way having temporary GitLab Runners hosted by GitHub.
For more info about GitHub workflow
, check the official documentation
For more info about GitLab-CI
, check the official documentation
Steps
Step 1
Create a new GitHub repository with the following GitHub Workflow. File location: .github/workflows/gitlab-runner.yaml
name: Gitlab Runner Service
on: [repository_dispatch]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Maximize Build Space
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 512
swap-size-mb: 1024
remove-dotnet: 'true'
remove-android: 'true'
remove-haskell: 'true'
- name: Gitlab Runner
uses: edersonbrilhante/gitlab-runner-action@main
with:
registration-token: "${{ github.event.client_payload.registration_token }}"
docker-image: "docker:19.03.12"
name: ${{ github.run_id }}
tag-list: "crosscicd"
What does this workflow do?
This workflow will run just when the event repository_dispatch is triggered. The first step will be to increase the free space removing useless packages for our GitLab runner. And the second step will run the action that registers a new GitLab Runner with a tag crosscicd
, so start it and unregister it after a GitLab-CI job is completed with success or failure.
Step 2
Create a new GitLab repository with the following GitLab-CI config. File location: .gitlab-ci.yml
start-crosscicd:
image: alpine
before_script:
- apk add --update curl && rm -rf /var/cache/apk/*
script: |
curl -H "Authorization: token ${GITHUB_TOKEN}" \
-H 'Accept: application/vnd.github.everest-preview+json' \
"https://api.github.com/repos/${GITHUB_REPO}/dispatches" \
-d '{"event_type": "gitlab_trigger_'${CI_PIPELINE_ID}'", "client_payload": {"registration_token": "'${GITLAB_REGISTRATION_TOKEN}'"}}'
github:
image: docker:latest
services:
- name: docker:dind
alias: thedockerhost
variables:
DOCKER_HOST: tcp://thedockerhost:2375/
DOCKER_DRIVER: overlay2
DOCKER_TLS_CERTDIR: ""
script:
- df -h
- docker run --privileged ubuntu df -h
tags:
- crosscicd
What does this gitlab-ci?
The job start-crosscicd will trigger the GitHub workflow, creating the GitLab runner with the tag crosscicd
. And the job GitHub
will wait for a runner with a tag crosscicd
.
Step 3
Set the EnvVars in the new GitLab Repo
GITHUB_REPO:<username>/<github-repo>
GITHUB_TOKEN:<GitHub Access Token>
GITLAB_REGISTRATION_TOKEN:<GitLab Registration Token>
How to create a new GitHub Access Token:
Mark the item
workflow
and click in generate a token
How to get Registration Token:
Go to
https://gitlab.com/<username>/<repo>/-/settings/ci_cd
and click and expandRunners
Copy the Registration Token
Where to store the EnvVars?
Go to
https://gitlab.com/<username>/<repo>/-/settings/ci_cd
and click and expandVariables
Click in Add Variable and save it for each EnvVar
Step 4
Now your pipeline is ready to run the GitLab Runner in GitHub trigger by Gitlab-CI Job :)
Example
Video Demo
Screenshots
Code
Thatโs it!
In case you have any questions, please leave a comment here or ping me on ๐ LinkedIn.
Top comments (0)