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)