This article introduces how you can use Pmbot to update your Gitlab projects with with Drone, a free, self hosted CI platform.
In this article, we will assume that:
- you already have a Pmbot installation up and running. We wrote a blog post on how to install Pmbot that you can find here.
- you have already connected your Gitlab instance via a git Provider. We wrote another blog post to get you started with Gitlab here.
- you already have a Drone instance up and running. A good place to start is the official documentation.
Connect Drone to Pmbot
In the setup wizard, we'll create a new CI provider. Let's select Drone as a CI provider.
Name your CI provider, toggle on "Self hosted", and fill in the URL of your Drone instance.
The personal token can be obtained in your user settings:
If you fill in your token at this stage, it will be global. If you leave it blank here, you will be required to add a token at the project level.
Now, click the "Add CI provider" button. You're now viewing your Pmbot dashboard.
Configure a project to run updates on Drone
We'll now click "Add first project", then search for our Git repository.
We'll select the first match for our search. This moves us to the next step where we'll configure the CI instance on which to run our updates.
We'll select our Drone instance. That will bring up the configuration form for this CI provider. The project path should be filled for you already, and the token can be left blank unless you haven't set a global token when creating the CI provider (see above). So here, we'll just click "next step".
Next, we'll setup the an update schedule. You can pick the branch, a period and a timezone.
Click Save to add the schedule. You'll now be able to click Enable project. You are now presented with the project home page.
This page shows you a basic
.pmbot.yml file that we'll add to our Git repository:
version: "1" packageManagers: - packageManager: name: npm actions: - name: auto-merge on: - success - partial
We'll also update our
.drone.yml as follows:
kind: pipeline type: docker name: default environment: PMBOT_URL: http://192.168.1.54:9118 PMBOT_PROJECT_ID: 5f2053468a7f7d4ecda640e6 # !!!!! place this in a project secret variable !!!!! # https://docs.drone.io/secret/repository/ PMBOT_TOKEN: 8786c9eb06ec35e65fddb48c58d13509 steps: - name: update image: pmbot/bot environment: PMBOT_SSH_PRIVATE_KEY: from_secret: PMBOT_SSH_PRIVATE_KEY commands: # skip this job for standard pipelines - if [ -z $PMBOT ]; then exit 0; fi # make node_modules available to pmbot CLI - npm ci # run the pmbot CLI - pmbot update --disable-host-key-verification # your existing build/test jobs - name: test image: node:12 commands: # skip this job when an update is triggered - if [ ! -z $PMBOT ]; then exit 0; fi - npm ci - npm test # notify pmbot of build status (must be the last step) - name: notify image: pmbot/bot when: status: - success - failure environment: PMBOT_SSH_PRIVATE_KEY: from_secret: PMBOT_SSH_PRIVATE_KEY commands: - pmbot notify --debug
Finally, you'll want to generate an SSH keypair:
ssh-keygen -b 2048 -t rsa -f /tmp/sshkey -q -N ""
and add the public key as a deploy key to your Git repository and the private key as a secret environment variable name
PMBOT_SSH_PRIVATE_KEY in your Drone project settings.
You can click I'm ready and run your first update.
We'll pick master:
Your update is now started.
Within a minute or so, you'l start seeing your dependencies being updated one after the other.
At the end of the update, you should see a summary of packages updated and actions executed.