Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nypublicradio/nyprsetuptools
https://github.com/nypublicradio/nyprsetuptools
cicd
Last synced: 1 day ago
JSON representation
- Host: GitHub
- URL: https://github.com/nypublicradio/nyprsetuptools
- Owner: nypublicradio
- Created: 2017-10-10T20:27:43.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-08-16T16:04:52.000Z (4 months ago)
- Last Synced: 2024-12-23T16:54:01.223Z (4 days ago)
- Topics: cicd
- Language: Python
- Homepage:
- Size: 111 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# NYPRSetuptools
**nyprsetuptools** provides a set of extensions to python's **setuptools** to
enable cross-project access to common build/test/deploy routines.## Including in setup.py
To utilize this library include these lines in a project's `setup.py` file.
The commands specified in `entry_points` are optional and the names are arbitrary.
Developers may wish to swap `DockerDeploy` for `LambdaDeploy` or even include
multiple deployment methods by adding an additional command `deploy_lambda`, for example.```python
setup_requires=[
'nyprsetuptools'
],
dependency_links=[
'https://github.com/nypublicradio/nyprsetuptools/tarball/master#egg=nyprsetuptools'
],
entry_points={
'distutils.commands': [
'requirements = nyprsetuptools:InstallRequirements',
'test = nyprsetuptools:PyTest',
'test_requirements = nyprsetuptools:InstallTestRequirements',
'deploy = nyprsetuptools:DockerDeploy',
],
'distutils.setup_keywords': [
'requirements = nyprsetuptools:setup_keywords',
'test = nyprsetuptools:setup_keywords',
'test_requirements = nyprsetuptools:setup_keywords',
'deploy = nyprsetuptools:setup_keywords',
],
}
```The example above would enable the `deploy`, `requirements`, and `test_requirements`
commands and override the default test behavior for `setup.py` with a pytest implementation.*TODO*: Version pinning is probably better than always targeting "master".
## Using stand-alone scripts
Aspects of the **nyprsetuptools** library can be used for non-python projects
via the `nyprsetuptools` command line interface.To get started, install the package.
```bash
pip install -U git+https://github.com/nypublicradio/nyprsetuptools.git
```### DockerDeploy
The `DockerDeploy` command is a wrapper for common tasks involved in deploying
images to AWS ECS.```
usage: nyprsetuptools DockerDeploy [-h] [--environment ENVIRONMENT]
[--ecs-cluster ECS_CLUSTER]
[--ecr-repository ECR_REPOSITORY]
[--tag TAG]
[--memory-reservation MEMORY_RESERVATION]
[--memory-reservation-hard MEMORY_RESERVATION_HARD]
[--cpu CPU] [--ports PORTS]
[--command COMMAND] [--test TEST]
[--test-user TEST_USER] [--fargate]
[--execution-role EXECUTION_ROLE]
[--no-service] [--wait WAIT]
[--migrate MIGRATE]optional arguments:
-h, --help show this help message and exit
--environment ENVIRONMENT
Environment to deploy
--ecs-cluster ECS_CLUSTER
Base name of AWS ECS target cluster
--ecr-repository ECR_REPOSITORY
Base name of AWS ECR Docker repository
--tag TAG Docker image tag
--memory-reservation MEMORY_RESERVATION
Soft memory reservation for container
--memory-reservation-hard MEMORY_RESERVATION_HARD
Hard memory limit for container
--cpu CPU CPU resource limit for container
--ports PORTS Comma-delimited list of ports to expose on container
--command COMMAND Command override for container
--test TEST Command to test container after build
--test-user TEST_USER
User within the container to run tests
--fargate Flag indicating that ECS task should run in Fargate
--execution-role EXECUTION_ROLE
Required with --fargate flag
--no-service Flag indicating that ECS task is not a service
--wait WAIT Integer value in seconds to wait for new tasks to
start
--migrate MIGRATE Command to run migrations
```### LambdaDeploy
**Note:** This functionality requires `boto3~=1.21` to deploy correctly.
If a lambda is being deployed that uses `boto3`, it must require a version of
`boto3` that is compatible with `nyprsetuptools`.### Using in CircleCI
This is an example that runs an application via Fargate, specifies additional tests,
and specifies a migration.```yaml
steps:
- checkout
- setup_remote_docker
- run:
name: Deploy
command: |
python -m venv ~/.venv
. ~/.venv/bin/activate
pip install -U git+https://github.com/nypublicradio/nyprsetuptools.git
if [[ "${CIRCLE_BRANCH}" == "demo" ]]; then
ENV=demo
TAG=demo
elif echo "$CIRCLE_TAG" | grep -qE "v[0-9]+\.[0-9]+\.[0-9]+"; then
ENV=prod
TAG="$CIRCLE_TAG"
else
exit 1
fi
nyprsetuptools DockerDeploy --environment=$ENV \
--cpu=256 \
--ecr-repository=myrepo \
--ecs-cluster=myrepo \
--execution-role=myrepo-$ENV \
--fargate \
--memory-reservation=1024 \
--migrate='./manage.py migrate' \
--ports=80 \
--tag=$TAG \
--test='python setup.py test' \
--wait=300
```This is an example that runs an application on an EC2-backed ECS cluster.
This example does not run tests or migrations.```yaml
steps:
- checkout
- setup_remote_docker
- run:
name: Deploy
command: |
python -m venv ~/.venv
. ~/.venv/bin/activate
pip install -U git+https://github.com/nypublicradio/nyprsetuptools.git
if [[ "${CIRCLE_BRANCH}" == "demo" ]]; then
ENV=demo
TAG=demo
elif echo "$CIRCLE_TAG" | grep -qE "v[0-9]+\.[0-9]+\.[0-9]+"; then
ENV=prod
TAG="$CIRCLE_TAG"
else
exit 1
fi
nyprsetuptools DockerDeploy --environment=$ENV \
--ecr-repository=myrepo \
--ecs-cluster=myrepo \
--tag=$TAG \
--wait=300
```This is an example that deploys a new tagged image without any service changes.
```yaml
steps:
- checkout
- setup_remote_docker
- run:
name: Deploy
command: |
python -m venv ~/.venv
. ~/.venv/bin/activate
pip install -U git+https://github.com/nypublicradio/nyprsetuptools.git
if [[ "${CIRCLE_BRANCH}" == "demo" ]]; then
ENV=demo
TAG=demo
elif echo "$CIRCLE_TAG" | grep -qE "v[0-9]+\.[0-9]+\.[0-9]+"; then
ENV=prod
TAG="$CIRCLE_TAG"
else
exit 1
fi
nyprsetuptools DockerDeploy --environment=$ENV \
--ecr-repository=myrepo \
--ecs-cluster=myrepo \
--tag=$TAG \
--no-service
```