No description
Find a file
2020-04-02 11:48:28 +02:00
src/main breaking change: move build_commons_path from create_devops_build_config -> create_devops_terraform_build_config 2020-03-31 19:25:31 +02:00
.gitignore ignore ide settings 2020-01-28 12:11:02 +01:00
.travis.yml add travis 2019-09-04 18:45:29 +02:00
build.py breaking change: move build_commons_path from create_devops_build_config -> create_devops_terraform_build_config 2020-03-31 19:25:31 +02:00
LICENSE Initial commit 2019-09-04 16:57:40 +02:00
README.md Merge branch 'master' of github.com:DomainDrivenArchitecture/dda-devops-build 2020-04-02 11:48:28 +02:00

dda-devops-build

Slack | team@social.meissa-gmbh.de team@social.meissa-gmbh.de | Website & Blog

Setup

sudo apt install python3-pip
#sudo pip3 install pip3 --upgrade
pip3 install --pre pybuilder ddadevops --user
pip3 install boto3 python-terraform --user
export PATH=$PATH:~/.local/bin

Example Build

lets assume the following poject structure

my-project
   | -> my-module
   |       | -> build.py
   |       | -> some-terraform.tf
   | -> an-other-module
   | -> target  (here will the build happen)
   |       | -> ...
from pybuilder.core import task, init
from ddadevops import *

name = 'my-project'
MODULE = 'my-module'
PROJECT_ROOT_PATH = '..'

class MyBuild(DevopsTerraformBuild):
    pass


@init
def initialize(project):
    project.build_depends_on('ddadevops>=0.5.0')
    account_name = 'my-aws-account-name'
    account_id = 'my-aws-account-id'
    stage = 'my stage i.e. dev|test|prod'
    additional_vars = {'var_to_use_insied_terraform': '...'}
    additional_var_files = ['variable-' + account_name + '-' + stage + '.tfvars']
    config = create_devops_terraform_build_config(stage, PROJECT_ROOT_PATH,
                                                  MODULE, additional_vars,
                                                  additional_tfvar_files=additional_var_files)
    build = MyBuild(project, config)
    build.initialize_build_dir()


@task
def plan(project):
    build = get_devops_build(project)
    build.plan()


@task
def apply(project):
    build = get_devops_build(project)
    build.apply()

@task
def destroy(project):
    build = get_devops_build(project)
    build.destroy()

@task
def tf_import(project):
    build = get_devops_build(project)
    build.tf_import('aws_resource.choosen_name', 'the_aws_id')

Feature aws-backend

Will use a file backend.dev.live.properties where dev is the [account-name], live is the [stage].

the backend.dev.live.properties file content:

key = ".."
region = "the aws region"
profile = "the profile used for aws"
bucket = "the s3 bucket name"
kms_key_id = "the aws key id"

the build.py file content:

class MyBuild(AwsBackendPropertiesMixin, DevopsTerraformBuild):
    pass


@init
def initialize(project):
    project.build_depends_on('ddadevops>=0.5.0')
    account_name = 'my-aws-account-name'
    account_id = 'my-aws-account-id'
    stage = 'my stage i.e. dev|test|prod'
    additional_vars = {}
    config = create_devops_terraform_build_config(stage, PROJECT_ROOT_PATH,
                                                  MODULE, additional_vars)
    config = add_aws_backend_properties_mixin_config(config, account_name)
    build = MyBuild(project, config)
    build.initialize_build_dir()

Feature aws-mfa-assume-role

In order to use aws assume role in combination with the mfa-tool (pip install mfa):

the build.py file content:

class MyBuild(class MyBuild(AwsMfaMixin, DevopsTerraformBuild):
    pass


@init
def initialize(project):
    project.build_depends_on('ddadevops>=0.5.0')
    account_name = 'my-aws-account-name'
    account_id = 'my-aws-account-id'
    stage = 'my stage i.e. dev|test|prod'
    additional_vars = {}
    config = create_devops_terraform_build_config(stage, PROJECT_ROOT_PATH,
                                                  MODULE, additional_vars)
    config = add_aws_backend_properties_mixin_config(config, account_name)
    config = add_aws_mfa_mixin_config(config, account_id, 'eu-central-1',
                                      mfa_role='my_developer_role',
                                      mfa_account_prefix='company-',
                                      mfa_login_account_suffix='users_are_defined_here')
    build = MyBuild(project, config)
    build.initialize_build_dir()

@task
def access(project):
    build = get_devops_build(project)
    build.get_mfa_session()

Snapshot

  1. pyb publish upload
  2. Versions nr in build.py: hochzählen, *.dev0 anfügen
  3. sudo pip3 install --pre ddadevops==0.5.0.dev0 --user

Release

  1. Versions nr in build.py: *.dev0 entfernen
  2. git commit -m "release"
  3. git tag [version]
  4. pyb publish upload
  5. git push && git push --tag
  6. Versions nr in build.py: hochzählen, *.dev0 anfügen
  7. git commit & push
  8. sudo pip3 install --pre ddadevops==0.5.0.dev0 --user

Update to newest dev version

pip3 install --pre ddadevops==0.5.0.dev0 --user

License

Copyright © 2019 meissa GmbH Licensed under the Apache License, Version 2.0 (the "License")