Skip to content
Drone plugin for deploy images on a Kubernetes cluster with Rancher 2.x.
Ruby Dockerfile Shell
Branch: master
Clone or download
fabn Merge pull request #7 from uala/additional-options
Additional options for both rancher login and kubectl commands
Latest commit 3bfa26c Nov 14, 2019

README.md

Drone Rancher Deploy

Build Status

This drone plugin can be used to deploy images on a Kubernetes cluster with Rancher 2.x.

Plugin in action:

Execution

Usage

In order to use this plugin in one your Drone steps you can use the following step definition

steps:
  - name: rancher-deploy
    image: uala/drone-rancher-deploy
    settings:
      config: k8s-envs.yml
      dry_run: true
    environment:
      RANCHER_ACCESS_KEY:
        from_secret: RANCHER_ACCESS_KEY
      RANCHER_SECRET_KEY:
        from_secret: RANCHER_SECRET_KEY

Plugin image will read the given config (in your repository) and deploy all matching confiugurations.

Configuration file

Configuration file is a YAML (with ERB support) file stored in your repository and configured using plugin setting named config.

This file contains yaml definitions of services to update per Rancher Projects/Namespaces and credentials

develop:
  branch: develop
  server_url: "https://k8s.example.com"
  project: RancherProject
  namespace: my-namespace
  access_key: <%= ENV['RANCHER_ACCESS_KEY'] %>
  secret_key: <%= ENV['RANCHER_SECRET_KEY'] %>
  services:
    - web
    - worker
    - cron

Any configuration name can be used, plugin will skip those starting with a . (dot) in order to allow usage of YAML references as in the following example:

.common: &common
  branch: develop
  server_url: "https://k8s.example.com"
  project: RancherProject
  access_key: <%= ENV['RANCHER_ACCESS_KEY'] %>
  secret_key: <%= ENV['RANCHER_SECRET_KEY'] %>
  services:
    - web
    - worker
    - cron

develop:
  <<: *common
  namespace: develop

production:
  <<: *common
  namespace: production

Configuration file reference

  • branch: This is the most important settings, it contains a branch name that plugin will use to determine wheter this configuration must be deployed. It supports plain branch names and also a regexp (e.g. feature/.*). At DRONE_SOURCE_BRANCH will be used to match, in order to support both push and pull_request events in Drone.io.
  • only_tags: if true this configuration will be executed if and only if current deploy is running on a tag (n.b. it will NOT deploy even if branch regexp matches)
  • server_url: Your Rancher 2.x server url, mandatory
  • project: Rancher project name, used for context switch
  • namespace: Rancher namespace
  • access_key: Rancher access key used for authentication
  • secret_key: Rancher secret key used for authentication
  • services: YAML array of services to update in Rancher/K8S
  • image: Docker image used to update services, if not given a name will be built from repo/branch/commit.
  • login_options: Additional rancher login options (e.g. --skip-verify)
  • kubectl_options: optional, string, any additional flags to be passed to the kubectl command

It's advised to customize image name. Remember: you can use ERB in YAML config, so you can set this to something like

image: <%= "#{ENV['DRONE_REPO']}:ENV['DRONE_BRANCH']" %>

Tag check action

This plugin action is used to enforce that deployments of tags happens in a restricted branch. To use this feature you should configure the plugin in the following way

steps:
  - name: rancher-deploy
    image: uala/drone-rancher-deploy
    settings:
      action: tag_check
      enforce_branch_for_tag: <some-branch-name>
      enforce_head: true # Optional, default is false            

With this configuration plugin will check on what branches is the tag you're deploying and fails if tag is not on the given branch. With optional enforce_head flag plugin will also ensure that tag point to head of the given branch.

See integrations specs for this behavior.

Plugin settings

The plugin accepts the following settings:

  • config: mandatory setting, a file path (relative to your repository root) containing environments configuration
  • dry_run: setting this value to any non empty string will enable plugin dry-run mode, i.e. commands will printed to screen but they won't be executed
  • colors: can be used to disable colored output from executed commands. Default is true, setting it to false will disable colors.
  • logging: logging level of plugin, default is info, supported values: any Ruby logger valid level
  • action: action to use in plugin, one of [deploy, tag_check]
  • enforce_branch_for_tag: string, a branch name, used in tag_check action
  • enforce_head: boolean any non empty string will be considered as true, used in tag_check action

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and tags, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/uala/drone-rancher-deploy

License

Drone Rancher Deploy is released under the MIT License.

You can’t perform that action at this time.