Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MOUR-2181 - Moving new relic deployment marker from bash to python; A… #18

Merged
merged 14 commits into from
Jul 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 63 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: CI Pipeline

on:
push:
branches:
- main
paths:
- 'new-relic-deployment-marker/**'
pull_request:
branches:
- '*'
paths:
- 'new-relic-deployment-marker/**'

jobs:
test:
runs-on: ubuntu-latest
if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'pull_request'
steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.11'

- name: Install dependencies
run: |
cd new-relic-deployment-marker
python -m pip install --upgrade pip
pip install --no-cache-dir -r test/requirements.txt

- name: Run tests
run: |
cd new-relic-deployment-marker
python -m pytest -p no:cacheprovider test/test_unit.py --verbose --capture=no

build-and-push-docker:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
needs: test

steps:
- name: Checkout repository
uses: actions/checkout@v3

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2

- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}

- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: new-relic-deployment-marker
file: new-relic-deployment-marker/Dockerfile
push: true
tags: sykescottages/bitbucket-pipes:new-relic-deployment-marker
163 changes: 163 additions & 0 deletions new-relic-deployment-marker/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,169 @@ config
.env
.DS_Store
aws
.env

.terraform
_provider.tf
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
# For a library or package, you might want to ignore these files since the code is
# intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock

# poetry
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
# This is especially recommended for binary packages to ensure reproducibility, and is more
# commonly ignored for libraries.
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
#poetry.lock

# pdm
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
#pdm.lock
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
# in version control.
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
.pdm.toml
.pdm-python
.pdm-build/

# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

# PyCharm
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
12 changes: 12 additions & 0 deletions new-relic-deployment-marker/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Changelog
All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).


## [0.0.1] - 2024-07-15
### Added
- Adding capability of finding application IDs in new relic and marking those apms with deployment marker. It uses Bitbucket commit hash as default for revisions.
- Backwards compatibility with previews bach pipe.

11 changes: 8 additions & 3 deletions new-relic-deployment-marker/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
FROM newrelic/cli:latest
FROM python:3.11-slim

COPY pipe.sh /
COPY requirements.txt /
WORKDIR /

ENTRYPOINT [ "/pipe.sh" ]
RUN pip install --no-cache-dir -r requirements.txt
COPY pipe /
COPY pipe.yml .

CMD ["python3", "/pipe.py"]
38 changes: 21 additions & 17 deletions new-relic-deployment-marker/README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,30 @@
# New Relic Deployment Marker
Mark new deployments in New Relic with this Bitbucket Pipe

## YAML Definition

Add the following snippet to the script section of your `bitbucket-pipelines.yml` file:

```yaml
- pipe: docker://sykescottages/bitbucket-pipes:new-relic-deployment-marker
NEW_RELIC_API_KEY: '<string>'
NEW_RELIC_APPLICATION_ID: '<string>'
NEW_RELIC_REGION: '<string>'
DEPLOYMENT_USER: '<string>'
DEPLOYMENT_REVISION: '<string>'
```
## Important
If you do not follow the new relic naming convention the deployment marker might not work. Make sure you're following the naming convention when generating an APM.

## Variables
## YAML Definition
### Variables

| Variable | Usage |
| --------------------- | ----------------------------------------------------------- |
| NEW_RELIC_API_KEY (*) | New Relic API Key |
| NEW_RELIC_APPLICATION_ID (*) | The ID of the application you want to tag. |
| DEPLOYMENT_REVISION (*) | The revision or the deployment ID to mark in NR|
| NEW_RELIC_REGION | Region the data is in. Defaults to US |
| NEW_RELIC_API_KEY (*) | New Relic API Key |
| APPLICATION_NAME (*) | The name of the application in New Relic to find the ID |
| ENVIRONMENT(*) | Environment name where the deployment is taking place (e.g., production, staging). |
| COMPONENT_TYPE (*) | The component type of the application in New Relic. Valid options are Web, Cmd, and Cron.|
| DEPLOYMENT_REVISION (*)| The revision or the deployment ID to mark in NR|
| DEPLOYMENT_USER | User responsible for this deployment, defaults to bitbucket.pipeline |
(*) = required variable. This variable needs to be specified always when using the pipe.

Add the following snippet to the script section of your `bitbucket-pipelines.yml` file:

```yaml
- pipe: docker://sykescottages/bitbucket-pipes:new-relic-deployment-marker
NEW_RELIC_API_KEY: '<string>' # Required. New Relic API Key.
APPLICATION_NAME: '<string>' # Required. The name of the application to find the ID for.
COMPONENT_TYPE: '<string>' # Required. The component type of the application to find the ID for. Options are Web, Cmd, and Cron.
ENVIRONMENT: '<string>' # Optional. Environment name.
REGION: '<string>' # Optional. Region name.
DEPLOYMENT_REVISION: '<string>' # Optional. Bitbucket commit hash for the deployment.
```
19 changes: 19 additions & 0 deletions new-relic-deployment-marker/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
version: '3.9'

services:
pipe:
build: .
environment:
- PYTHONUNBUFFERED=1
env_file:
- .env
volumes:
- ./pipe/pipe.py:/pipe.py
test:
build:
context: .
dockerfile: test/Dockerfile
volumes:
- .:/app
working_dir: /app
command: python -m pytest -p no:cacheprovider test/test_unit.py --verbose --capture=no
14 changes: 14 additions & 0 deletions new-relic-deployment-marker/env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
V2 variables
APPLICATION_NAME="AppName"
COMPONENT_TYPE="Web"
ENVIRONMENT="Staging"
SHORT_REGION="Ew1"
DEPLOYMENT_REVISION="build-1234"
DEPLOYMENT_USER="pipe.user" -> Optional
NEW_RELIC_API_KEY="NRAK-***"

V1 variables
DEPLOYMENT_REVISION="build-123"
DEPLOYMENT_USER="pipe.user" -> Optional
NEW_RELIC_API_KEY="NRAK-***"
NEW_RELIC_APPLICATION_ID="1234"
29 changes: 0 additions & 29 deletions new-relic-deployment-marker/pipe.sh

This file was deleted.

19 changes: 19 additions & 0 deletions new-relic-deployment-marker/pipe.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: "New Relic Deployment Marker"
description: "This Bitbucket Pipe helps you add deployment marker to New Relic APM. It finds the application ID in New Relic based on the application name and component type."
category: Utilities
variables:
- name: NEW_RELIC_API_KEY
default: "$NEW_RELIC_API_KEY"
description: "New Relic API Key"
- name: DEPLOYMENT_USER
default: "bitbucket.pipeline"
- name: DEPLOYMENT_REVISION
default: "$BITBUCKET_COMMIT"
repository: https://github.com/SykesCottages/bitbucket-pipes
vendor:
name: NewRelic
maintainer:
name: Sykes Cottages
tags:
- deployment
- NewRelic
Empty file.
Loading
Loading