Skip to main content

More on Site Architecture / CI/CD / and Repos

We're starting to move from the high level overview and more into the details of our project. 

Architecture
We established that we using React as our front end technology and ColdFusion as our server side. At a more granular level, we'll be using React with Redux for our front end app and we want our server side to be not just "ajax" enabled but a true REST API. To this end, we're going to incorporate Coldbox from Ortus Solutions.

Repos
These two code bases have different needs, and possibly locations, when they are deployed. As a result, we're going to have two repositories: one for the React and another for the API. This will allow us to keep our code separated and cleaner all the way through to deployment. 

For each of these repos, we'll follow the procedure we laid out previously with the MASTER branch being used to deploy to production and a DEVELOPMENT branch being used for active work which is then fed into the Master branch via pull requests. 

Testing
Code refactors over time as do processes. Our CI/CD and testing procedures are going to evolve over time as our app gets more complete and has different needs. CF will have BDD tests run by Testbox from Ortus. Our React app needs to be developed with JS based tests from Jest, Enzyme or other library. However, truth be told, I haven't gotten my head around any of these libraries yet so we're going to use a testing method I already use for front end testing which is Selenium. The library, CFSelenium, has provided a CF wrapper for Selenium and we'll use some work I've already built out to add onto that. By leveraging those aspects, we can use TestBox as the tool to drive both our CF testing and our React testing. This won't be true React unit testing but we will be able to do more than just test the DOM.

CI/CD
CF: One hang up for the CI/CD process is the need to learn Docker. I haven't been able to set aside the time to learn at the same time that I have a project to actually put it to use to get the practical aspects of it down. As a result, we are going to do the first iteration of our CI/CD using simple web-hooks to trigger our deployment and tests for our ColdFusion Rest API. 

React: Originally I was thinking that we would set up our CI/CD for React to deploy to a S3 bucket and attach a Cloudfront to it. That way we can server the static files easily from something "serverless" (i.e. something we don't need to mess with or maintain) and get those requests and cycles off of a server which we do need to maintain. However, I recently ran across AWS Amplify which has a great deal of promise for a low maintenance CI/CD for React. More on that later.   

Comments

Popular posts from this blog

Creating Stories and Tasks in Jira: Personas and our Software Development Team

Part of the CI/CD Development Series The next step is developing who is on our hypothetical development team. Given that it has a React front end and ColdFusion as the Server Side language, I came up with the following personas, all of which have their own needs and considerations for our development environment. I've listed all the jobs that need doing, not the people involved since, even on a small team or a team of one, these "hats" are all worn by someone, even if it's the same person. Personas for our Project Dev Ops Coordinator - The person responsible for smooth and accurate deployments CF Developer - The person responsible for the API and fulfillment code development and maintenance. React Developer - The person responsible for the front end development Database Coordinator - The person responsible for the schema, data, up time and, presumably the testing databases used by the developers. Lead Developer - The person responsible for coordinat...

CF: Scripting amidst the tags

Recently I had to do a quick "utility" page where I needed to see how many files from a directory listing had been recorded into a database. I've been writing about 98% of my CF code in script syntax but, since it was quick and easy, I did this quickly in tags because it was outputting directly to the browser. In doing so, I made an interesting discovery in that, when you use closures, even in tag based pages, you can write cfscript. Here's the example Get the directory listing:  < cfset alljs = directoryList(expandpath( '/src' ), true , "path" , "*.js" )> Get the database listings and convert it to an array < cfquery name = "alljsQ" datasource = "blah" > select * from sitefiles where filename like '%.js%' </ cfquery > < cfset recordedFiles = valuelist(alljsQ.filename).listToArray()> Use a filter function to weed out the files I'd already recorded < cfset missingFiles = alljs.fi...

As the Dev Ops Manager, I need to start planning our CI/CD release process

Part of the CI/CD Development Series Once we have our Deployment Diagram designed, we need to figure out out to get from here to there. If the end point is the appropriate server environment, the starting point is the developer with his/her hand on the keyboard. These steps take place on a variety of machines, within various process and can changes based on what files are checked in or not. At the moment, we've only created the early basics as seen below. The Beginning of our Deployment Activity Chart Even though there is quite a long way to go there are some elements which we have already been determined. For example We have determined the broad strokes of our technology stack. This is going to be React on the front end and ColdFusion on the server side. We have determined that we are going to be using linting on both the CF and React paths. CFLint for the CF and ESLint for the Javascript We have determined that we are going to be formatters - CFFormat for CF and...