Software Update Process & Procedures
This page describes the major steps in updating your IoT software. Once you are set up with the JFrog Connect environment, updating software on your IoT devices becomes a simple and reliable process.
To complete the update process described on this page, you will need the following:
Connect has created a process for updating software in your IoT devices that is simple and repeatable. The illustration below provides an overview of the process and the actors involved. The stages in the process are numbered to show the order of events, and each stage is described in detail below.
The stages described in detail below correspond to the stages indicated in the illustration.
You use Docker to create your container images. You will also use Docker Compose to create a compose.yaml file.
We recommend using Docker Compose, whether your device software requires one or multiple containers. With Docker Compose, you use a YAML file to configure your application's services. This enables you to easily manage the deployment of numerous microservices that may require numerous containers on the device. (Your specification in the YAML can include one or any number of Docker images to pull.)
You upload your container images and compose.yaml file to repositories in Artifactory. (You upload the compose.yaml file to a generic repository and the Docker image to a Docker registry.) For more information, see Docker Compose Best Practice.
Your Artifactory repositories will serve as your central point of truth for all of the binaries and artifacts that need to be included in a release. Files you keep here might include container images, application packages, installers, libraries, and configuration files. Over time you will accumulate additional versions of the binaries, and they will all be available to you in Artifactory.
If you have several files that you wish to keep stored together as part of the same release, you can keep them as a release bundle. Then Connect can simply pull the bundle for an update instead of pulling individual files from various locations in Artifactory. For more information about creating release bundles in Artifactory, see Release Bundle.
Using Connect, you create an Update Flow consisting of one or more action blocks. Use either Release Bundle or Deploy Containers as one of your action blocks. We recommend the following:
- Whether you use the Release Bundle or the Deploy Containers action block, choose Docker Compose in the configuration.
- Whether you deliver one or multiple containers, choose Docker Compose.
This will give you the consistency of using the same methodology and workflow all the time. For detailed examples of building the Deploy Containers and Release Bundle action blocks, see Build an Update Flow.
We also recommend parameterizing any of the fields in the update flow that will likely be different from one deployment to the next. You will fill in the values when the deployment actually runs. This is another practice that enables reuse of the update flow.
Once you have created a good update flow, you can reuse it tens or hundreds of times for subsequent software deployments.
After creating the update flow, you implement it by creating a Deployment. A deployment is an object that associates the update flow with a group of devices and defines the triggering for the update to take place.
When you create a deployment, you will be prompted to enter the values for the parameters you defined in the update flow. For example,
For a detailed example of building the deployment, see Deploy Docker Images to Device.
By default, when you save the deployment or when Connect receives the Deploy Update API command, Connect instructs the device to request the update artifacts. However, you can also schedule a later time for the deployment to run. This is ideal for updating the software at times when usage is low or other risk factors are low.
The Connect Agent in the device receives the Deployment and uses the path and filename of the Docker Compose YAML to pull the file from Artifactory.
The Docker Compose Agent in the device reads the YAML file received and uses the filename(s) and path(s) of the Docker image(s) to pull one or multiple Docker images from Artifactory.
The Docker Compose Agent in the device updates the Docker images on the device with the new ones it received from Artifactory.
When you need to update the software again, you will repeat all the stages in the process above with one major exception: you will not need to create a new Update Workflow. Once you have built a single, robust update workflow and run a successful deployment, you can use the same workflow to deliver:
- Later versions of the Docker images (i.e., in the new deployment, change the Artifactory path value for the Docker Compose YAML)
- Different Docker images containing different microservices (i.e., in the new deployment, use a different Docker Compose YAML and change the Artifactory path value to pull the new YAML)
- The same Docker images to different groups of devices (i.e., in the new deployment, change the Group(s) to which the updates are delivered)