- Provide interface to datomic database to WormBase website.
- Make sure correct WS version is specified in files
- Make get-assembly-json
- Change version of app in project.clj and docker-compose.yaml
- create tag (git hf release start ; docker hf release finish )
Run following commands and test each step happens correctly.
export WB_DB_URI="datomic:ddb://us-east-1/WS297/wormbase"
lein ring server-headless 8130
lein do eastwood, test
make docker-build
make run
docker ps -a
make docker-clean
git clone && checkout <tag>
eb init
make docker-tag
make docker-push-ecr
make eb-local
eb deploymake eb-local might fail, use eb create to create a new environment and test directly on EB
export WB_DB_URI="datomic:ddb://us-east-1/WS295/wormbase"lein ring server-headless 8130To run code-quality checks (linting and runs all tests):
- Before submitting a pull request.
- Before deploying a release.
lein code-qaRun lein eastwood to run the linting checks.
To have linting check for unused namespaces:
lein eastwood \
'{:add-linter [:ununsed-namespaces] :exclude-namespace [user]}'To run tests that watch for changes in the repo:
lein test-refreshTo run all tests:
lein testThe swagger UI displays a badge indicating whether the applications
swagger.json is valid according to the specification.
The official online validator cannot work with private IP addresses, so we need to run a local swagger validator in order in development.
By default, the application will assume a local validation service is
running at http://localhost:8002 (when using the lein :dev
profile). This is not required, but should you not be running the
service, the swagger UI page will display a broken image instead of
the badge.
Clone the swagger-validator-badge repository somewhere,
e.g ~/git, then run the swagger-validator service locally.
Set your [AWS Credentials] [AWS Credentials]: /WormBase/wormbase-architecture/wiki/AWS-Credentials
lein deploy clojarslein with-profile +datomic-pro,+ddb uberjarTo see inside the jar
jar tvf ./target/<jar-name>.jarTo test:
java -jar <jar-name>.jarBuild an uberjar (with ring server support) on the local machine to avoid having to download dependencies in the container:
make clean && make docker/app.jarBuild the docker image with jar created above, and run it on the default port (3000)
make build
make runElasticBeanStalk is used to launch the application in the AWS plaform, using Dockcer under ECS (Elastic Container Service), using a pre-built docker image container, stored in ECR (Elastic Container Registry).
eb initIn order for the make eb-local command to work, you must have first
tagged and pushed an image to ECR with:
make docker-tag
make docker-push-ecrThis assumes you have previously run make build and make run as
above, and tested that the API works.
The following command will use docker login to login to the ECR
repository, required in order to pull the image pushed.
Now to test the ElasticBeanStalk eb local run command, do:
make eb-local
With the new AWS Linux 2 deployment strategy, sometimes the make eb-local command won't work properly, failing to start the container, outputting an error while trying to run the app.jar file, among other things. In order to test, maybe creating the environment on EB with the eb create command is an easier approach.
Initial deployment:
make eb-createFor subsequent deployments, use the eb CLI directly:
eb deploy-
Update project.clj to new version with
-SNAPSHOTsuffix e.g: "1.0-SNAPSHOT" -
Update CHANGE.md with new "un-released" version header and "nothing changed" stanza:
##[0.1.3] - (un-released) - nothing changed yet. -
commit and push to develop.
The staging environment is relied on by staging.wormbase.org and runs the latest successful build of the develop branch.
Its deployment is managed by Jenkins CI server in response to commits to the develop branch. Containers are created from the source code, and deployed on the shared dev instance.
For Jenkins CI to accomplish these tasks, it needs to be setup to with the proper dependencies. Jenkins CI server is run as the jenkins user (on the shared dev instance). In general, providing the jenkins user with a similar setup, as would be given to a human developer, would be sufficient. For example, it should be able to access docker, maven, java, lein, Datomic-pro, etc.
Note:
- Datomic-pro needs to be manually installed or upgrade for the jenkins user. Failure to do so would break builds.
- Jenkins might need to be restarted after an installation or other changes. This can be done with
sudo /etc/init.d/jenkins restarton the shared dev instance.
For details about the Jenkins configuration, please refer to jenkins.wormbase.org.
TBD: JVM memory options.