Integration into the CI/CD pipeline¶
Release update¶
The rmk release update command automates the process of updating and delivering releases according to the version changes of artifacts, e.g., container images, following the GitOps methodology.
Since RMK is a binary file that can be downloaded and installed on any Unix-based operating system, it can be integrated with almost any CI/CD system: GitHub Actions, GitLab, Drone CI, Jenkins, etc.
Example of integration with GitHub Actions¶
Prerequisites:
- The project repository has already been generated and prepared using RMK.
Create the following workflow in your project repository at .github/workflows/release-update.yaml.
An example content of the GitHub Actions’ workflow:
name: Release update
on:
workflow_dispatch:
inputs:
image_repository_full_name:
description: Image repository full name of application.
required: true
version:
description: Current application version.
required: true
jobs:
release-update:
runs-on: ubuntu-22.04
steps:
- name: Checkout main repository
uses: actions/checkout@v4
with:
ref: ${{ github.ref }}
fetch-depth: 0
- name: Release update
env:
AWS_REGION: us-east-1
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
RMK_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN_REPO }}
RMK_SLACK_WEBHOOK: ${{ secrets.RMK_SLACK_WEBHOOK }}
RMK_SLACK_CHANNEL: rmk-test-cd-notifications
RMK_RELEASE_UPDATE_REPOSITORY: ${{ github.event.inputs.image_repository_full_name }}
RMK_RELEASE_UPDATE_TAG: ${{ github.event.inputs.version }}
run: |
curl -sL "https://edenlabllc-rmk-tools-infra.s3.eu-north-1.amazonaws.com/rmk/s3-installer" | bash
rmk config init --cluster-provider=aws --progress-bar=false --slack-notifications
rmk release update --skip-ci --deploy
In this example, we have prepared a GitHub Action that expects two input parameters:
image_repository_full_nameversion
As soon as a request with these parameters is sent to this action,
RMK will be executed, first analyzing all the releases.yaml files to match the image_repository_full_name and will
replace the tag field with the corresponding version if the versions differ. After that, it will
automatically commit the changes to the current branch in the releases.yaml files where changes have been found.
Then, it will synchronize the releases where the version changes were found.
An example of the releases.yaml file:
# ...
foo:
enabled: true
image:
repository: 123456789012.dkr.ecr.us-east-1.amazonaws.com/app.foo
tag: v0.1.0
bar:
enabled: true
image:
repository: 123456789012.dkr.ecr.us-east-1.amazonaws.com/app.bar
tag: v0.1.1
# ...
To fully automate code delivery in the CI pipeline, add a step that triggers the deployment after building and pushing the container image. This step should pass the full image repository name and tag via an API call using cURL or GitHub CLI. This ensures seamless deployment to the infrastructure environment.