Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
JFrog Connect was designed by and for developers of IoT and edge devices in a wide range of industries.
A basic assumption from the start was that the IoT and edge devices could be in complex network environments with conditions such as:
Limited connectivity
Located behind firewalls without a public IP address
IT staff not available at remote sites
Devices deployed outside of the data center security perimeter
Many different hardware platforms and configurations
Connect Agent periodically sends heartbeats containing status information about the device including CPU, RAM, and disk usage and information about any processes being monitored.
The Connect server manages all communications to and from the Connect Agents and performs a number of functions including the following:
Receives regular status and monitoring messages from the clients
Controls the software update process and all interactions with the agents including remote control and access, obtaining device details, and fetching files requested
Processes all interactions between the user interface and the Connect Agents
The Connect system supports a number of infrastructure configurations.
This includes a Connect account under a multi-tenant infrastructure, integrated with a single-tenant Artifactory for your software supply chain needs.
In this arrangement, the complete environment is isolated, with both Connect and Artifactory hosted on one of the major cloud providers.
This is an isolated, air-gapped environment, with Connect and Artifactory for setups that require separation from the outside world.
JFrog Connect adheres to industry standards and complies with relevant security and safety regulations to ensure the security of your data. Connect is also dedicated to enabling you to comply with your own internal security policies.
Among its security features, Connect supports JSON Web Tokens (JWTs) and uses them to support secure interactions between a Connect project and the Connect Agent on a device.
The Connect servers, databases, storage, and cloud environment are all based on AWS products with AES-256 encryption and live zone fallback combined with an extra layer of security, a separate Amazon Virtual Private Cloud (Amazon VPC).
is built with a robust client-server architecture scaling to support tens of thousands of edge devices.
The client consists of the running on the edge or IoT device. Connect Agent communicates with the outside world (i.e., the Connect server) as a client only, without using any open ports or listening servers.
The Connect server can work in a cloud SaaS mode or in self-hosted mode. Unless specified otherwise, the user documentation describes the cloud SaaS mode. If you have questions specifically about the self-hosted mode, please and we will be happy to discuss them with you.
The JFrog Connect console is a web UI that enables you full visibility and control of your devices. Using the console you can register devices, manage your fleet, check device status and details, create and deploy OTA updates, open a remote access session with an individual device, and take advantage of the full feature set described in the .
JFrog Connect provides a REST API enabling programmatic access and control, which is ideal for managing large fleets of devices. The enables you to embed the JFrog Connect functionality into your CI/CD pipeline and deploy OTA updates as part of new application releases. You can also use the Connect API to create a custom dashboard or integrate JFrog Connect information with an existing dashboard.
JFrog Connect is part of the . Connect is fully integrated with the rest of the JFrog supply chain, empowering developers to automate DevSecOps activities with best practices and continuous governance from developer to device.
Connect supports configuration with . Artifactory Edge (an "edge node") is an edition of JFrog Artifactory whose available features have been customized to serve the primary purpose of distributing software to a runtime such as a data center.
Learn more about the .
.
This page describes the major objectives of the JFrog Connect methodology for deploying software updates and describes key concepts for using Connect.
It is one thing to build a single update workflow and use it to deploy software to a few devices, but it is worth putting some thought and planning into how you will build and use workflows for maintaining your fleet over time. The goals of the methodology we recommend can be summarized in a few key points.
It is important to build an update mechanism that reduces chances of error and helps you get the most out of JFrog Connect capabilities. Just one example of this is using the On Failure and Rollback features. Once you specify what should happen when an action in the workflow fails, and you specify when and what type of rollback should occur, then you will know what the outcome of an action will be no matter what happens.
Another aspect of ensuring robustness is in building update flows that we know how to roll back. For example, if you run many commands that do different things like replacing packages on the OS, it might be very hard to build a proper rollback mechanism that turns everything back 100%, as you can't be sure exactly where the update failed and what specifically was done. Therefore, you should design and build flows that are highly controlled, so that in any case of failure you have a straightforward procedure for safe rollback.
While the JFrog Connect options enable you practically infinite possibilities to build your workflow and your update flows specifically, our objective is to recommend practices that help you build a minimal, yet flexible set of workflows that cover the update tasks for your fleet.
Build a process that you can repeat many times over. To gain confidence and consistency in your deployment method, you will want to create update flows that you can use over and over again. For example, you will need to know that you are performing exactly the same actions in your test environment as in production, and in production you may need to use exactly the same flows from one group of devices as in another. We’ll recommend practices for obtaining this kind of consistency so that you can have complete confidence in your deployments.
Think about how you will need to perform your software updates a few months or even a few years down the road so that you can start building your update flows the right way. This could include naming conventions for versions, workflows, and deployments and considerations such as containerization and management of binaries.
The ideal update flow will involve choosing one or more Docker containers that reside on an Artifactory repository, defining some parameters for dynamic deployments, and choosing an app version. To help you understand the process more deeply, the key concepts are described below.
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. For example, you specify which Docker images to pull from the repository, including one or any number of images. This enables you to easily manage the deployment of containers on the device.
While Connect can work with several binary repositories, we recommend JFrog Artifactory as the repository for large scale, enterprise class software deliveries. Artifactory:
Offers a comprehensive solution for managing and distributing software binaries and artifacts, such as container images, application packages and installers, libraries, configuration files, and virtually any other type of binary data that is produced during the software development and delivery process.
Supports all major package formats including Docker, Alpine, Maven, Gradle, Cargo, Conda, Conan, Debian, Go, Helm, Vagrant, YUM, P2, Ivy, NuGet, PHP, NPM, RubyGems, PyPI, Bower, CocoaPods, GitLFS, Opkg, SBT, Swift, Terraform and others.
Has a flexible architecture that can work in cloud-native, self-hosted, and hybrid, environments.
When you set up an update flow, you can parameterize any of the data fields. This enables you to reuse flows for multiple deployments while entering the values for the parameterized fields when you run the deployment.
For example, you build an update flow that uses Docker images. You need the flow to run the same action blocks in every deployment, but you intend to use a different Docker Compose configuration file for each deployment. You would make the path to this file a parameter that is filled in dynamically for each deployment. Connect would then pick up the correct configuration file for each deployment by looking in the path entered dynamically in each deployment.
You could take this a step further and use the Connect API to update your parameters upon deployment. This would be the recommended method to run automated deployments updating software for the entire fleet.
An App is simply a metadata name that you create for a deployment. When you deploy an update flow, you associate the app name and an app version with the deployment (e.g., one or more microservices or containers being deployed together) and the devices included in that deployment. In each deployment, you can update the app version as needed.
Once you have completed a few deployments, you can then use app and app version as a method of filtering devices for purposes of monitoring or performing further operations on those devices.
To get started with a JFrog Connect account, contact us at JFrog.
, part of the JFrog Platform, simplifies and secures the entire IoT development lifecycle. It unifies industry-leading artifact management, security, and enterprise-grade scalability for efficient software deployments to your IoT fleets. Manage your software supply chain, from developer to device, with a single platform.
Connect is part of the JFrog Platform, providing edge and IoT management at scale. Native integration with ensures efficient and trusted secure software releases by incorporating modern DevOps governance into the development cycle. Connect safeguards your deployments through integration with , which provides comprehensive of artifacts before they are deployed.
Connect transforms the way you deploy software to edge devices. to thousands of devices using commands, scripts, artifacts, files, or containers. This automated approach, along with Connect’s REST API, significantly reduces deployment times from days to hours while maintaining security and reliability. In case of deployment issues, Connect's configurable mechanisms ensure stability and quick recovery.
JFrog Artifactory, the native artifact manager for Connect, is recognized as a trusted source of artifacts. To provide another level of confidence in the supply chain, Connect utilizes an artifact scoping mechanism, ensuring only approved, user-defined artifacts within a project can be deployed to devices. The trust chain extends end-to-end, with communication between server and device secured through industry-standard .
Connect's lightweight design enables rapid device integration, taking less than a minute to . For , simply embed the Connect Agent into your device images to scale to thousands of devices.
You can tag each deployment with an . This is a convenient way to manage software deployed and ensure the devices are up-to-date with the latest versions and security fixes.
Troubleshooting becomes effortless with Connect's tools. Access and control devices from anywhere using the Terminal, Port Tunnel, File Fetch, and Remote Command features. Connect's security architecture enables access to devices behind firewalls or private networks while maintaining enterprise-grade security controls.
Connect provides comprehensive visibility into your device fleet through of device resources, including CPU, RAM, and disk usage. The platform tracks application status and device state, generating automated alerts to prevent issues before they escalate. Connect also supports custom data monitoring. For example, if your device produces data about temperature or humidity and sends it to Connect using the API, then Connect can monitor it according to thresholds you set.
Connect provides several tools to organize your fleet effectively. The flexible enables custom categorization, while project-level organization provides clear separation of devices between different deployment environments.
Connect supports a wide range of – including common Linux distributions (e.g., Yocto, Debian, Ubuntu, and Raspberry Pi OS) – and other OSs such as Windows. Connect also works with popular hardware platforms such as NVIDIA Jetson, BeagleBone, and Raspberry Pi.
Have a look at the high-level, including Connect Agent, network, and security information.
to get your JFrog Connect account and get started.
Once you learn some of the basics about , such as registering one or more devices, creating a single update workflow, and running a deployment, we would like to discuss some concepts and best practices that will help you enjoy the power and simplicity of JFrog Connect for maintaining a large fleet over the long term.
Using containerized applications and managing them with is an important piece in the overall chain for deploying updates to your IoT devices.
While there are numerous advantages to using that are beyond the scope of this page, we recommend that you use containers for deploying software with JFrog Connect for the simple reason that you will have far fewer binary artifacts to keep track of. Inside the container are all the necessary executables, binary code, libraries, and configuration files required to run the application, and the application will run the same, regardless of where it is deployed.
When you need to deploy software updates to hundreds or perhaps hundreds of thousands of devices, an important part of your delivery pipeline is the . By using this one common tool to govern all of your binaries and release artifacts, your organization can align to the same workflows and best practices that will assure quality and accelerate release velocity.
Is fully integrated with Connect as part of the . This means that you can upload a Docker Compose file to Artifactory, then easily select the file in Connect when creating an update flow.
The concept provides a simple yet powerful way to keep track of software running in your fleet. By assigning App Names and App Versions to your deployments, you can monitor and know at any time which code is running on each of your devices.
Learn about the recommended .
enables you to manage and secure your , from developer to device, with a single platform.
To start using JFrog Connect, contact us using the Connect form.
JFrog Platform integration with Connect makes IoT devices first-class citizens in a DevOps pipeline, ensuring speed, reliability, and security of IoT software updates with device management at scale.
At the heart of the JFrog Platform is JFrog Artifactory, the industry standard for universal binary repository managers. Artifactory provides end-to-end automation and management of binaries and artifacts throughout the application delivery and deployment process.
Connect creates two repositories in your new Artifactory account:
Connect-default-docker
Connect-default-generic
You can find your JFrog Platform instance domain at the bottom of the left navigation bar.
If you have registered to Connect before April 2022, do the following to find the JFrog Platform instance domain:
In the left sidebar, go to Updates and click the Create Update Flow tab.
Ensure the Connect Agent is 6.0.
Drag and drop the Artifacts action block and click it.
Ensure that the JFrog Account field is set to default-connect and click the eye to the right of the field. The instance domain is under JFrog Platform URL.
Regardless of the default Artifactory instance, you can configure your Connect account to work with a registry other than Artifactory.
To set up Connect to work with a different registry, see Registry.
When you create a account, a JFrog Platform account including Artifactory is also created for you. This enables you to easily upload binaries to an Artifactory repository and automatically pull artifacts for deployment to your edge devices.
When you use Connect as an integral part of the full JFrog Platform, you can take advantage of , the universal software composition analysis (SCA) solution. Xray proactively identifies open-source vulnerabilities and license compliance violations before they manifest in production devices.
and .
JFrog Connect Agent is a lightweight software service that keeps your devices connected 24/7. When you register a device with JFrog Connect, the Connect Agent is installed on the device.
Connect Agent was designed with a few key points in mind to give you a simple and secure experience:
Lightweight - Consumes about 4 MB of disk space and about 11 MB of RAM.
Always on - The Connect Agent service is always running in the background. Even when there is no Internet connection, the agent will always keep the device accessible remotely when the connection returns.
Zero dependencies - Designed to run like an add-on, i.e., no additional installations are required to make it work.
Smart network behavior - Only communicates as a client, using port 443 with the Connect Server. No open network ports or listening servers are required on the edge and IoT devices.
In addition, the Connect Agent:
Facilitates the software updates to the edge device according to the blocks defined in the Update Flows
Enables remote access and control commands to the device
Enables creation and configuration of firewall rules on the devices
Retrieves logs and any kind of data file stored on the device according to your request
The Connect Agent is project linked. This allows agents in different projects to have different configuration settings such as communication cycle and user access parameters. If you have multiple projects configured and you register a new agent, you will need to ensure that you associate the new agent with the intended project.
An agent acts as standalone software with regard to installation. If you re-install the same version of an agent on the same device, the new agent will have a different token and will be counted as a new device. In addition, the old device is not removed from the database in the Connect Server and appears in offline state in the web UI until you delete it.
Connect Agent is designed for easy installation and compatibility on any Linux-based operating system and is suitable for use on a variety of hardware architectures including SOC, SOM, and SBC, as long as the OS is Linux-based.
The Connect Agent is compatible with popular hardware platforms such as NVIDIA Jetson, BeagleBone, and Raspberry Pi, and will work with any hardware platform meeting the following specifications:
Minimum total device resources:
30MB RAM
30MB Disk space
Core Architecture:
ARM:
ARMv5, ARMv6, ARMv7, ARMv8 - 32 and 64 bit
Cortex-A required for all ARM processors
Intel: x86 and x86_64
You can use a wide range of operating systems, including Windows and the following Unix-based OSs:
Yocto-based build
Ubuntu
Debian
Centos
Raspberry Pi OS
Arch
Custom Debian build
Systemd/SysV (init.d) service manager must be installed on the client device.
The device must be configured to allow Write permission to the Connect Agent.
From time to time a new version of the Connect Agent will become available. The Connect Agent updates ensure that IoT devices are running the latest software and are able to communicate with the JFrog platform effectively.
The new agent version is not deployed automatically. When a new version is available, you can initiate an OTA update process at your convenience to update the agents on your connected devices. The update process takes place in the following stages:
Agent Version Management: Connect keeps track of the versions of the agents running on each device and compares them to the latest version available.
Notification: When a new version of the agent is available, a notification appears in the web UI and a release note will be available.
Initiation: In the Connect Agent Update page, you initiate the OTA update process.
Update Verification: Connect verifies that the update has been applied successfully to each device. If a device fails to update, Connect can retry the update or alert the appropriate personnel.
Post-update Verification: After the update process completes, Connect can verify that the new version of the agent is running (online/offline) on each device.
JFrog Connect Agent version 7.0 employs a trust mechanism that uses JSON Web Tokens (JWT) for secure interactions between the agent and a Connect project.
Connect Agent sends regular heartbeat messages to the Server. The messages include updates on your edge device’s up/down status, CPU, RAM, and disk usage. The heartbeat messages also provide updates on any of the processes and custom data being monitored. The default heartbeat interval is 25 seconds, and this can be configured in the Settings (in the JFrog Connect console) to best suit your use-case needs.
Learn more about JFrog Connect’s .
High-level overview of JFrog Connect network specifications.
As one method of enhancing network security, there are no open ports or running servers on the edge devices. Communication with Connect Agent works via outbound requests to ensure zero attack surfaces for attackers.
The edge device uses UDP and port 53 to resolve hostnames and connect with the JFrog Connect servers.
The Connect Agent and servers communicate on TCP as follows:
All other client-server communication uses HTTPS TLS encryption on port 443
To use JFrog Connect, ensure that the following Outbound domains and IP addresses are on your allowed list:
api.connect.jfrog.io
3.127.6.122,
35.159.42.141
connect.jfrog.io
3.127.6.122,
35.159.42.141
remote.control.jfconnect.io
18.158.153.17
forwarding.jfconnect.io
3.70.153.137
The following IP addresses should also be added to the allowed list. They are currently not bound to any domains, but are reserved for future use.
35.158.29.166
18.198.83.150
52.59.156.195
35.157.243.155
18.185.67.99
Domain: remote.control.jfconnect.io
Static IP: 18.158.153.17
Ports: 442, 443
Domain: forwarding.jfconnect.io
Static IP: 3.70.153.137
Ports: Will try 22 first, then 443, then 80
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.
Using Connect, you create an Update Flow consisting of one or more actions. Use either Release Bundle or Deploy Docker as one of your actions. We recommend the following:
Whether you use the Release Bundle or the Deploy Docker action block, choose Docker Compose in the configuration.
Whether you deliver one or multiple containers, choose Docker Compose.
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,
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 YAML file received in the device uses the filename(s) and path(s) of the Docker image(s) to pull one or multiple Docker images from Artifactory.
The Docker Compose 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)
is based on client-server architecture. This page provides a high-level overview of the network specifications for JFrog Connect operating in cloud SaaS mode.
If you have questions about additional requirements, please to discuss.
uses SSH protocol on port 442 or 443
Remote access using uses SSH protocol on port 22
enable you to easily connect to the edge device. All requests are outbound from the device to JFrog Connect servers. If there are strict network policies, allow outbound requests as described below.
and .
Learn how JFrog Connect fits into your larger .
Your fleet of IoT devices is registered in as described in .
Docker and installed.
For more information about using Docker Compose with Connect, see .
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 .
This will give you the consistency of using the same methodology and workflow all the time. For detailed examples of building the Deploy Docker and Release Bundle actions, see .
For a detailed example of building the deployment, see .
Learn how to that you will use over and over again.
Learn how to register a device and deploy an update at the same time.
For example, If you would like to make sure that all devices registered to your fleet are automatically updated with the latest software, or, some kind of configuration that initiates after a successful factory reset.
Instead of registering the device via the installation command or a pre-made image, we will use a Python script on the device that will register and deploy an update to itself.
Prerequisites:
REST API enabled
Be familiar with our API and tokens - Overview
Python3 is installed on the device.
requests library installed on the device
The script performs the following:
Registers the Device to Connect, according to the selected project
Deploying an update flow that was previously configured in the platform.
Even if the device is already registered, the update will still be deployed.
Instructions:
Take the code below and edit with the following configuration at the top:
USER_TOKEN - Your user token, can be taken from Settings > Account > Show User Token.
PROJECT_NAME - The name of the desired project that the device will be connected to.
UPDATE_FLOW_ID - ID of the desired flow to be deployed on the device, the flow must be a part of the project above.
2. Copy the script to the device
3. Choose when the script would run, some prefer having it running after the next power-on, while others initiate it with their on-device application.
Registration and Update deployment is a common use-case that might be useful for several scenarios, for such cases we created a script by using our to register the device and deploy an update at the same time.
An is created and ready to deploy
Learn how to using projects, groups, and tags.
Plan the big picture, your software update strategy using JFrog Connect.
How will you organize your fleet, create re-usable workflows, and use the many tools in Connect to manage your fleet efficiently over the long term?
In this chapter, we introduce some key concepts and walk you through an idealized use case that does not go into all the numerous variations possible. You can then use this as a model for building your own strategy according to your specific business needs.
Once you learn some of the basics about , such as registering a device, creating an update flow, and deploying a software version, it’s time to think about the big picture.
Learn some of the .
When scaling to production, provisioning each device manually could be a time-consuming task. JFrog Connect enables you to register devices automatically by embedding the Connect Agent in your device.
You need the following before starting the procedure:
Internet connectivity with the devices
Complete the following steps:
Disconnect the device from the Internet.
Delete the settings.json file at the path indicated below:
/etc/connect/service/settings.json
Create a new settings.json file in the same location and add the following content:
{"pairing_token":"<pairing_token>", "device_name":"", "device_group":"", "software_version":"", "device_token":""}
Get the <pairing_token>
. You can get your token in the Connect web UI. Go to Devices and click Register Device. To generate the token, click Generate Token.
Save the file. Do not reconnect the device to the Internet until you have duplicated the image.
Delete the settings.json file at the path indicated below:
/etc/connect/service/settings.json
Create a new settings.json file in the same location and add the following content:
{"user_token":"<user_token>", "project_name":"<project_name>", "device_name":"", "device_group":"", "software_version":"", "device_token":""}
Change the <user_token>
to your account token. You can find your token in the Connect web UI under Settings.
Change the <project_name>
to the project you want the device to be registered to. You can find your projects in the Connect web UI under Settings.
(Optional) You could set the value of <device_name>
to “$HOSTNAME”
or to some other variable. Then the device name that appears in the web UI will be the host name of each device (or a different name depending on the variable you use for the <device_name>
value.
Save the file. Do not reconnect the device to the Internet until you have duplicated the image.
Duplicate this device image, and burn it on other SD cards or eMMC flashes.
Boot a new device that has the duplicated image. Connect Agent will automatically recognize that it is running on new hardware and will register the device as a new device.
Repeat the step above for all of the devices with the new image.
The new devices now appear in the Web UI on the Devices page. You can view them there and edit any of the details as necessary.
You can set the device name and group automatically either before or after the devices are registered.
After the device registers to the platform, the settings.json
file is encrypted and you will not be able to modify it anymore.
You can set the device name and group by setting the <device_name>
and <device_group>
keys in the settings.json
file before the device registers to the platform. This means that you are creating a unique settings file for each device, so it is recommended to write a script that will generate the files.
In order to set the device name and group correctly, we recommend including the following steps in your script:
Run a script on the device boot using crontab or init.d.
Check if /etc/connect/service/settings.json
already exists. If it exists, finish the script.
If it doesn't exist, generate the device name (by any method you would like).
Create the /etc/connect/service/settings.json
file including the correct values.
Change the file permissions by running
chmod 777 /etc/connect/service/settings.json
If no device name or group has been defined, the Connect Agent will register the device with a generic name “New device” to the group “Production”.
If you are using the Connect API, you will need the device token. To receive the device token, run the agent binary with the flag --print-token
. The command is:
/etc/connect/service/ConnectAgent --print-token
This page describes how to install the on a fleet of devices without the need to register each device manually.
Devices meet minimum hardware, OS, and software requirements as described in
JFrog Connect account created and a project defined as described in
Install Connect Agent on a single device by completing the procedure in .
The device name and group can be changed using Connect API request, . By using the API, you can run a script on the device that will change the name and group after device registration.
Learn how to that includes your OS and the Connect Agent binary.
Two ways to log in to JFrog Connect.
Using this method, you log in to JFrog Platform first, and then go from the Platform to Connect.
To log in to JFrog Platform, do the following:
In your web browser, enter the JFrog web address with your account name and type Enter. For example, if your account name is frogs123, then enter frogs123.jfrog.io and type the Enter key.
After the Welcome to JFrog page appears, enter your Username and Password, and click Login.
When the JFrog Platform page appears, go to the left navigation bar and choose Connect IoT.
The JFrog Connect dashboard page appears and you can start working in your Connect account.
Using this method, you log in directly to Connect using the URL to the Connect dashboard page.
To log in to Connect, do the following:
When prompted, enter your email address and click Continue.
After the Welcome to JFrog page appears, enter your Username and Password, and click Login.
The JFrog Connect dashboard page appears and you can start working in your Connect account.
There are a few ways to register a whole fleet of devices. This page provides an overview and describes two simple methods.
Once you understand the possibilities, you can choose the procedure that is right for you.
Therefore, a method for registering devices at scale must include:
Obtaining the Connect Agent, for example, one of the following:
Register a single device from the web UI
Obtain the Connect Agent binary from JFrog Connect Support
Creating an image for duplication, for example:
Freeze an image of a registered device
Build a Linux-based image that includes the Connect Agent binary
For the sake of simplicity, we describe two methods for registering large numbers of devices at a time that incorporate the above requirements. You can choose the method that is suitable for you.
In this method, you register a single device and then take a freeze of the OS image to copy to other devices. This method is advantageous if you have a real device with internet connectivity and the OS of that device is exactly what you want on all other devices.
This procedure consists of the following major steps:
Take a freeze of the OS image on the device.
Burn the image on SD cards or eMMC flashes.
This method is suitable if you would like to build a custom image that includes the Connect Agent. For example, you may want to create an image that includes your off-the-shelf Linux-based OS, some applications that will run on the device, and the Connect Agent. As another example, you want to build a completely customized Linux- based OS for your IoT device and include the Connect Agent. You can create this image in a lab environment, i.e., on your PC, and an actual IoT device is not required.
This procedure consists of the following major steps.
Get a copy of the Connect Agent on your PC. (To obtain a copy of the Connect Agent binary, contact JFrog Connect Support.)
Copy the Connect Agent to your OS file system.
Burn the image on SD cards or eMMC flashes.
Learn the detailed procedures for registering devices at scale:
Connect a single device using the wget command on your device.
You need the following before starting the procedure:
Internet connectivity with the device.
To register a device, complete the following steps:
The Project-Device pairing token will be linked to the project that is in the main filter. In the Connect web UI, go to the project filter and choose the project to which the device will be paired.
In the Connect web UI, click Register Device on the top right.
In the Device Registration popup, choose whether the wget
command should run as a root or non-root user on your device.
Generate the project-device pairing token.
(Optional) Enter values for the optional parameters. If you do not enter the values now, you can enter them later in the Devices page of the web UI.
Review the command generated at the bottom and copy it to your clipboard.
Open the command line terminal on your device, paste the command from your clipboard, and run it.
In Step 4 above, you can enter values for the optional parameters listed below. If you do not set them in the registration command, you can set them in the Devices page of the UI after the registration has been completed.
Device Name: Sets a device name when the device is registered. If you don’t enter a device name, the device will be given the default name New Device
followed by a number, for example, New Device 14
.
Group: Assigns the device to a specific group at registration time. The group must exist already.
Application Name: The Connect Agent will be called the name that you enter.
Application Version: If you entered an application name, you must also enter a version.
After you enter the registration command, you may need to wait several seconds until the new device appears on the Devices page. If the device does not appear, try the steps below.
Check the network connection of your device.
Ensure that systemd
or SysV
is installed.
If you are using SysV
, ensure that the systemd
directory does not exist: /etc/systemd/system
.
Run the installation command as a root user.
Use Projects to set up completely separate environments within your JFrog Connect account. This page describes how to create and configure a project.
To create a project, click the Project filter on the top left bar, and do the following:
In the dropdown menu, choose +Add Project.
Enter the following:
Project Name: A name for the project that is alphanumeric and does not contain spaces.
Project Key: A unique string that identifies your project. The project key can be used to group together objects that belong to the same project, for example, in the audit log. Starting with a letter, the project key is lowercase alphanumeric and has 2 to 32 characters.
When Connect creates a project, the project has default values. You can change these at any time.
Device Locations: A new project will not have any devices assigned to it. However, when a device registers to the project, its location is set automatically by geolocation using the public IP address of that device. To reset the location using the current IP address, click Refresh Location.
To start populating your new project, you need to add some users. You can define Project Permissions which are project specific, so for example, you can create users who can see only this project, and not others. Likewise, you can make your new project invisible to some other users in your account.
To add users, go to the procedure in Add User to New Project.
There are several options for adding devices to the new project:
Learn how to add users to a new project.
This page describes how to insert the Connect Agent into an OS image build in order to deploy JFrog Connect to a large number of devices.
This method is suitable for off-the-shelf and custom linux-based operating systems. This procedure uses Yocto OS as an example, but it is applicable to other OS’s as well.
You need the following before starting the procedure:
Internet connectivity with the devices
The requirements and parameters specifically for Yocto are shown below.
Systemd or init.d and Cron. It is recommended to use Systemd:
DISTRO_FEATURES_append = " systemd"
VIRTUAL-RUNTIME_init_manager = "systemd"
DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"
VIRTUAL-RUNTIME_initscripts = ""
OpenSSH:
CORE_IMAGE_EXTRA_INSTALL_append = " openssh"
For other operating systems, the requirements are similar:
Systemd or init.d (systemd is recommended)
Cron
OpenSSH
To obtain the Connect Agent binary file, contact JFrog Connect Support.
Open the file connect/service/settings.json
Fill in the value for <pairing_token>
. To find this, go to the Devices page and click Register Device. Below is an example of a settings.json file with the values filled in.
{"pairing_token":"the-pairing-token", "device_name":"","device_group":"", "software_version":"", "device_token":""}
Save the file.
Copy the following files and folders to your OS (i.e., Yocto) file system:
/connect/
folder to /etc/
connect.service
file to /etc/systemd/system/
connect.service
file to /etc/systemd/system/multi-user.target.wants/
Open the file connect/service/settings.json
Fill in the values for <user_token>
and <project_name>
. To find these, go to the Devices page and click Register Device. Below is an example of a settings.json
file with the values filled in.
{"user_token":"YourUserTokenXxxxyyyy","project_name":"Demo","device_name":"","device_group":"","software_version":"","device_token":""}
(Optional) If you leave the values of <device_name>
and <device_group>
blank, by default the devices will register with the generated name "New Device" and group "Production". However, you could set the value of <device_name>
to “$HOSTNAME”
or to some other variable. Then the device name that appears in the web UI will be the host name of each device (or a different name depending on the variable you use for the <device_name>
value).
Save the file.
Copy the following files and folders to your OS (i.e., Yocto) file system:
/connect/ folder
to /etc/
connect.service
file to /etc/systemd/system/.
connect.service
file to /etc/systemd/system/multi-user.target.wants/
Duplicate the OS image and burn it on your SD cards or eMMC flashes.
Boot the new devices that have the duplicated image. Connect Agent will automatically recognize that it is running on new hardware and will register the device as a new device.
JFrog Connect uses projects and groups as a way to manage large device fleets. This is an introduction to projects, groups, and other ways of segmenting your fleet into manageable subsets of devices.
Once you have more than a few devices in your fleet, you need a way to segment the fleet into manageable subsets of devices. This becomes even more important when your fleet numbers in the hundreds, thousands, or even hundreds of thousands of devices.
Typically, you will want to distinguish between different sets of devices such as Testing and Production. In addition, there could be many other ways you need to separate between devices, such as different:
Geographical and physical locations
Departments and organizational divisions
Hardware devices (e.g., cameras vs. robots)
Hardware versions
Operating systems
Software applications and versions
The Project is the highest organizational level in a Connect account. An account must have at least one project. The first project is defined by default when you create an account. Once the account is created, you can create additional projects.
Each project is an entirely separate environment that enables you to differentiate between users and devices that belong to a different product or use case. Therefore, each project has its own settings and properties. For example, a project can have its own users, permissions, and subgroups of devices which are completely separate from other projects in your account. You can view the project settings in the Project tab of the Settings page.
Some typical uses of projects could be:
A business that has facilities in different locations. Each location has its own project, as different people need access to the devices in those locations.
Two different teams working on two different solutions. They would use the same Connect account, but be separated into two separate projects.
Within a project, you can divide the devices into groups. All of the groups within a project have the same project configuration, but they are made up of different devices. A typical example would be groups that distinguish between different stages of a project, such as development, staging, and production.
When you register a new device, it is assigned by default to the Production group. If you already have additional group names defined, you can set the desired group for a device using a flag when you run the Registration command.
Devices can be assigned to groups using either the web UI or the Connect API.
You can always create a new group in your project. In addition, you can create groups with a group. This enables you to create hierarchies that suit your business needs. Although there is no limit to the number of levels you can create in your group hierarchy, we recommend planning this carefully so that your structure does not go too deep. A flatter hierarchy structure makes it easier to remember where your devices are in the organization.
A tag is a user-defined parameter that enables you to identify devices with unique attributes. Tags provide an additional way that you can group devices. In particular, tags enable you to associate devices that belong to different groups. The following are some examples of how you might use tags.
You create a tag called Staging to indicate that a certain device is used for testing only.
You create a tag called headless, which indicates that the device does not have a monitor connected to it. You might have a small number of Headless devices existing in several groups.
You create a tag called new-gen, which you use to mark all devices that use a newer generation of hardware or software.
When you have tagged devices, you can then use the tag as a filter to select only certain devices. This enables you to perform numerous actions on a set of tagged devices such as updating software, stopping, starting, rebooting, and others.
You can use the Application feature to define Application names on sets of binaries that are deployed to the edge devices. This is, in effect, another way of grouping devices in your fleet. For example, all devices having Application X makes up a subset of devices that you can query on and perform various actions on. Like tags, applications returned in your searches could belong to a subset of devices in a group, or might belong to devices in different groups.
Learn more about:
Move one or more devices from one JFrog Connect project to another.
When you move a device, the following information is moved with it: device name, MAC address, IP address, location, description, device OS, UUID, and application name and version. Other information that is associated with the specific project, such as tags, monitoring, alerts, deployments, and deployment history, will not be moved with the device. Any tags, monitoring, or alerts required will have to be configured in the new project.
You have the following Project Permission in your current project and in the destination project: Register new devices and Move devices to other projects.
Before you choose specific devices to move, you need to set the main device filter to display devices in the relevant segment of your fleet.
To choose your devices and move them, do the following:
On the left side of the Devices table, mark the checkboxes next to the devices that will be moved. You can use the checkbox at the top of the column to mark all or unmark all of the devices.
Click Move to Project.
In Move Devices to Another Project, choose the parameters below and apply them.
Destination Project: The name of the project to which you are moving the device(s). The dropdown list will display only the projects in your account where you have permission to register devices.
Destination Group: The name of the group in the destination project where you are moving the devices.
After you have applied the move, you can switch to the other project and see that the devices appear in the Devices table. If you do not see them, you can search for them in the Search bar or apply a different filter to the Devices table.
This page describes two different ways you can log in to .
In your web browser, enter the dashboard URL, for example, , and type the Enter key.
Learn how to ?
By design, is able to register new devices by duplicating an image that has the Connect Agent installed inside it. When a new device is connected to the Internet, the device registration algorithm is initiated. The algorithm recognizes new devices if they do not have a device token yet. The device token is then generated and saved encrypted in the settings.json
file.
.
For the detailed procedure, see .
For the detailed procedure, see .
This procedure is applicable for registering a device that has Connect Agent version 7.0 or higher. Whenever you register a device to , the latest Connect Agent version will be downloaded to the device.
Device meets minimum hardware, OS, and software requirements as described in .
JFrog Connect account created and a project defined as described in .
See the page for common issues and fixes.
Learn about methods of .
creates the first in your Connect account when the account is created. If you need to support multiple Connect environments that have different use cases with different users and permissions defined, you can do this by creating multiple projects in your account. Each project is completely separate and has its own definition properties.
: A project is created with two default groups, Test and Production. You can change these or add more groups. For more information about creating, modifying, and deleting groups, see .
To register a new device to the project, go to:
If you are ready to register several devices to the project, use one of the procedures in:
If you need to move some devices from an existing project to the new one, use one of the procedures in:
Devices meet minimum hardware, OS, and software requirements as described in
account created and a project defined as described in
The new devices now appear in the Web UI on the Devices page. You can view them there and edit any of the details as necessary. To change the device names and groups automatically, complete the procedure in .
Learn a simple way to deploy software updates to your fleet by creating .
JFrog Connect provides easy-to-use tools that enable you to segment your fleet into manageable groupings and hierarchies. Projects and Groups enable you to segment devices into hierarchical subsets, while Tags and Applications enable you to create non-hierarchical subsets of devices that can reach across different Groups. When you combine the use of all of these tools, you can have control over a large fleet with ease.
For information about creating, configuring, and deleting projects, see . To register a device into a project, see .
For information about creating, rearranging, and deleting groups, see .
For information about creating and removing tags, see .
For more information about creating and using applications, see .
How to
A recommended
As you with , you may want to move devices from one project to another. You can move devices easily using the procedure below.
At least two defined in your account and one or more defined in each project.
Go to the Devices page and that will display all the devices you want to move. You can use any of the filter criteria available (groups, tags, etc.) to create a display that is most useful to you for marking the devices.
Groups can help you organize devices within a project. Learn how to.
Here is a quick way to add multiple devices or just a single device to a group in JFrog Connect.
You can add many devices to a group at once (i.e., add devices in bulk). You can also use this procedure as a quick way to add a single device to a group.
To add devices to a group, do the following:
Go to the Devices page and mark the devices to add to a group. You can mark all the devices in view by marking the checkbox at the top of the column.
At the bottom of the Devices page, click Assign Group.
In the Assign Group popup, select the group for your devices and apply.
Delete a group in JFrog Connect.
If you don’t need a group any more, you can delete it. To delete a group, do the following:
Go to the Project tab in Settings and choose a group from the list of group names.
Click Delete.
If there are any devices in the group you have chosen, they will be deleted with the group unless you move them. This is your last opportunity to move them. To keep the devices, choose a group from the list and click Move Devices. If you intend to delete the devices along with the group, just delete the group.
Here is a quick way to add a device to a group in JFrog Connect.
Once you have created a group, you can add devices to it. The procedure below describes a quick way to add a device to a group when you are viewing or editing device details.
Go to the Devices page and click the name of a device in the list.
In the General Details of the device, click Edit.
Choose a group from the list and save.
Groups can help you segment your fleet into manageable subsets of devices. This page describes how to create a group in JFrog Connect.
Your default project that is created when your JFrog Connect account is created contains two default groups, Test and Production. You can change the names of these, create additional groups, and create subgroups within groups.
Go to the Project tab in Settings and click the Add (+) icon.
Enter a name for the group.
Choose the position of the group in your hierarchy. For example, choose Main Hierarchy if you want the new group to be at the top level. If you choose a different item in the dropdown list, the new group will be at the next level under that item.
Change the name of a group in JFrog Connect.
Remove JFrog Connect tags from your edge devices.
In JFrog Connect, you can remove tags from any edge device that has been tagged.
To remove a tag from one or more devices, do the following:
In the Devices page, mark the checkboxes next to the relevant devices. You can use the checkbox at the top of the column to mark all or unmark all of the devices.
Click Edit Tags.
In Remove Tags, choose one or more tags to remove from the devices you chose. If you don’t see the tag in the list, enter the first few letters of the tag name and then it should appear. Apply your changes.
To delete a tag entirely, remove the tag from all devices with that tag. Once the tag is removed from the last device, it is deleted from the database.
Tags enable you to create sets of devices that belong to different JFrog Connect groups. You can then filter and perform actions on tagged devices. This page describes how to create tags.
You can use tags to mark one or more devices within a group or mark devices that belong to different groups. Once you have tagged some devices, you can filter on the tag name in order to view and perform actions on the tagged devices only.
Connect provides a high degree of flexibility in tagging. There is no limit to the number of tags you can create or the number of tags a device can have. In addition, Connect enables you to tag several devices at once, without limit.
To tag one or multiple devices, do the following:
On the left side of the Devices table, mark the checkboxes next to the devices that will be tagged. You can use the checkbox at the top of the column to mark all or unmark all of the devices.
Click Edit Tags.
In Add Tags, enter the name of one or more tags. If a tag already exists, you can enter the first few letters and then choose the name that appears in the list. Apply your changes.
Learn how you can at any time.
Learn how to .
Learn a .
You can also add a device to a group when you .
Learn how to at once.
are an essential tool for dividing up your fleet of devices into manageable subsets. It is worth taking some time to think about how you want to organize your groups so that you can manage your devices efficiently.
Learn how to to a group.
Learn how to .
Learn how to when deploying a software update.
A is a parameter you define to identify devices with unique attributes. Tags provide one of several ways that you can JFrog Connect. For example, tags enable you to associate devices that belong to different groups within a project.
Go to the Devices page and that will display all the devices you want to tag. For example, if you want to tag some devices from Group A, a device from Group B, and several devices from Group C, ensure that all of these will be displayed. You can use any of the filter criteria available to create a display that is most useful for marking the devices.
Learn how to .
The Overview page is the dashboard for your JFrog Connect project. You can see top level information such as fleet stats, alerts, notifications, versions in use, and the latest device registrations.
The Overview page provides a dashboard view of your fleet. To see the dashboard view, go to Overview at the top of the left navigation tree.
The Product Fleet panel displays the number of devices online and offline and the total number of devices. If you click the panel, the Devices page will display.
To see the actual alerts triggered, click on any of the numbers in the panel. The Alerts page will display showing the Triggered Alerts tab.
JFrog Connect uses Google Maps to automatically locate devices according to IP address. You can also set locations manually. Use the map in Connect to locate all your devices.
When a device registers to JFrog Connect, the Google Maps geolocation service uses the device’s public IP address to assign it a location. This location is an estimate and might not be exact. This page describes how you can view devices on a map in JFrog Connect’s web UI and different methods to change the device location.
Viewing devices on the map is not available to on-prem customers.
You can adjust the position and magnification of the map to see all of the devices in the map.
If you know the device name, you can use the map to find the location of a device. Just choose the device name in the dropdown list, and the map will focus on that device and display its details.
The different ways to change a device's location are described below.
To change a device’s location manually, do the following:
Go to Devices in the left navigation tree and select the device you need to change.
Choose Manual Location.
Enter the new location and save.
You can refresh the locations of your devices for the whole project or for any subset of the project. However, the refresh function does not act on any device that has Manual Location configured.
To refresh devices, do the following:
Go to Settings in the left navigation tree and choose the Project tab.
Choose Refresh Location.
Select the devices to be refreshed and click Next.
Review the information in the summary and if it is correct, run the refresh.
To remove (i.e., delete) a device from your JFrog Connect fleet, you need to uninstall the agent from the device and delete the device from the server.
Removing a device completely from your fleet in JFrog Connect requires the following procedures:
Uninstall Connect Agent from Device
Delete Device from Connect Server
In both steps, which are described below, ensure that the device chosen is the device you intend to remove.
To delete a device from the Connect server, do the following:
In General Details, review the information to ensure that this is the device you want to delete, and click Edit.
Click Delete. If you are sure that you want to delete this device, click Delete Device in the confirmation popup.
See detailed information about a device and edit device details.
To view a list of devices and details about each device, go to the Devices page. The devices appearing in the list are according to the passive filter set at the top. If you do not see the device you are looking for, you can try the following:
Change the passive filter.
Page through the list using the arrows below the list.
Use the Search bar to search by ID, name, group, application, tag, description, or MAC address.
To drill down into the detailed device information, click a device in the table of devices and a side panel will appear. The side panel shows information about the device and in some cases, enables you to edit information or run commands:
Technical Details: Shows a list of the IP Address, Hostname, OS, Node Name, Kernel Release, Kernel Version, Hardware, System Information, and MAC Addresses.
Monitoring Information: Lists the processes monitored and shows basic parameters such as CPU, RAM, and disk space used on the device.
Log Details: Provides information about the Update History.
Application Details: Enables you to configure a new application on the device or edit an existing one.
Alerts: Shows a shortlist of the latest alerts. You can also click Alerts and go to the full list.
Commands: Run commands directly on the device.
You can change some of the general configuration settings of the device. In General Details, click Edit.
Name: Change the name of the device.
Group: Choose a group name from the list. This will cause the device to belong to a different group.
Description: Enter a brief description of the device or change the existing description.
Update Trigger: This creates a flag that determines if the device is available to receive updates. When the trigger is On
, the device cannot receive updates. The device can receive updates only when the switch is turned Off
.
Choose the method by which the device location is determined:
Automatic Location: Google Maps geolocation determines the location of the device based on the device’s public IP address. The location could change if you refresh locations.
Manual Location: The device location is the location that you enter manually in this field. Google Maps validates the location when you enter it, and then it will not change if you run a refresh.
After making your edits to the General Details, click Save.
JFrog Connect provides robust filter tools so that you can view data in any slice of your fleet and perform software updates and other actions on any subset of devices that you specify.
JFrog Connect provides two kinds of filters, Passive and Active, that give you full control of device data you want to display and specific devices you want to perform actions on. The filters are described in detail below.
You can choose the project, group, and any subgroups to be included in the filter criteria. In the project list, you will see only the projects that you have permission to see. If you are an admin, you will see all the projects in the account. The filter includes devices in a single project only, and does not act across projects.
Within a project, you can filter on any of the groups in the hierarchy.
All Groups: The default at the top level is All Groups. This means that the devices included will be from all groups at this level any subgroups that you choose. Alternatively, you can choose a specific group at that level, for example, Group-A, as shown in the illustration below.
All Hierarchies: This appears by default to the right of any group you choose. All Hierarchies means all subgroups within the group you chose. To include only a specific group, click All Hierarchies and the desired group in the list.
Additional Group: Whenever you have chosen a specific group, you can choose an additional group on the same level by clicking Additional Group.
You can use Additional Filters to pull out any subset of devices, including the following.
Specific Device: Use this filter to view data of a specific device. When you choose this filter, all devices from the selected project and groups will be displayed as possible values in the search input. You can select only one specific device in a filter.
Tag: Use this filter to view data of devices with a certain tag. You can filter on multiple tags. When you choose more than one tag, only data of devices that have ALL of the chosen tags will be shown (i.e., AND, not OR).
Application: Use this filter to view data of devices having the selected app. You can specify the app version or Any to select all versions. Keep in mind that you can select only one application per filter.
Device State: Use this filter to view data of devices that are currently online
or offline
.
Deployment: Use this filter to view the data of devices that are part of the selected deployment with the chosen status. You can select only one deployment status for each deployment.
To create an Additional Filter:
Choose a filter from the list.
Complete the criteria statement with an is
or is not
operator and a target value, and apply.
You can add more filters if necessary. Below is an example of a filter with multiple criteria.
Use the Active Filter bar whenever you perform an action on the devices. For example, you use the Active Filter when you create alerts or deploy software updates. The filter appears wherever you see the Select Devices button.
The Active Filter looks just like the Passive Filter and behaves the same way. The default values in the Active Filter are the values in your Passive Filter.
Once you have selected your devices in the filter, you will see a summary indicating the total number of devices to be affected by the action and the applied filter. If this is not what you expected, you can go back and change your filter. Otherwise, click Finish, and the task will be performed on the devices.
The total affected device number that is shown might be different than the actual number of devices that receive the task. The devices that actually receive the task will be filtered at the time you run the task, which might be a few seconds or minutes after you select the filter attributes. (For example, some devices could change status during that time.)
If you have specified an active filter that is different from the passive filter, you might not see the results of your action in the Connect pages that use the passive filter, for example, data for all the relevant devices might not appear in the Overview, Devices, and Updates pages. To see the full results of the task you performed, change the passive filter to include all of the devices specified in your active filter.
If you are reorganizing your fleet and need to remove several devices at once, has two convenient methods to accomplish this. You can move all the relevant devices into a single group, then delete the group, or you can move all the relevant devices into a single project, then delete the project. Both procedures are described below.
Gather all the devices that you want to delete into a single group by following the procedure in .
Delete the group by following the procedure in . When you delete a group, all the devices in that group are also deleted.
Gather all the devices that you want to delete into a single project by following the procedure in .
Delete the project by following the procedure in . When you delete a project, all the devices in that project are also deleted.
At this stage, you might want to refresh your memory on how to .
In the at the top, you can set the project you want to display. You can also filter to display the data for a specific group only. The data displayed in the panels corresponds to the filter you choose.
The Live panel indicates the number of each type of live alert in the relevant project or group.
The list of notifications shows the latest activities in JFrog Connect. Only the can view notifications.
In the panel, you can choose an application in your fleet and view a pie chart breakdown of the versions of that application deployed. Hover over the version number to see the actual number of devices deployed with that version.
The panel has a chart showing the number of devices recently deployed. The time period presented includes up to four months in the past.
You can use the map to find the exact location of a device. Just choose the device name in the dropdown list. You can adjust the position and magnification of the map as needed. For more information about the map and device location, see .
Learn how to you see in the Overview page.
You can view a map of your device locations in the page. Go to Overview in the left navigation tree and scroll down to the map. Each peg on the map represents a device. Green pegs are online and red are offline. When you click a peg, you can see more details about the device.
In , click Edit.
Learn how to get a drill-down of .
To remove the Connect Agent from the device, run the command below by physically accessing the device terminal or by using the feature from the Connect web UI.
Go to in the left navigation tree and ensure that the filter at the top is set correctly. Choose the device from the list of devices. If you do not see the device name in the list, enter the name in the Search box.
Learn how to to your IoT device.
The Devices page in shows a list of devices and takes you on a deep dive into the device you choose. You can edit device details, get logs, and send commands to the device.
General Details: Shows ID, Name, , Last Seen, , Description, , , Registration Time (UTC), and the Device-Project Pairing Token ID. If you click Edit, you can edit some of these.
Delete: See .
Learn more about how to .
In the Passive Filter bar, you define the slice of your that you want to appear by default in the web UI pages. Once you set this filter, only devices matching the filter criteria appear in the web UI pages such as Overview, Devices, Alerts, Updates, and other pages. The filter appears at the top of all pages in the web UI, and you can change it at any time.
Learn how to on a map and how you can refresh the device location.
Update Flow is a completely customizable approach to OTA updates. An update flow is a set of actions enabling you to build reusable procedures for deploying updates to your IoT devices.
To create an Update Flow, do the following:
In the Connect web UI, go to Deployment in the left menu and click the Create Update Flow tab.
Add a Flow Name, e.g., update-docker-image.
Drag and drop the actions you need in the flow and complete the configuration for each action. To configure an action, click on it in the flow column.
To reboot the device after all the actions have run, mark Reboot after Update.
To configure a general rollback in case of failure, click Rollback.
Click Create Flow and then go to the Update Flows tab to view it in the list of flows.
Update devices to the latest version of JFrog Connect Agent.
From time to time a new version of the Connect Agent will become available. The Connect Agent updates ensure that IoT devices are running the latest JFrog software and are able to communicate with the JFrog platform effectively.
The new agent version is not deployed automatically. When a new version is available, the "Deploy latest agent update" button appears under the Agent Update tab. You can initiate an OTA update process at your convenience to update the agents on your connected devices, and you can choose which devices receive the update. The button will remain available until you have updated all devices in the project.
To update the Connect Agent version on your devices, do the following:
Go to Deployment in the left menus and click the Update Agent tab.
Click Deploy latest agent update.
In Select Devices, choose the relevant Groups of devices and apply any Additional Filters required. Click Next and run the update.
Once you have run the update flow, you can view the status of the agent updates
Once the update flow has completed, the display will indicate the number of devices that succeeded or failed to update the agent.
To make environment variables on your IoT device reachable by the JFrog Connect Agent, you can load a file to the agent’s service configuration. This page describes the procedure.
The JFrog Connect Agent runs as a systemd service. Therefore, system environment variables are not reachable by the agent and cannot be used with Connect tools such as Remote Commands.
To make the environment variables reachable by the Connect Agent, you can load a file containing the variables to the agent’s service configuration. Once the file is loaded, you can use environment variables in Connect tools.
To load your environment variables to the Connect Agent, do the following:
Create the file: /etc/environment
Place your environment variables at the end of the file. For example:
Open the file /etc/systemd/system/connect.service
, and right above the line that begins with ExecStart
, enter the line:
Save and close the file. Execute the command:
Execute the command:
Once you have completed the steps above, any environment variable written inside the file /etc/environment
, will be accessible from Connect tools.
If you modify the file /etc/environment
, you will need to restart the Connect service for the changes to take effect. This includes adding, deleting or changing variables, and changing any values of the variables.
Delete devices in bulk in JFrog Connect.
To remove bulk devices by deleting a group, do the following:
Uninstall the Connect Agent from each of the devices. This requires the following steps:
Create a new update flow that uses the Run Command action. In the Command field, enter the command below:
systemctl disable upswift --now 2>/dev/null ; systemctl disable connect --now 2>/dev/null ; rm -rf /etc/upswift/ /etc/connect/ /etc/system/systemd/upswift.service /etc/system/systemd/connect.service 2>/dev/null ;
Deploy the update flow. When you select devices in the deployment creation, choose the Group that you created in Step 1. After the deployment is completed successfully on all the devices in the group, continue to the next step.
To remove bulk devices by deleting a project, do the following:
Uninstall the Connect Agent from the devices. You can use the same update flow and command as in Step 2 above. However, when you create the deployment and select devices, choose All Groups in the project. After the deployment is completed successfully, continue to the next step.
Using the update trigger, you can give the edge device the ability to block software updates. The device will only receive software updates when you deactivate the update trigger.
JFrog Connect provides different methods for you to control the timing of software updates, including the following:
Block or allow software updates to a single device by setting the update trigger in the Connect UI.
Use the Update Trigger API to create update windows and update blocking windows for device groups in your fleet.
The Update Trigger creates a device-based server flag that determines whether or not the edge device is available for updates. The On status indicates that the device will not receive updates. In the Off status (Connect’s default), the device can receive updates.
To block updates to a specific device, do the following:
Go to Devices in the left sidebar and click a device in the table of devices. If the device you want does not appear in the table, use the search box to find it.
Scroll down to the General Details panel and click Edit.
Click Update Trigger and Save.
When you deploy OTA updates to edge devices, there may be time periods when it is inappropriate or risky to send new updates. If, for instance, your device is in use by the end-user, a new update at that time might interfere with the user experience. Using the Update Trigger API call, you can manage from within your application when the device can receive updates, and when it can’t.
After setting the update trigger, your device will not receive new updates until you or your application unsets the trigger. By setting and unsetting the trigger at various times, you can create update windows that allow updates only during specific periods of time.
A sample use case is a fleet of kiosk screen devices that are in use throughout the day, but are not used during the night. When the app is out of use, it goes into standby mode and comes out of standby upon first use in the morning.
When the app comes out of standby, it uses the Update Trigger API call to set the update trigger to On, so that it will not receive updates. When it goes to sleep again, the app unsets the update trigger so that it can receive updates while in standby mode. In effect, this creates an update window in which updates are allowed, and a blocking window in which the device will not accept updates.
For this use case to work, the Update Trigger API call would be used in the code of the kiosk app.
The Run Command action enables you to run a bash command on your client device.
The Run Command action is useful for performing a variety of actions on the edge device. You may need the Run Command as a prerequisite to other actions, for example, to create folders on the devices before delivering files or to stop a service before delivering an update.
You might also use Run Command after other actions, for example, to run a script that was delivered in a previous action or to delete artifacts no longer used.
Although you could create a workflow with a single run command action, you may use Run Command along with other actions. A customer example below illustrates how you might use the Run Command action in an update workflow.
A pull command used in the Run Command action cannot be reverted. Therefore, for pulling artifacts, we recommend using one of the pull actions such as Artifacts, Deploy Container or Clone Git Repository.
JFrog Connect account and at least one device registered.
Go to Deployment in the left menu and click Create Update Flow.
Drag the Run Command action and drop it in the workflow.
Click the action to open and configure it.
Enter a name for the action, for example, Unzip Files.
Enter the full bash command to run, including the values of any parameters required.
Enter the expected exit code. Success is usually 0 in Linux shell systems, but it could be different depending on the specific command or script.
Save your action configuration.
You can run additional commands in the update workflow by adding more actions. You can also perform other actions in the same workflow just by adding and configuring the relevant actions.
If you plan to run several commands and need to specify a logic that is more complex, you might consider using the Run Script action.
An Update Flow is a set of instructions that carries out a software update of your IoT devices. In JFrog Connect, you build an update flow using individual actions that are carried out in sequence. Each action, like or , completes a discreet task in the flow. You can arrange the order of actions and use them multiple times in a flow, as needed.
To realize the full power of update flows, keep reuse in mind. When you combine features like and with an update flow, you can use the flow as a template that will be flexible enough to use over again for deploying software to your entire fleet.
Learn about the that you can include in an update flow.
Learn how JFrog Xray scans your content for and where you can find information about CVE severities in your update flows and deployments.
When a new agent version becomes available, an updated version of the will also be available.
Learn how to manage .
If you are reorganizing your fleet and need to remove several devices at once, has two convenient methods to accomplish this. You can move all the relevant devices into a single group, then delete the group, or you can move all the relevant devices into a single project, then delete the project. Both procedures are described below.
Tip: If you just need to remove a single device, see .
Gather all the devices that you want to delete into a single group by following the procedure in .
Delete the group by following the procedure in . When you delete a group, all the devices in that group are also deleted.
Gather all the devices that you want to delete into a single project by following the procedure in .
Delete the project by following the procedure in . When you delete a project, all the devices in that project are also deleted.
At this stage, you might want to refresh your memory on how to .
Start a software deployment at a time that you specify in the .
Learn how to set the update trigger in the API request in the Connect API Reference.
Configure your policy and instructions for rolling back, if necessary.
Learn more about using the action to run a script on your client devices.
Run Command
Safekeeping device-specific configuration files
Download Artifact
Pull your update binaries from Artifactory
Run Command
Unzip file with your binary artifacts
Run Command
Change user permissions for your application
Run Command
Restart service that runs your application
A simple way to get one or more files quickly onto your IoT device is to use the Deploy Files action in a JFrog Connect workflow.
The Deploy Files action enables the quick distribution of one or more files to your devices. To deliver a file, the action facilitates a two-step process:
You upload of the requested file to Artifactory.
Devices pull the file from Artifactory.
This functionality is primarily utilized for quick deployment of specific files or binaries to your devices, eliminating the necessity to upload them beforehand.
JFrog Connect and JFrog Platform accounts. (You receive a JFrog Platform account automatically when you register for a JFrog Connect account.)
Connect Agent 6.0 or later and at least one device registered.
One or more files ready for deployment.
To include the Deploy File action in your update flow, do the following:
Go to Deployment in the left menu and click Create Update Flow.
Drag the Deploy File action and drop it in the workflow.
Click the action to open and configure it.
Enter a name for the action.
Enter (drag and drop or browse) the file in the file box.
Enter Device Destination Path. You can also make this a variable, for example {{device-destination-path}}. You will then enter the value for the variable upon deployment.
If you want to deliver more than one file, create a Deploy File action for each file.
Save your action configuration.
The Deploy Docker action provides an easy way to deploy a single Docker image or multiple containers using Docker Compose to your IoT devices.
JFrog Connect account and at least one device registered.
Docker and/or Docker-compose installed
One or more Docker images in the JFrog Platform ready for deployment. If you need to push an image to the JFrog Platform, use the docker tag
and docker push
commands as shown below.
To include the Deploy Docker action in your update flow, do the following:
Go to Deployment in the left menu and click Create Update Flow.
Drag the Deploy Docker action and drop it in the workflow.
Click the action to open and configure it.
Enter a name for the action.
After you have completed the configuration, click On Failure to configure your failure policy. Upon failure, the default Do Action is Revert Docker Compose File. This means that if the action or update fails, the rollback will revert to the Docker Compose file of the last successfully running application.
Get configuration parameters for Deploy Docker update flow action in JFrog Connect. Applicable to Docker Image as the Deployment Type.
The procedure describes how you get the following parameters from Artifactory:
Image Path
Image Tag
To get the image path and tag, do the following:
In the left navigation pane of JFrog Connect, choose JFrog Platform.
In the left navigation pane of JFrog Platform, choose Artifactory and Packages.
In Artifactory, choose your Docker package from the list of Docker packages.
In the Versions table, choose your version.
In the Version page, take the part from the platform URL up to the colon and enter it as the Image Path in the Deploy Docker configuration in Connect.
Take the text after the colon and enter it as the Image Tag.
Now you can complete the rest of your Deploy Docker action configuration in Connect and save it.
JFrog Connect integration with Docker Compose enables you to utilize Docker Compose's exceptional capabilities to deploy multiple containers to IoT devices.
Connect enables you to deploy multiple containers by using Docker Compose capabilities. When you choose Docker Compose as your Deployment Type, JFrog Connect will upload the corresponding YAML file to Artifactory, and the edge device will pull it during the update.
The recommended approach to managing containers on edge devices is to use Docker Compose.
JFrog Platform Account. (You receive an account with JFrog Platform automatically when you register for a JFrog Connect account.)
Connect Agent 6.0 or later on device(s).
Docker and Docker Compose installed on your device(s).
A Docker Compose configuration file located in Artifactory.
Enter the source of your Docker Compose YAML file, which may be one of the following, depending on the registry you chose.
Tip: When your Docker Compose YAML points to multiple Docker images, the images must be in the same registry.
Enter the path where the Docker Compose YAML file should be placed on the IoT device. The folder must already exist on this path or the update will fail. (You can create a folder using the Run Command action block.)
On Failure enables you to define what happens upon failure of the Deploy Container action. By default, when the action fails the Docker Compose file is automatically reverted, and everything is restored to its previous state.
Failures that are caused by container logic (e.g., Command fails or Invalid image architecture) are handled by the Docker Compose binary and are not regarded as an action failure.
Save your action configuration.
If you are adding more actions to the workflow, continue to the next one. Otherwise, complete your workflow configuration and save it.
The Clone Git Repository action enables you to pull your latest software version from a Git repository directly to your edge devices.
Connect's Update Flow enables your edge devices to clone from a Git repository whether you are using a public Git repository or your own private repository for your code.
When you use the Clone Git Repository action, the edge devices will use the git clone command to pull your Git repo.
JFrog Connect account.
To include the Clone Git Repository action in your update flow, do the following:
Go to Deployment in the left menu and click Create Update Flow.
Drag the Clone Git Repository action and drop it in the workflow.
Click the action to open and configure it.
Enter a name for the action.
Git Repository URL: Enter the URL of the Git, for example, https://github.com/jfrog-connect/app-repo.git
.
Device Destination Path: Enter the path where the Git will be installed on the device, for example, /home/user/App
.
Configure your On Failure policy and instructions for rolling back, if necessary.
Save your action configuration.
Continue Update Flow: If the Clone Git Repository action fails, Connect will simply continue with the next action in the update workflow.
Run General Rollback: The action and the entire update workflow are rolled back.
As a general precaution, Connect Agent creates a backup of the relevant device folder in a temporary location. If a rollback is required, the agent restores the folder to its initial state.
To enable Rollback functionality, your device's free memory must be greater than the update size. Use the relationship below to calculate the amount of free memory required.
Free Memory Required > Current Folder Size + Update Size + 10MB
JFrog Connect enables you to quickly deploy a single Docker image from any repository directly to your edge devices.
Create an update flow that uses the Deploy Container action. When you select the Docker Image option, you will be able to pull a container image directly from a repository, whether it is public or your own private repository.
Enter the source of your Docker image, which may be one of the following, depending on the registry you chose.
2. Enter the Image Tag.
Click Add Run Options to enter the run flag information.
Choose a command from the list and then enter the run flag. These are the same flags used in the docker run command.
Click Add (+) if you want to enter an additional run flag. You can run as many as you want.
The Docker run
command structure uses official docker commands, but in a structured manner.
To add the command to run in the Docker image, remove all parts except for [COMMAND] [ARG…]
For example, in the following CLI deployment:
the command will be: echo hello world
For [OPTIONS]
use the Docker Run flags.
Mark the checkbox to delete the current image after the new Docker image has been deployed. (This is the default setting.)
On Failure enables you to define what happens upon failure of the Deploy Docker action. By default, the first Docker image is stopped, and if the action fails, the new image is deleted and the previous image will start running once again. This returns everything to the previous state.
Failures that are caused by container logic (e.g., Command fails or Invalid image architecture) are handled by the Docker Compose binary and are not regarded as an action failure.
Save your action configuration.
If you are adding more actions to the workflow, continue to the next one. Otherwise, complete your workflow configuration and save it.
The Run Script action enables you to run a bash script on your edge device.
You might have several reasons to use the Run Script action, such as preparing the edge devices for installing a new software version or doing some special tasks after a version has been received. You may also have scripts that help to resolve issues in a software version that is running on the device.
Exit codes are utilized to confirm the successful execution of a script and ensure that the procedure completed without encountering any errors.
JFrog Connect account and at least one device registered.
A script file ready for deployment.
To include the Run Script action in your update flow, do the following:
Go to Deployment in the left menu and click Create Update Flow.
Drag the Run Script action and drop it in the workflow.
Click the action to open and configure it.
Enter a name for the action.
Enter (drag and drop or browse) the script file in the script box.
Enter the following:
Binary Path: The path on the device where the script should run.
Script Arguments: The values required for script arguments.
Expected Exit Code: Success is usually 0 in Linux shell systems, but it could be different depending on the specific command or script.
Save your action configuration.
You can run additional actions in the workflow.
Configure your policy and instructions for rolling back, if necessary.
Learn how to deliver containers to your IoT devices using the action.
JFrog Connect agent utilizes Docker and the engine to pull and run the image containers to the edge. Therefore, Docker standard practices are applied when pulling images (e.g., Docker cache and image layers).
Choose the registry where your Docker image resides. This could be either the default registry that was created automatically when your Connect account was created or a private registry that has since been added. If the registry does not appear in the list, go to to add yours to the list. Then return to this configuration and the added registry will appear in the list.
(Optional) If your registry does not appear in the dropdown list, go to in Settings to add a registry.
For Deployment Type, choose either Docker Image or Docker Compose. To read the specific procedure for each of these, click either or .
If you want the action to pull content from an account, complete the procedure in , and then choose that registry as your JFrog Registry in Step 2 above.
Learn about some of the with single Docker Images and Docker Compose.
This page describes how you get some of the configuration parameters when you use the update flow action in JFrog Connect and is applicable only when you choose Docker Image as the Deployment Type.
Completed the procedures in .
JFrog Artifactory Path (YAML file): This is the unique path where the Docker YAML file is located in Artifactory and the YAML file name. Enter this if you chose default-connect for the registry or any other Artifactory registry (see ).
Docker Compose YAML File: If you chose a Docker registry for the registry (see ), drag and drop or browse to enter the Docker Compose YAML file. When you drag and drop, the file is uploaded to “Connect Default Generic” in Artifactory.
Tip: If you need help finding the Artifactory Path in Artifactory, see
Configure your policy and instructions for rolling back, if necessary.
Learn how to take the next step and run the .
Private Git: Mark this checkbox only if you are using a private Git repository. Choose the account where your repository exists. If the account is not in the list, you can add it according to the procedure in .
For your policy, choose one of the actions for Connect to do in case the Clone Git Repository action fails.
Learn more about configuring your policy and instructions for rolling back.
Completed the procedures in
Image Path: This is the unique path and file name where the container image is located. For example: platform-URL/base-repo/docker-repo/docker-image
Enter this if you chose default-connect for the registry or any other Artifactory registry (see ).
Tip: If you need help finding the parameters above in Artifactory, see .
Image Name: Enter the docker image name if you chose a Docker registry for the registry (see ).
Configure your policy and instructions for rolling back, if necessary.
Learn how to go on to the next step and run the .
Configure your policy and instructions for rolling back, if necessary.
Learn how to deliver one or more files to your client devices using the action.
Run Command
Copy and save device-specific configuration files
Download Artifacts
Pull your update binaries from Artifactory
Run Command
Unzip file with your binary artifacts
Run Command
Change user permissions for your application
Run Script
Run Command
Restart service that runs your application
Get configuration parameters that you need to configure a release bundle update flow action in JFrog Connect.
This page describes how you get some of the configuration parameters when you use the Download Release Bundle update flow action in JFrog Connect.
The procedure describes how you get the following parameters from Artifactory:
Name
Version
The procedures are different for Release Bundles v1 and v2. Both procedures are detailed below.
To get to Artifactory from Connect:
Go to the left navigation pane and choose JFrog Platform.
To get the configuration parameters for a release bundle v1:
In the left navigation pane of JFrog Platform, choose Distribution, and then choose Release Bundles.
In the Release Bundles table, take the name of your release bundle from the Name column and take its version from the Latest Version column. Enter these as the Name and Version in the Download Release Bundle action in Connect.
Now you can complete the rest of your Download Release Bundle action configuration in Connect and save it.
To get the configuration parameters for a release bundle v2:
In the left navigation pane of JFrog Platform, choose Artifactory and Release Lifecycle.
In the Release Bundles table, take the name of your release bundle from the Name column and take its version from the Latest Version column. Enter these as the Name and Version in the Download Release Bundle action in Connect.
Now you can complete the rest of your Download Release Bundle action configuration in Connect and save it.
Get the Artifactory Path you need to configure an update flow action in JFrog Connect.
This page describes how you get the Artifactory Path that you need to configure an update flow action in JFrog Connect.
The procedure is applicable to the following update flow actions:
To get the Artifactory path, do the following:
In the left navigation pane of JFrog Connect, choose JFrog Platform.
In the left navigation pane of JFrog Platform, choose Artifactory and Artifacts.
In the General Info, copy the Repository Path to the clipboard.
Go to your Download Artifact action configuration in Connect (or any action where you need an Artifactory Path). Paste the Repository Path (already on the clipboard) into the Artifactory Path field.
Now you can complete the rest of your update flow action configuration in Connect and save it.
Use JFrog Connect to install and update Debian packages on your edge devices easily and securely.
This document describes how to configure the Install Debian Package action and integrate it into your update flows.
At least one device registered with JFrog Connect.
A local Artifactory repository. Connect does not support remote repositories.
If you are using JFrog as your registry, Artifactory Project and Artifactory Environment must be set to All in the JFrog Registry Scope.
To include the Install Debian Package action in your update flow, do the following:
Go to Deployment in the left menu bar and click Create Update Flow.
Drag the Install Debian Package action and drop it in the workflow.
To configure the action, click on it and do the following:
Enter a name for the action.
Complete the following mandatory information:
Distribution: The appropriate Debian distribution for your target devices (e.g., Debian Buster, Debian Bullseye, Ubuntu Noble, Ubuntu Jammy).
Component: The component (e.g., main, universe, contrib) from which to install the package.
Set as Persistent Repository: Mark this box to add the JFrog Repository to the device system's list of available sources. When unmarked, the JFrog Repository will be removed right after the package installation.
Packages: Enter the Name and Version of the package. If you leave Version blank, the latest version of the package will be installed. If you want to install more than one package, click Add (+). Add an additional row for each additional package.
Update Command Options: The apt
or apt-get
command will be run on the device according to the Linux version. You can add options to tailor the update command to your needs.
Fix Broken: Check this box to run the apt
or apt-get
command with the --fix-broken
option. This can be useful for resolving dependency issues during package installation.
Install Command Options: The apt
or apt-get
command will be run on the device according to the Linux version. You can add options to tailor the install command to your needs. The -y option (equivalent to --yes
or --assume-yes
) is set automatically. You can use any of the options supported by the apt package installer.
Command (View Only): This section displays the final command that will be executed on the target device. The command is generated based on the configuration options you have provided. Review this command to ensure it is correct before deploying the update flow.
Configure your On Failure policy and instructions for rolling back, should a rollback be necessary.
Save your action configuration.
The Download Release Bundle action utilizes JFrog’s packaged release cycle to deploy your entire application to your edge devices.
JFrog Connect supports Release Bundles v1 and v2.
The Download Release Bundle action enables you to deploy a versioned package of software artifacts to your edge devices. In addition, a release bundle has the ability to deploy Docker images using the Docker Compose engine.
Connect Agent 6.0 or later and at least one device registered.
A release bundle that is ready for deployment.
To include the Download Release Bundle action in your update flow, do the following:
Go to Deployment in the left menu and click Create Update Flow..
Drag the Download Release Bundle action and drop it in the workflow.
Click the action to open and configure it.
Enter a name for the action.
Enter a Name for your release bundle and the Version of the release bundle that you used in Artifactory.
When you deploy the Download Release Bundle update flow with a v2 release bundle, Connect will automatically use the release bundle name and version as the App name and version.
Enter the Device Destination Path. This is where the release bundle will be installed on the edge devices. The directory on the device must exist beforehand, otherwise, the update will fail. Connect does not automatically create directories when deploying updates. You may create a folder using the Run Command action in the General Section.
(Optional) If you have one or more files in your release bundle that need to go to different paths on the edge device, mark Release Bundle Artifact Path. Then specify the Release Bundle Path and the Device Destination Path for each file.
(Optional) If your release bundle includes Docker images, mark Docker Compose, then specify the Release Bundle Path and the Device Destination Path for the Docker Compose YAML file.
Configure your On Failure policy and instructions for rolling back, if necessary.
Save your action configuration.
Continue Update Flow: If the Download Release Bundle action fails, Connect will simply continue with the next action block in the update workflow.
Run General Rollback: The action and the entire update workflow are rolled back.
Do Action: The action to do when this action is rolled back. In this case, the action is to revert all files.
As a general precaution, Connect Agent creates a backup of the relevant device folder in a temporary location. If a rollback is required, the agent restores the folder to its initial state.
In order to enable Rollback functionality, your device's free memory must be greater than the update size. To calculate the amount of free memory required, use the relationship below:
Free Memory Required > Current Folder Size + Update Size + 10MB
The Download Artifact action enables you to deploy updates to your devices by specifying a path in JFrog Artifactory to a destination path on your device.
The Download Artifact action enables you to create a workflow that pulls artifacts from your Artifactory instance and deploys them to your edge devices. You can one or multiple artifact actions in an update flow.
Deployments using Artifactory consider the checksums of the files delivered. Therefore, the devices will pull only the diffs when downloading updates to files.
JFrog Connect and JFrog Platform accounts. (You receive a JFrog Platform account automatically when you register for a JFrog Connect account.)
Connect Agent 6.0 or later and at least one device registered.
One or more files ready for deployment and stored in your Artifactory repository.
To include the Download Artifact action in your update flow, do the following:
Go to Deployment in the left menu and click Create Update Flow.
Drag the Download Artifact action and drop it in the workflow.
Click the action to open and configure it.
Enter a name for the action.
Enter the Artifactory Path, for example, generic-repo/1.0/file.txt
. You can also make all or part of the path a parameter. For example, you could make the version folder a parameter: generic-repo/{{version}}/file.text
. Then you enter the version value when the actual deployment is run.
If you want to deliver more than one artifact, add a new action for each artifact.
Enter the Device Destination Path. The directory on the device must exist beforehand, otherwise, the update will fail. Connect does not automatically create directories when deploying updates. You may create a folder using the Run Command action in the General Section.
Configure your On Failure policy and instructions for rolling back, if necessary.
Save your action configuration.
Continue Update Flow: If the Download Artifacts action fails, Connect will simply continue with the next action in the update workflow.
Run General Rollback: The action and the entire update workflow are rolled back.
Do Action: The action to do when this action is rolled back. In this case, the action is to revert all files.
As a general precaution, Connect Agent creates a backup of the relevant device folder in a temporary location. If a rollback is required, the agent restores the folder to its initial state.
In order to enable Rollback functionality, your device's free memory must be greater than the update size. To calculate the amount of free memory required, use the relationship below:
Free Memory Required > Current Folder Size + Update Size + 10MB
In JFrog Connect, you can use the Update Image action to update edge device images at scale.
Availability: This feature is available to some customers by feature flag.
SWUpdate installed on the devices.
SWUpdate image file (*.SWU) uploaded to the Artifactory repository. The SWU file includes the IMG file and sw-description file.
The default upload limit in Artifactory is 100 MG. You may need to change this if your IMG file is larger.
The following is an example of an SWU file configured for a double-copy update.
filename
: The name of your compressed IMG file.
compressed
: String to indicate that the file indicated by filename
is compressed and must be decompressed before being installed. The value denotes the compression type. The currently supported values are zlib
and zstd
.
device
: device: Device node as found in /dev
or a symlink to it. This can be specified as an absolute path or a name in the /dev
folder. For example, if /dev/mtd-dtb
is a link to /dev/mtd3
, then mtd3
, mtd-dtb
, /dev/mtd3
, and /dev/mtd-dtb
are valid names. For Raspberry Pi, the rootfs is usually /dev/mmcblck0p2
. Usage depends on the handler. For files, this attribute indicates on which device the filesystem
must be mounted. If not specified, the current rootfs will be used.
To install double-copy using this file, you would need to run the command:
swupdate - i stable,copy1
or
swupdate - i stable,copy2
To include the Update Image action in your update flow, do the following:
Go to Deployment in the left menu and click Create Update Flow.
Drag the Update Image action and drop it in the workflow. It must be the last action in the workflow.
Click the action to open and configure it.
Enter a name for the action.
Enter the Artifactory Path (.swu file), for example, generic-repo/1.0/file.swu
. You can also make all or part of the path a parameter. For example, you could make the version folder a parameter: generic-repo/{{version}}/file.swu
. Then you enter the version value when the actual deployment is run.
Complete the following information for agent installation and registration:
Retain Device Credentials: Mark this to keep the current device credentials in the new image. If you leave it unmarked, you will need to register the device again after the deployment is completed. This option is recommended if you want to install a new agent version and keep the previous device credentials.
Install Agent: Mark this to back up your current agent and reinstall it in the new image. When you choose this, the device credentials will also be backed up and used with the new image. You don't need to mark this if the agent is embedded in the new image.
Partition Name: Enter the name of the new partition. (The name will look like a path, as shown below.)
To check the progress of the software update, do the following:
Go to Deployment in the left menu. In the Deployments tab, click in the Status column of the relevant deployment.
In the list of devices that appears for that deployment, choose the device you want to see and open the Update Image action.
Get configuration parameters that you need to install a Debian Package update flow action in JFrog Connect.
This page describes how you get some of the configuration parameters when you use the Install Debian Package update flow action in JFrog Connect.
The procedure describes how you get the following parameters from Artifactory:
Repository Name
Distribution
Component
Packages:
Name
Version
To get the parameters, do the following:
In the left navigation pane of JFrog Connect, choose JFrog Platform.
In the left navigation pane of JFrog Platform, choose Artifactory and Packages.
In Artifactory, go to the filter on the right and choose Debian.
Choose your Debian package from the table of Debian packages displayed.
In the Versions table, find the relevant version and copy the Repository from the Repositories column. In Connect, in your action configuration, paste the name into the Repository Name field.
Tip:
b. There could be several repositories listed for a Version. In this case, it should not matter which repository name you use, as long as it has a signed key.
In Artifactory, click the Version, and then click Location.
In the Location table, click the Path, and then click Properties.
The Properties table has the rest of values that you need for your configuration.
Distribution: Use the value of deb.distribution. (If deb.distribution does not appear here, you cannot use this package.)
Component: Use the value of deb.component
Package Name: Use the value of deb.name.
Package Version: Use the value of deb.version.
Now you can complete the rest of your Install Debian Package action configuration in Connect and save it.
JFrog Xray integration with JFrog Connect automatically scans your update content for security vulnerabilities and displays the CVE severities in your update flows and deployments.
When you upload content (including Docker images, release bundles, and other artifacts) to Artifactory, Xray scans the content to analyze it for common vulnerabilities and exposures (CVEs).
When you hover over the severity in the column, a popup appears showing the number of vulnerabilities found at each severity level.
Connect also displays the current CVE Severities when the content is actually deployed.
Once the deployment is run, these are displayed in the Deployments tab and serve as an indication of the vulnerability status of the content that was actually downloaded to your devices.
The results of Xray scans can change over time, for example, if Xray discovers new vulnerabilities in the content. Therefore, Connect obtains new scan analysis information and refreshes the CVE Severities display in the Update Flow and Deployment tabs. If there has been a change in severity, this is indicated in the CVE Severity column with an arrow, as shown below.
The CVEs are updated as follows:
CVEs in update flows (Update Flow tab) are updated every 24 hours, for 30 days after the flow has been created or deployed.
CVEs in deployments (Deployments tab) are updated every 24 hours, for 90 days after deployment.
Xray will not run scans in the following conditions:
The content is not in Artifactory, for example, if some other repository manager is used or the content is not in a repository at all. In this case, “Not Applicable - Source” will appear in the CVE Severities column.
For release bundles, Connect supports global release bundles only. For example, bundles within Artifactory projects are not supported.
For release bundles, Connect will get scan results only from the default (main) JFrog Platform Deployment (JPD).
Learn how to maximize the flexibility of your software updates. In this page, you will learn how to create update parameters when building an update flow and fill in values when deploying the update.
When you use an update parameter in an update flow, you do not have to commit (i.e., hard code) to a specific value in an action field. Instead, the field is parameterized, and you can enter the value upon deployment of your software update. This is a powerful tool because it enables you to create a single update workflow and then reuse it for several deployments. In each deployment, JFrog Connect prompts you to fill in the values, but the underlying workflow remains the same.
When you use this method, you can know that your software updates are consistent over your software versions and across your device fleets. The examples below illustrate some typical uses of update parameters. Once you get going with JFrog Connect, you will find that there are many more ways to use the update parameters that will result in consistent and easy-to-use software update workflows.
You are building a workflow to update the applications on your edge devices. You know in advance that the application versions will change frequently, but you want to use exactly the same workflow over again for each version.
You will use a parameter in the JFrog Artifactory Path to take a different version of the Docker Compose YAML for each new deployment. This method is illustrated in the steps below.
In Artifactory, keep your Docker Compose files in version folders (one per folder) as shown below.
In Connect, build a workflow that uses the Deploy Container action, and for Deployment Type, choose Docker Compose.
In Artifactory Path, which is the path of the Docker Compose YAML, enter the following:
generic-repo/app-files/{{version}}/docker-compose-file.yaml
Note that only part of the path, e.g., the version, is parameterized. The rest is fixed text. You may parameterize all or part of the path.
In the Connect list of update workflows, find the relevant workflow and deploy it. In the Deployment window, you are prompted to enter a value for the parameter called version
. Enter the version for this release. Your value should be one of the folder names you created in Artifactory, e.g., v1
, v2
, v3
.
When you need to deploy a new version of the same application, use the same update workflow. When you deploy workflow, you will just enter a new version value in the Deployment window.
This example combines Connect’s Groups feature with the Update Parameters feature. You have a large fleet of devices and they do not all run the same application. You use the Groups feature to segment the devices into subgroups according to the application they use. You need a simple method of updating all the devices and you don’t want to build a separate workflow for each kind of device.
You will build a single workflow that will be flexible enough to update all the different applications to all the different device groups.
Let’s assume you have App A, App B, and App C that get updated on Device Group A, Group B, and Group C respectively.
Create an update workflow that uses the Deploy Container action and configure it as follows:
For Deployment Type, choose Docker Compose.
For Artifactory Path and Destination Path on Device, enter parameters, e.g., {{artifactory-path}}
and {{destination-path-on-device}}
.
Complete the On Failure configuration and save your update flow.
Use the update workflow to create a deployment that will update App A on Device Group-A.
In the Deployment, choose Group A for the Group.
For artifactory-path
, enter the path in Artifactory that has the App A files.
For destination-path-on-device
, enter the path that goes with the file structure on Device Group-A.
Complete your deployment configuration and create the deployment.
For the other apps and device groups, complete the procedure in Step 2 as follows:
Using the same update workflow, create a new deployment.
In the Deployment, choose Group B or the relevant group for that deployment.
For artifactory-path
and destination-path-on-device
, enter the paths that correspond to the device group you are updating.
It is important to remember that Update Parameters do not have default values. Once you have configured update parameters, you must specify values for them upon deployment of the software update.
Update Parameters can also be defined in the Deploy Update API call. In order to configure a deployment with an existing Update Parameter, use the lines below as an example to add the parameter values in your API call.
This page describes how to deploy a software update once you have created an Update Flow in JFrog Connect.
When you deploy more than one update to a device, the device software is updated in the order that you sent the deployments.
If a device was offline when you sent the update, the device will update when it comes up again. If you sent multiple updates while the device was down, when it comes up again, the device will update in the order that the updates were sent.
The main types of deployments are:
Regular: Connect deploys to all selected devices in a single phase. The procedures on this page deal only with Regular deployments.
To use the procedure below, you need to have one or more Update Flows created already.
To choose an update flow, do the following:
Go to Deployment in the left menu and choose the Update Flows tab.
In the list that appears, look for the Update Flow you want to deploy. If you don’t see it in the list, choose the correct Project and Group in your fleet. You can also use the Search to locate your update flow.
In the list of Update Flows, click New Deployment in the row of the update flow.
In the New Deployment popup, choose the devices that will be updated. This includes choosing the Groups and any Additional Filters for devices in your fleet.
Set the Deployment Configuration, which includes the following optional tasks:
Enter a comment that will help you remember something about this deployment.
If you have not scheduled a specific time for the deployment to run, it will start to run as soon as you click Create Deployment.
You can define what will happen if an action fails, and if a rollback is needed, how the rollback will take place. This will ensure that your devices are left in a stable and known state.
If a failure occurs during a software update, it is important to return your device to a stable and known state. When an action fails, the default behavior of JFrog Connect is to run a general rollback. However, you can have more control over the process by configuring On Failure instructions in each action block in the flow and defining the rollback actions to be taken per action block.
For each action, you can decide what kind of rollback is triggered (if any), and trigger actions such as a command or a custom script to run. When an update deployment ends, either successfully or due to a failure in the update flow, the outcome will be that your device is left in a stable state and you will have full knowledge of that state.
The purpose of the general rollback is to ensure that your application will always be able to return to a stable and running state. A general rollback is a rollback of all the actions that have been wholly or partially completed so far. This includes deleting any files that have been delivered, returning the directory structure to its previous state, and undoing any commands and scripts that have run so far. After a general rollback, your previously running versions will be running again.
Running the general rollback is the default On-Failure action marked in all of the actions. Although you can opt not to run a general rollback, we highly recommend including general rollback in each update flow.
If you chose Run General Rollback in any of your actions, you need to enable and configure the Rollback action. This includes entering the command or script that will perform the rollback.
In the Create Update Flow page, click Rollback.
Mark Enable General Update Rollback.
Choose to run either a command or a script that will perform the rollback. If you choose Command, include the values for all required parameters. If you choose Script, you will need to prepare the script in advance.
Save your rollback configuration.
In the Configure Action panel, click On Failure.
The On Failure policy determines which action(s) to be taken if the action fails. You can choose from the following.
Continue Update Flow: The update flow will continue to the next action block as if the action succeeded (i.e., the error is ignored). If there are no more action blocks, the software update will go to completion. In the deployment output, you will see that the action failed and the error that caused the failure.
Run General Rollback: When this is marked, the general rollback will run. (This is marked by default, but you can unmark it.) You can choose to run both the general rollback and an additional “Do Action” which is defined specifically per action. The general rollback will run only after all the action-specific rollback instructions have run.
When you mark Execute Customized Action, a rollback action (e.g., a command or a script) specific to that action will run. You can choose to run only a customized action to roll back the action, or run it in addition to the general rollback.
The action is triggered as described below.
Trigger when:
Whole update fails: If this actionor a subsequent action fails, then the rollback action specified will be triggered. If a subsequent action fails and has Continue Update Flow defined, then the action will not be triggered. (This option requires Connect Agent version 6.0 or later.)
Only this action fails: The rollback action will run only if the current action fails.
When there are several actions in an update flow, the rollback actions take place in the following order:
The customized actions of the current action that failed.
The customized actions that are triggered in any of the previous actions.
General Rollback (if enabled).
Different rollback actions to run are available for the different update flow actions.
This page describes the detailed procedure for creating an Update Flow that delivers one or more Docker images and uses a Docker Compose YAML file.
Before starting the procedures below, you need the following:
One or more Docker containers created and uploaded to your Artifactory repository
A Docker compose.yaml file created and uploaded to your Artifactory repository
(Optional) A release bundle created in Artifactory (if you are using a Release Bundle action, as in Example A)
In the Connect web UI, go to Deployment in the left menu and click the Create Update Flow tab.
Add a Flow Name, e.g., update-app-docker-images.
The examples on this page describe update flows that use Docker Compose, i.e., the flow uses either the Deploy Docker or the Release Bundle action. Complete the procedure in either Example A or Example B below.
If you do not have Artifactory Enterprise+ edition, we recommend using the Deploy Docker action.
Drag and drop the Deploy Docker action into the update flow and click the Edit (pencil) icon.
Complete the configuration as described below. For some of the fields, we recommend entering parameters instead of values. This will enable you to reuse the update flow many times over.
Enter the configuration as shown below.
Action Name: Enter a name for action block (e.g., my-app-containers).
Registry Account: This is the account where your container images are stored. Choose one of the following:
JFrog Default: The default Artifactory account you received when you registered JFrog Connect.
Other Registry: Any other account, JFrog or other, where you store container images.
Deployment Type: Choose Docker Compose. You can use this option whether you deliver a single or multiple Docker containers. The information in the compose.yaml will specify which container image(s) to pull.
Destination Path on Device: Enter a parameter for this, e.g., {{path-on-device}}
.
Artifactory Path: Enter a parameter for this, e.g., {{artifactory-compose-yaml-path}}
.
If you use JFrog Artifactory Enterprise+, we recommend using the Release Bundle action. (Release Bundles are available only in the Enterprise+ edition.)
Drag and drop the Release Bundle action into the update flow and click the Edit (pencil) icon.
Complete the configuration as described below. For some of the fields, we recommend entering parameters instead of values. This will enable you to reuse the update flow many times over.
Enter the configuration as shown below.
Action Name: Enter a name for your release bundle block (e.g., cool-app-bundle).
JFrog Account: Choose the name of the JFrog account. This is the Artifactory account where your release bundle is stored.
Name: You may want to deliver a different release bundle each time you run this flow, so enter a parameter, e.g., {{release-bundle-name}}
.
Version: The release bundle might have different version numbers for different deliveries, so enter a parameter, e.g., {{release-bundle-version}}
.
Destination Path on Device: Enter a parameter for this, e.g., {{bundle-artifacts-device-path}}
.
Custom Paths: (Optional) Mark this option if need to deploy files to destinations on the device other than the destination path of the compose.yaml.
Release Bundle Path: This is the Artifactory path for a release bundle that will be deployed to a location different from the destination path of the Docker Compose YAML. We recommend making this a parameter, e.g., {{custom-bundle-path-01}}
. You can deliver multiple bundles with custom paths.
Destination Path on Device: Enter a parameter for the custom path on the device, e.g., {{custom-device-path-01}}
.
Docker Compose: Mark this checkbox.
Release Bundle Path: Enter a parameter for your release bundle path in Artifactory, e.g., {{artifactory-bundle-path}}
.
Destination Path on Device: Enter a parameter for the device path where the Docker Compose YAML file will be delivered, e.g., {{compose-yaml-device-path}}
.
After completing the Configuration tab of the action, click On Failure and complete the information in this tab. The On Failure configuration defines your policy of what should happen if a delivery failure should occur. Once you have a well-defined on-failure policy, you will know exactly what should happen at each stage of the deployment process.
For the actions described on this page, we recommend using the default on-failure configurations as described below.
The default and recommended settings are marked as follows:
Run General Rollback
Do Actions
Trigger when Whole Update fails
Revert Docker Compose File
The default and recommended settings are marked as follows:
Run General Rollback
Do Actions
Trigger when Whole Update fails
Revert All Files
After completing the On Failure policy, save the action and complete the rest of the information required for the update flow.
Once you have configured the actions you need, complete the steps below.
If you would like the device to reboot after the actions have completed, mark Reboot after Update.
Click Rollback, enable the General Rollback, and choose how the rollback will run. The rollback can run either according to a command you enter or a script that you upload.
Save the Update Flow.
Verifies configuration and runs tests. Parameters: Expected exit code: 0 If failed, rollback entire update (i.e., runs )
: Can be an artifact of any file type.
: Must be a file of type <image>.swu.
: When you choose Docker Compose as the Deployment Type. The file in the Artifactory Path must be of type <docker compose>.yaml.
: For Release Bundle Path under Release Bundle Artifact Path and Docker Compose options.
In Artifactory, select the artifact you want to download. If you need help finding your artifact, see in the Artifactory documentation.
The Install Debian Package action enables you to install Debian packages onto your edge devices. The action block can be used within an to automate the installation process.
One or more Debian packages ready for deployment, signed, and stored in your Artifactory repository. To sign the Debian package, see .
The repository that you choose must have a signed key. For more information about signing, see .
Choose the Registry where your artifacts are stored. If the registry does not appear in the list, go to to add yours to the list. Then return to this configuration and the added registry will appear in the list.
Repository Name: The name of the Artifactory repository containing the Debian package you want to install. The repository that you choose must have a signed key. For more information about signing, see .
Tip: If you need help finding the parameters above in JFrog Platform, see
Learn how to configure your policy in the workflow.
A groups together the contents that make up your release and provides the bill of materials for the release. For example, you can group together the different build artifacts, such as Docker images, that make up your release. The group of files can then be deployed as a single unit to your IoT devices.
A release bundle plays a central role in the distribution flow. It specifies the different files, packages, and metadata that comprise a release, and is created and managed in. Since all the files specified in a release bundle are required in order to keep the release coherent, a release bundle is immutable.
Enter your JFrog Registry in the dropdown box. If the registry does not appear in the list, go to to add yours to the list. Then return to this configuration and the added registry will appear in the list.
Tip: If you need help finding the Name and Version in Artifactory, see .
Tip: If you need help finding the Artifactory Path in Artifactory, see
If you want the action to pull content from an account, complete the procedure in , and then choose that registry as your JFrog Registry in Step 2 above.
For your policy, choose the actions for Connect to do in case the Download Release Bundle action fails.
Learn more about and find out how they might be useful for your Release Bundles workflow.
Choose the JFrog Registry where your artifact is stored. If the registry does not appear in the list, go to to add yours to the list. Then return to this configuration and the added registry will appear in the list.
Tip: If you need help finding the Artifactory Path in Artifactory, see
If you want the action to pull content from an account, complete the procedure in , and then choose that registry as your JFrog Registry in Step 2 above.
For your policy, choose the actions for Connect to do in case the Download Artifacts action fails.
Learn how to build a workflow using a .
The Update Image action enables you to easily update device images at scale. JFrog Connect integrates functionality to provide a robust and scalable method of deploying image updates.
Connect uses only as the image repository and employs update flow mechanisms such as on-failure and rollback, retries, and status monitoring.
When you create a that uses Update Image in an update flow, you can configure the deployment to update the image on a single device or use Connect’s robust filter mechanism to update images on any subset of devices in your fleet.
Familiarity with the SWUpdate methodology described in and .
sha256
: The sha256 attribute of the IMG file. This can be obtained by running sha256sum <path_to_img>
on linux machines. You can find a description of the attribute in the table.
type
: SWUpdate has several options for the handler. (See .) The type is the string identifier for the handler, as it is set by the handler when it registers itself. For example: ubivol
, raw
, rawfile
. The type you use depends on the handler you choose.
For additional examples and explanations, see .
Choose the JFrog Registry where your new image is stored. If the registry does not appear in the list, go to to add yours to the list. Then return to this configuration and the added registry will appear in the list.
Tip: If you need help finding the Artifactory Path in JFrog Platform, see
If you want the action to pull content from an account, complete the procedure in , and then choose that registry as your JFrog Registry in Step 2 above.
Install Agent is the recommended setting for most cases. Generally, a recommended best practice is to use a separate partition () for the image update. If you do the image update using a single partition, the agent and its credentials will not be backed up.
The action runs like the default command shown below. You can enter additional commands and run options for the action to run on the device. For each additional command, click the + and choose the command and run option. The display at the bottom enables you to review the full command that will be run before you save the action.
Learn more about and find out how they can be useful in your workflows.
a. The repository that you choose must have a signed key. For more information about signing, see .
When you update software on your edge devices, you need to know that the content you are sending to the devices is secure. Your update flows and deployments in JFrog Connect are automatically scanned for security vulnerabilities using , JFrog’s solution for software composition analysis. Xray is integrated with Connect and to provide an easy and proactive solution for identifying security vulnerabilities in open-source and other third-party software.
Once you have created an using the , the , or the action, Connect displays information in the Update Flows tab about the results of the Xray scan for CVEs. (Connect uses the Artifactory path that you specified in the flow action to locate the content and its corresponding Xray analysis.) The most severe vulnerability found in the scan is displayed in the Update Flows table in the CVE Severity Column.
To get more information about the specific vulnerabilities, click the severity (or the arrow) in the CVE Severity column. The appears, where you can view analysis info and go to details about specific vulnerabilities. (For example, to drill down to a specific vulnerability, click a section of the Severity ring chart or click Applicable in the Applicability chart.)
The update flow uses . In this case, “Dynamic Update Flow” will appear in the CVE Severities column.
Learn how to create an update flow that will to your edge devices.
One of the strengths of Update Parameters is the combination of use with the request. This enables the complete automation of continuous releases of new versions by using a standardized flow for every new application version.
Learn more about how you .
Once you have created one or more in JFrog Connect, you can deploy the software update to your fleet. Connect enables you to deploy to the entire fleet at once or to deploy in various groups or subsets of devices.
Phased Rollout: Connect deploys to devices in up to three distinct phases. To set up a phased rollout deployment, see .
.
. Connect’s default behavior is to start the deployment as soon as you click Create Deployment. However, you can mark this checkbox to start the deployment at a specific time. Enter your date and time (UTC time zone) in the following format: MM/dd/yyyy HH:mm.
.
Enter the values for all of the required. An example of some deployment parameters is shown below.
Learn more about the available in the Progress popup.
Learn more about .
The use case presented in this page is intended as a demonstration of how you could use JFrog Connect and make up part of the process described in .
Of course, you can configure On Failure differently according to your use case requirements. For more detailed information about on-failure and rollback configuration, see the page.
You will be able to use this update flow from the web UI, where it appears in the list under the Update Flows tab, or by using the request in the Connect API. Whichever method you choose, you will be able to reuse this flow tens or thousands of times to deploy software updates to the IoT devices.
Learn how to use this update flow to .
Command
Enter the command to run in the box along with all necessary parameter values.
Run Command, Run Script
Script
Drop your script file to run or browse to select the file and enter it in the box.
Run Command, Run Script
Revert All Files
Deletes any files that were delivered to the devices in this action and reverts to the files of the previously running version.
Deploy Files, Deploy Artifacts, Release Bundle
Revert Docker Compose File
Reverts to the previous Docker Compose file that was on the device.
Deploy Container, when you choose Docker Compose as the Deployment Type
Restart Previous Container
Restarts the previous container version that was running.
Deploy Container, when you choose Single Container as the Deployment Type
You can always view the software update status in the Deployments tab. You can also receive an alert if the software update fails. This page describes how to configure an alert upon failure.
At any time, you can check the status of a software update in the Deployments tab. In addition, you can configure a deployment to send you an alert if the deployment fails. The alert will tell you which device(s) the software update failed on and the time of the failure.
All you have to do is define the channel for the alert, such as an email address or a webhook. This enables you to be informed about failures when you are away from your desk or busy with other things.
Before you can create an alert, you need to configure one or more communication channels on which the alerts will be delivered to you. The channel can be an email address or a webhook to a pager device or an application like Slack.
When your software deployment is to a large number of devices, there could be many failures within a short period of time. JFrog Connect’s default behavior is to send an alert for each failure. However, you can choose to aggregate several alerts into a single message by defining an aggregation duration. For example, if you enable alert aggregation and define an aggregation duration of 10 minutes, you will receive only a single notification over a 10 minute period, and each notification will list all the failures that occurred during the 10 minutes.
Since aggregation is per deployment, you will receive separate alert messages for each software update.
Enabling aggregation of alerts for update failures is a two-part process:
Set the Aggregation Duration when you configure an Alert upon Update Failure.
To create an alert for a deployment failure, do the following:
Choose an alert channel from the dropdown box and click Apply. You can do this again if you want to define multiple channels. For large deployments, it is recommended to choose channels that have bundling (alert aggregation) enabled.
Set an Aggregation Duration in minutes. The default duration is 10 minutes.
Stop the update flow for a whole deployment, for a phase of a phased rollout, or for a single device only.
You can abort the deployment to a specific device or you can abort an entire deployment. If you are running a phased rollout deployment, you can abort the current phase.
Go to Deployment in the left menu and click the Deployments tab.
In the Deployments table, in the row of the relevant deployment, click on the status area in the Status column.
To abort the deployment to a specific device, go to the row of the device and click Abort.
To abort on all devices in a deployment or in a phase of a phased rollout, click Abort Deployment on the bottom right.
In a regular (single-phase) deployment, the Abort action stops the deployment on devices that are in Pending or In Progress state. Abort does not affect devices that are already in Succeeded or Failed state.
In a phased rollout, Abort stops the deployment in devices that are in Pending or In Progress state. In addition, the entire phase might fail. (The phase could still pass if the success rate meets the condition configured.) If the phase fails, then the rollback will be triggered if it was configured.
Get a detailed picture of everything you need to know about a software deployment in JFrog Connect.
To view the progress of your most recent deployments, go to Deployment in the left menu and click the Deployments tab. The Deployments table shows you the progress summary of your software deployments and includes both Regular and Phased Rollout deployments.
The Deployments table shows the following information:
Application: The App Name if one was configured.
Start Time (UTC): The date and time when the deployment started.
Type: Indicates whether the deployment is Regular, i.e., only one phase, or a Phased Deployment with the relevant phase.
Flow Name: The name of the update flow used for the deployment.
To refresh the data in the Deployments table, click the refresh button on the upper right.
If you do not see the deployments you are looking for, click the filter button on the upper right and use the filter to change the deployments in view.
Application names and versions serve as a user-defined version control of the software updates deployed to your devices.
Version control of software updates on thousands of devices in your fleet can be very difficult. The application concept in JFrog Connect provides a simple yet powerful way to keep track of your fleet.
In Connect, you create an application, which is simply a name. When you create a software deployment, you will use the application name along with a version number as a way to associate software in the update with the devices the update is deployed to. This enables you to always know exactly which code (i.e., application and version) is running on a specific device. You can also filter devices by application and execute commands based on the filter used.
An example would be a product that includes four different services running on the device simultaneously. To utilize the application concept, define each service of your product as an application. When you update one of the services, simply define the new version of that service as the version of your application. This will enable you to know which version of the software exists on each device.
In the New Deployment configuration, select the devices for the software update. It is recommended that you do this before entering an application version, but you can also do it afterwards.
Choose Set application name and version and choose an application from the dropdown list. If your application does not appear in the list, you can choose Create New Application. Once you have created the new application, it will appear in the list.
Tip: You can also create a new application in the Devices page. If you create an application in the Devices page, it will then appear as one of the options in the dropdown list above when you create a new deployment.
Enter a version for the application that you chose.
When you create the new deployment, the application and version will be associated with the devices that you chose.
Configure a phased rollout for deploying software with JFrog Connect.
JFrog Connect enables you to create a software deployment and divide it into phases. In each phase, Connect deploys software based on tags that you have assigned to the devices. You can define the success criteria required to move on to the next phase and configure a rollback in case a phase has failed.
When you configure the deployment, just like in a regular deployment, you will create a filter that includes all the devices to be deployed. Then you will choose a tag (e.g., phase-1
) that tells Connect which devices to include in Phase 1. For the second phase, Connect automatically deploys to the remaining devices in your deployment filter. (You do not have to tag devices for the last phase.)
A three-phase rollout is like the two-phase rollout, except that you choose tags for both phase 1 and phase 2. For the last phase, Connect automatically deploys to the remaining devices in your deployment filter.
Setting up a phased rollout includes the following procedures (to be completed order):
Tag Devices
(Optional) Configure Rollback Update Flow
Choose a Deployment Filter
Configure Phases and Deploy
The procedures are described in detail below.
You can use only one tag per phase.
Each phase must use a unique tag.
For example, in a three-phase rollout you need to tag the devices for the first two phases. You might use the tags phase-1
and phase-2
, but other tag names you create are acceptable as long as they comply with the rules above. In a two-phase rollout, you would only need to tag the devices to roll out in phase 1.
In case one of the rollout phases fails, you can opt to have a rollback flow take place. The rollback flow is a set of any action blocks you wish to run when a deployment phase has failed. You configure the action blocks in an ordinary update flow.
If a phase fails, then Connect:
Aborts the current phase and the previous phases, i.e., devices in pending state are aborted.
Triggers a rollback deployment on all the devices in the current and previous phases.
If you plan to use Rollback, do the following:
Go to the Create Update Flow tab and create a flow that you will use as a rollback procedure.
Give the update flow a name that will make it easily identifiable as a rollback flow. You will need to find it later on when you add the rollback to your deployment configuration.
To configure a phased deployment, do the following:
In the New Deployment form, click Select Devices and create a filter that defines a set of all the devices to be updated. (See examples below.)
Click Set Phased Rollout.
In the Phased Rollout form, enter the information below for each phase. If you want only two phases, leave the Phase 2 row blank.
Target Devices: Choose the tag that marks the devices to be included in each phase. (This is not required for the last phase.) The tags that appear in the dropdown lists are only the tags that are available within the deployment filter that you defined in Step 3 above.
Success Rate: Specify the minimum portion of devices to succeed, expressed as a percentage, before the deployment goes on to the next phase. The success rate must be a whole number from 0 through 100.
Timeout: Set the maximum amount of time for the deployment to complete in each phase and choose the units in the dropdown (hours or days).
(Optional) If you want a rollback to run in case a deployment phase fails, mark Set Rollback.
(Optional) In the Rollback Deployment Configuration, select an update flow to run as a rollback when a phase fails. Complete the other parts of the rollback configuration (Set App Version, Alert on Update Failure, and Comment).
Save the configuration and run the deployment.
The following are some examples that illustrate different ways to use the tags and filters for phased rollouts.
You want to update all devices in Group A and roll out the update in two phases.
Tag Devices: In the Devices table, tag the devices in Group A
that you want to be in Phase 1 with tag phase-1
.
Choose Deployment Filter: In the New Deployment form, in the Groups list, choose Group A
as your filter.
Configure Phases: Choose the phase-1
tag for Phase 1. For phase 2, all the rest of the devices in Group A will be updated.
You want to update all devices that have application HomeAssist version 5 and roll out the update in three phases:
Tag Devices: In the Devices table, filter for all devices that have HomeAssist v5 for the Application. Tag devices to be rolled out in Phase 1 and Phase 2, e.g., using tags phase-1
, phase-2
.
Choose Deployment Filter: In the New Deployment form, in Additional Filters, choose Application as the criterion, and choose HomeAssist
and v5
from the dropdown boxes.
Configure Phases: Choose the phase-1
tag for Phase 1 and the phase-2
tag for Phase 2. For phase 3, all the rest of the devices having application HomeAssist v5 will be updated.
You want to update all devices that have tags Alabama, Arkansas, and Iowa, and deploy each tag in a separate phase.
Tag Devices: Create a new tag, e.g., the-whole-deployment
, and assign it to all devices that have tags Alabama
, Arkansas
, and Iowa
.
Choose Deployment Filter: In the New Deployment form, in Additional Filters choose Tags and the-whole-deployment
as the tag.
Configure Phases: Choose Alabama
for Phase 1 and Arkansas
for Phase 2.
For more information about creating a channel, see .
Enable bundling in the configuration.
When you , under Deployment Configuration mark Alert on Deployment Failure.
Learn how you can of your software update.
Once you in JFrog Connect, you can abort it at any time.
The abort options are in the display. Do the following:
Learn how to .
Once you have , you have full visibility into the status of the software update. This includes a brief summary of all deployments in the Deployments tab and a detailed view for each deployment.
Deployment ID: Unique identifier of the deployment and phase. For a , a one-digit suffix indicates the phase. Values 1-3 indicate the download phases, and 4 indicates a rollback phase.
CVE Severity: A brief listing of the vulnerability statuses detected according to the latest . Hover your cursor over the CVE Severity to see the tally of the CVE Severities of vulnerabilities detected. Click the CVE Severity to find out more information about the CVEs.
Status: The number of devices in each deployment status. Hover over the numbers to see the popover with the status names. Click on the numbers to see the .
Learn more about viewing the .
You set your application and version when you . To set the application, do the following:
Learn how to configure an for your software deployment.
that you intend to use in the phased rollout.
The phased deployment configuration uses to identify the devices to be updated in each phase. Therefore, before you can set up the phased deployment, you need to create appropriate tags and tag the devices that will be deployed in each phase.
Tip: If you decide not to use this rollback feature, you can still configure a within the Update Flow that you intend to deploy.
Go to the Update Flows tab on the Deployments page and .
(Optional) In the New Deployment form, enter the Deployment Configuration specifications, such as an , a Deployment Schedule, an ), and a Comment.
Get a detailed picture of everything you need to know about a software deployment in JFrog Connect.
To get a detailed picture of your deployment, do the following:
Go to the Deployments tab and find the relevant software deployment in the Deployments table.
In the row of your deployment, click over the numbers in the Status column.
The left side of the Progress popup summarizes information relating to the entire deployment, including:
Deployment Configuration
Deployment Progress
Deployment Parameters
On the right side, you can see drill-down info relating to the deployment on individual devices.
To see the progress of the update actions for a specific device, click the arrow on the right.
All of the update actions for the deployment on that device are shown in a list. A green check mark on the left indicates that the update action has completed.
To see information about a single update action, click the arrow on the right. Click the arrow again to close the update block view.
Use JFrog Connect’s tools for accessing and controlling your edge device.
A Deployment associates an Update Flow with a group of devices and defines the triggering that will start the software update.
Go to Deployment in the left menu and click the Update Flows tab.
In the New Deployment window, the first thing you need to do is select the devices the deployment will run on. You can deploy the software update on your entire fleet at once or you can choose subsets of devices that will receive the updates. Under Deployment Will Run On, select the Group that is relevant to this software update.
Set Application Version: Choose an application version and version number. (It might be useful to choose an application version name that is the same as the release bundle name.)
Schedule Deployment: Enter the date and time for the deployment to begin. JFrog Connect will trigger the deployment at the time you specify. If you don’t specify a time, the deployment is triggered immediately after you click Create Deployment in the web UI (or immediately after the API command is processed).
Alert on Update Fail: If there is a failure in the deployment process, you can receive alerts. To receive the alerts, complete the following:
Applied Channels: The channels over which you will be informed.
Aggregation Duration: The time period over which results of the deployment are collected from the devices in the fleet. The default is 10 minutes.
Comment: Add a comment indicating something important or something you want to remember about this deployment.
The definitions in the Deployment Configuration are optional, but we recommend that you use these to provide more certainty and insight as to the status of your deployment.
If you have a large fleet, you may choose to break up the software update into several deployments to different subsets. In this case, you deploy the workflow several times, each time changing only the group of devices in the Deployment. Deployments to subsets of devices can be according to any of the filter objects available, such as tags, device name, application version, and group.
Enter the values for the deployment parameters you defined in the update workflow. (If you are using the Deploy Update API, you will enter these parameters in your API call instead of in the web UI.)
Some examples of deployment parameters and values are shown below for the Docker Containers action block.
Next time you deploy this workflow for software updates, you might use different values for one or more of the parameters above.
Once you have filled in all the configuration and deployment parameters, click Create Deployment. The deployment will appear in the list of All Deployments, as shown below, and you can find the deployment status under the Deployment Summary.
JFrog Connect makes it easy to troubleshoot and maintain devices by using remote support tools. This page describes how to use Terminal.
JFrog Connect’s Terminal tool enables you to connect to your Linux terminal through a web-based SSH. Using Terminal, you can troubleshoot remotely and resolve issues on your edge devices.
In order to use Terminal, you need the following:
The following software installed on the device: ssh-server
and ssh-client
.
The edge device is online
The root
user enabled
You do not need to open any ports on the device or the firewall for the terminal to function.
To open a Terminal session, do the following:
In the left navigation pane, go to Devices. In the Devices table, click the three dots on the far right side of the relevant device and choose Remote Terminal.
Alternatively, you can go to Terminal in the left menu and choose a device from the dropdown list. Click Open Session.
A panel will appear showing the progress of opening your remote terminal session. A timer, counting down, also appears on the Connect button. Before the timer finishes (and before all the tiles turn green), enter the username you want to use for connecting to the device and click Connect. The default username is root
.
When your Remote Terminal session is open, you will see a new window with the command-line interface of your Linux terminal. You can start your troubleshooting in this window.
To view a brief history of the remote control sessions you have had, go to Remote Tools/Terminal in the left menu. The sessions are listed in order of device name. For each session, the table shows:
Device name and UUID
Session Duration
Close time
State
If you don’t see the session you are looking for in the table, use the Search to locate the session.
When you deploy software to your fleet, you can maintain maximum control by running your deployment on a test group and then on production groups. This page describes how to do that in JFrog Connect.
When you deploy a software update to your edge devices, you want everything to go as smoothly as possible. If there are issues, the troubleshooting should be easy, and the number of devices impacted should be as low as possible. You can achieve this by deploying in groups.
Production groups in a project range from one to numerous groups that segment the edge devices by location, product type, or some other attribute(s).
Deploy the software update to one or more test groups. Ensure that everything is working as expected and that your test devices are running as expected. If there were issues, you may need to create a new deployment and test again before deploying to production groups.
Once your software update has been validated using the test groups, you can use the same update flow on your production groups. To deploy the same software and update flow that you have previously deployed, do the following:
Go to Deployment in the left menu and click Update Flows. Find the flow you deployed and click New Deployment.
Click Select Devices and enter the new groups and any additional filters you need.
Set the same Application and Version that you used in the previous deployment (e.g., the successful test deployment or a previous production deployment).
Enter any deployment parameters that are required, and create the deployment.
For each , you can see detailed information about the deployment of a software update, including its current status, the status of rollout phases, if relevant, and the status of individual action in the update flow.
In , the left panel shows an additional area with information about the Phase Configuration.
Learn how you can after you have launched a deployment and how to use the update trigger to to devices.
JFrog Connect’s tool enables you to connect to your Linux terminal through a web-based SSH. Using Terminal, you can use a command-line interface to troubleshoot remotely and resolve issues on your edge devices.
JFrog Connect’s tool enables you to connect remotely to the local network port of your Linux edge device and forward connections such as , , a , and other port-forwarding tools.
In JFrog Connect, the tool provides a simple solution for running commands remotely on your Linux edge devices.
You can from an edge device. This is useful when you want to get log files or any other kind of file from the device.
Learn how to with JFrog Connect.
This page describes how to create a deployment of Docker images based on the Update Flow created in . You can create the deployment in the web UI or using the request in the Connect API. The procedures in this page relate to the web UI only.
Before starting the procedures below, you need an update flow created according to the procedure in .
Go to the Update Flow you created in , and click New Deployment.
Some examples of deployment parameters and values are shown below for the Release Bundle action block. If you entered parameters for , they would also appear in the Deployment Parameters list and you would need to fill in their values. (The table below does not have custom paths.)
Learn how to configure your On Failure actions and policy.
Learn how you can access and control your edge device with Connect’s tool.
To deploy a software update, you should start with one or more test groups. A test group includes devices that are in your development lab and are similar to the devices that are in production. Your test groups can be actual , as defined in , or they can be subsets consisting of devices that use to identify them as test devices.
We recommend grading the deployments to your production groups by quantity of devices. For example, first deploy to two devices, then 20 devices, then 200 devices, and then continue to deploy groups in quantities that you feel comfortable with. As long as the deployments are successful and the updated software is working, you can re-use the same update workflow, changing only the destination groups (and/or filters) for each deployment phase. You can use the feature to create your phased deployments.
Learn more about of devices.
destination-path-on-device
/home/user/cool-app-files
compose-yaml-artifactory-path
generic-yaml/1.0/docker-compose.yaml
release-bundle-name
cool-iot-app
release-bundle-version
1.0
bundle-artifacts-device-path
/home/user/cool-app-files
artifactory-bundle-path
connect-docker-bundle/1.0/docker-compose.yaml
compose-yaml-device-path
/home/user/cool-app-files
Use JFrog Connect to enable port tunneling in SSH to access and control your edge device.
The following software installed on the device: ssh-server
and ssh-client
.
To start an SSH remote access session, do the following:
Go to Remote Tools/Port Tunnel and choose the device you want to access.
Enter the SSH port for your device. By default, SSH connections are routed through port 22. If you are using OpenSSH with a port other than 22, enter that port number here.
Click Open Tunnel. Wait until Connect produces the remote access address as shown below. You will use parts of this address to construct a command as shown in the next step and the example below.
Open a terminal window, type in the command below, and substitute the values that Connect provided in the remote access address. (See example below.) Type Enter.
ssh <username>@<hostname> -p <port>
Example:
Here is an example of a ready SSH command:
ssh root@d-e571-1261-egrffkb3qhq.forwarding.connect.jfrog.io -p 22277
Where the parameters are:
<username>
– A user account name (or root) on your Linux edge device.
<hostname>
– The full URL you received from JFrog Connect remote access session window.
<port>
– The port you received from JFrog Connect remote access session window.
After the above command runs, you will be prompted for your Linux device user password. Enter it right away. After your credentials are verified, you will be connected to your device through a secure SSH connection.
You can gain port tunneling access to your edge device using a number of different tunneling methods. This page describes an example procedure using to access the device.
If you are using a Windows-based computer and you don’t have SSH enabled, you may want to refer to the How-to Geek’s article to setup SSH.
Learn how to on your edge device.
Use JFrog Connect to enable VNC port tunneling to access and control your edge device.
To start a VNC remote access session, do the following:
Go to Remote Tools/Port Tunnel in the left menu and choose the device you want to access.
Enter the port you would like to tunnel. Typically, the default port used by the VNC server is 5900. If you have a different VNC server port, enter the corresponding port number.
Click Open Tunnel. Wait until Connect produces the remote access address and copy it to your clipboard.
Paste the URL into the address bar and type Enter.
Click Continue on the subsequent popups. When prompted, enter your username and password and continue.
You can gain port tunneling access to your edge device using a number of different port tunneling methods. This page describes an example procedure using , a graphical desktop-sharing system that uses the Remote Frame Buffer protocol to remotely control your edge device.
A VNC server is up and running on your edge device. If you do not have a VNC server on your device, you can refer to the RealVNC documentation for and for .
is downloaded and installed on your computer.
When the connection completes, the desktop of your edge device will appear and you will be able to work (even behind double-NAT or firewall) as you would on your own computer. If you are having difficulty connecting to the VNC server, see the RealVNC document .
See an example of port tunneling using .
Use JFrog Connect’s port tunneling tool to gain access to your edge device.
The Connect documentation provides example procedures for opening a port tunneling session using VNC, SSH, and a web-view server.
For using a remote SSH session, you will need ssh-client installed on the device.
Depending on which port tunneling tool you use, you may need additional third-party software installed on your edge device.
To start a port tunneling session, do the following:
Go to Remote Tools/Port Tunnel in the left menu and choose the device and port you would like to tunnel. The port will depend on the method of port tunneling you use, for example, VNC, SSH, or Web View.
(Optional) Mark Allowed IP and enter an IP address. The port will be accessible only from this IP address. If you do not mark this, the allowed IP will be your current IP address.
Click Open Session. Wait until Connect produces the port tunnel address and copy it to your clipboard
Use JFrog Connect to enable port tunneling access to web applications on your edge device.
You can gain access to your edge device using a number of different port tunneling methods. This page shows an example of using port tunneling to access the web applications on your web device.
To start remote access session, do the following:
Go to Remote Tools/Port Tunnel in the left menu and choose the device you want to access.
Enter the port through which your web application or web page is hosted. For example, if you are using Nginx server, the default port is 80.
Click Open Tunnel. Wait until Connect produces the remote access address as shown below.
Copy the URL, paste it in the address bar in your preferred web browser, and type Enter.
You will now be able to access the web page hosted on your edge device through your web browser just like a regular web page.
JFrog Connect’s Port Tunnel tool enables you to connect remotely to the local network port of your Linux edge device and forward connections such as , , a , and other port-tunneling tools.
Continue using the specific instructions for the port tunneling tool you are using. For example, see one of the following procedures: , , .
See an example of .
Ensure that you use the same port that your web page is hosted through. If you are unsure about the port number, see the document to change your server’s port to a known one.
Learn a quick way to send to many devices at the same time.
With JFrog Connect, you can run a command remotely on one or multiple edge devices. View the command output and save the command to use again later.
In JFrog Connect, the Command Runner tool provides a simple solution for running commands remotely on your Linux edge devices.
Connect provides several convenient ways to run commands on your edge devices.
If you want to run a single command remotely on multiple devices, you can do it using the Command Runner tool. This page describes how to create and run commands with Command Runner.
You can create Bash commands, run them on devices you select, and save the commands for later use. After running a command, you will be able to view its output.
To enter and run a command, do the following:
Go to Remote Tools/Command Runner in the left menu and enter a Bash command in the Command field. Click Run Command.
Using groups and/or additional filters, select the device(s) to receive the command.
View the number of devices affected by the filter you applied. If this does not look right, you can go back and reset your device filter. Once you are satisfied with the filter applied, run the command.
After you have run a command, you can scroll down the Command Runner page to see the Executed Commands. For each command, the table shows a separate row for each device that received the command.
To see the full output of the command on a specific device, click View Output on the right side of the table. A popup with the output information like the example below will appear.
Connect comes with a number of commands ready to use. If you want to use one of these commands or a command that you have added and saved, do the following:
Go to Remote Tools/Command Runner in the left menu. Find the command in the list of commands and click the green arrow. If you don’t see the command in the list displayed, use the Search to find the command.
Select the groups and/or filters of the device(s) to receive the command and run the command.
To add a new Bash command, do the following:
Go to Remote Commands and click Add New Command.
Enter a name that will help you remember the command, enter the Bash command, and save.
The command will appear in the list of Saved Commands, and you can reuse it whenever you need it. The command will also be available in the list of Control Commands on the details panel of the Devices page.
If you just want to run a single command remotely on a single device, you can do this quickly on the of the Devices page.
If you want to run several commands in succession, or run a command along with other operations on the edge device, create an that uses the action block.
By default, Connect runs the commands on your edge device as a Linux root user. If you want the commands to run as non-root, see .
You don’t want to run commands on your device as root user? Learn how to .
In JFrog Connect you can easily retrieve logs or other files and folders from your IoT device.
You can retrieve a file or folder from a device. This is useful if you want to get log files or any other kind of file from a device.
To retrieve a file or folder from a device, do the following:
Choose the name of the device from the Device list.
For a single file, enter the path on the device including the file name. For an entire folder, enter the path including the folder name on the device.
Click Fetch. In the Fetched Files table, you will see the state of the file fetch action in the State Column.
When your file or folder has been fetched successfully, click the icon in the View column.
Click Download or View to see the contents of the file retrieved. If your file is above the viewable file size in Connect, you can download the file and view it in a separate viewing application.
The content you retrieve from a device is available for three days from the Connect web UI.
When you use the Connect UI to retrieve the files, the content is also automatically saved in Artifactory and is available there whenever you want it.
To find the content in the Artifactory web UI, go to Artifacts and the following path:
connect-default-general/upswift-general/devices/<your-device-uuid>
In addition, you can retrieve the content from Artifactory using the Artifactory CLI.
You can run commands remotely on your edge device as a root or non-root user. This page shows how to run as non-root.
When you run a Bash command on the edge device using the Command Runner or the Update Flow tool, by default JFrog Connect runs the command as the Linux root user on the device. If you do not want the command to run as root user, you can change the user.
To change to a non-root user on edge device, do the following:
Use the following command:
Change <user_name>
to the non-root user name, change <cmd>
to the command you want to run, and run the command.
Go to File Fetch in the left navigation tree and set the project, group, and any additional filters you need in the at the top of the page.
The in the Connect API returns a URL to a location in Artifactory. You can use the Artifactory UI, API, or CLI to download the files from this URL. The files may not be available immediately at the URL. They become available when the device completes a successful upload of the files.
Learn how to from your fleet.
Learn how to use action blocks in your update flows.
JFrog Connect sends alerts about your devices. For a device resource or process, you just need to configure an alert channel, such as email or webhook, and define the alert threshold.
In JFrog Connect, you can create alerts that will inform you about various states and resource usage of your devices. For example, you can set a trigger to send you an alert whenever a device has used more than 80% of its disk space.
Creating an alert trigger requires the following procedures:
Create Alert: Define the type of alert and a threshold for triggering the alert. This procedure is described below.
To create an alert, go to Alerts in the left navigation tree and click Create Alert.
Complete the following information:
Alert Name: Enter a name to help you remember what this alert is for.
Alert Channels: Choose an alert channel from the list and click Apply. You can add multiple channels. If there are no channels in the list, click Create Channel and define one.
Alert Type: You can receive alerts about the device resources or about processes on the device.
Trigger when: Define the threshold that will trigger an alert. For example, CPU > 80%.
To view a list of the alerts that have been configured, go to Alerts and click the Configuration tab.
The table shows a summary of the alert configurations. To edit an alert configuration, click the edit pencil.
To view the list of alerts that have been triggered, go to the Alerts page and click the Triggered Alerts tab.
The Triggered Alerts table shows information about each alert.
Each device can trigger a configured alert only once every 10 minutes.
Alerts are automatically indicated when they trigger and finish, and they are observable in the Triggered Alerts tab. Finished indicates that the alert is out of the defined measurement.
There are different tools available to filter the alerts displayed.
Filter: Filter according to Alert Type or Alert State.
Search: In the Search box, you can filter by any string in the Device Name.
Time Period: You can specify the time period from which to display the alerts, for example, the last five minutes, the last hour, the day, the last three days, or the last week.
To change the state of an ongoing alert, click the check mark and click Finish Alert.
To delete an alert completely from the system, go to Alerts in the left navigation tree.
In the Configuration tab, click the Edit pencil.
Click Delete Alert.
Prepare Channel Type: Create an email account or a that will be used in your channel configuration.
: Configure the channel in which you will receive alerts.
Applied on: Choose the devices the alert will be applied to. If you do not specify anything in the , the criteria in the will be applied.
Learn how to on which you will receive alerts.
A channel is the medium, such as email or webhook to an application, over which you receive alerts in JFrog Connect. This page describes how to configure channels.
You must have at least one channel configured to configure an alert in JFrog Connect. The channels give you a lot of flexibility with your alerts in that you can configure different alerts to be delivered on different channels, and different channels to serve different subsets of devices.
To create a channel, go to Alerts in the left navigation tree and click Create Channel.
Complete the following information:
Channel Name: Enter a name that will help you remember the purpose of this channel.
Send to channel when alert triggered: The notification will be sent to the channel as soon as the alert is triggered. (Can be marked with or without marking “when alert finished”).
Send to channel when alert finished: A notification will be sent to the channel when the alert is finished. (Can be marked with or without marking “when alert triggered”.)
Send to channel with bundled alerts: Mark this to avoid multiple messages through the selected channel type in case multiple devices are triggered at the same moment. If enabled, the alert will be sent as a list of all triggered devices in a single message.
Channel Type: Can be Email or Webhook. If you choose Email, enter the email address as shown below. The address must exist already. The email body is a standard email and cannot be customized.
If you choose Webhook, enter the Webhook URL. This is the URL of the application that will receive the alert messages.
To see a summary of all the channels that have been configured, go to Alerts in the left navigation tree and click the Channels tab.
To change the channel configuration, click the pencil edit icon and make your changes.
To disable a channel, click the toggle switch in the Enabled column. You can reactivate the channel later by clicking the toggle switch again to put it in the Enabled state.
To delete a channel from Connect, do the following:
In the Channels tab, click the pencil edit icon.
In Channel Details, click Delete Channel.
The Resource monitor tool lets you view all of your device's resource usage in one place, in real-time.
For 1 device you can see up to one week of resource usage history.
For 5 devices you can see up to 24 hours of resource usage history.
For more than 5 devices up can see to 5 minutes of resource usage history.
Graph gaps:
If the distance between two points is greater than 1000 times that of the two closest points, the graph will be broken.
The following metrics are monitored by default: RAM usage, CPU usage, DISK usage
Webhooks enable you to send JFrog Connect device alerts to a third-party application or to an application of your own. This page describes how to configure a webhook.
You can use webhooks to post requests to your own application (e.g., your in-house dashboard application) or to a third-party application. The schema consists of a JSON payload that contains the device details along with custom headers you choose.
When your webhook channel is activated, if the channel does not receive any request within three attempts, it will be marked as invalid and will stop further attempts.
For Channel Type, choose Webhook and enter the Webhook URL. This URL will receive post requests with the JSON payload you define.
Configure the payload schema as described below and save your settings.
You may use the default schema, or you may create a custom JSON payload by defining your own schema.
The schema can contain custom parameters. You just need to define additional variables using the Connect syntax.
Below is the list of Connect variables that can be used in the schema.
When bundled alerts are enabled in the channel configuration, the following variables can be used in the schema.
You can add custom request headers for use in your schema. The default request header (i.e., if you don’t add any custom headers) in Connect is:
Content-type: application/json.
You can use preconfigured webhook templates for third-party products. Below are examples for Slack and PagerDuty.
When the service is created, you will receive a service key. Use the service key as the value for routing_key
, as shown in the example below.
A channel is the medium over which you . For example, you can receive alerts by email or by webhook to one or more applications such as a pager or an external dashboard.
You can use the default payload schema for the alert message, or you can .
Learn how to customize a webhook payload or use preformatted webhook templates in .
The Resources monitor allows you to view your fleet resource usage in real-time for up to one week. You can choose which devices to monitor via the
JFrog Connect provides tools for continuous monitoring of your edge and IoT devices. This includes monitoring of - such as CPU, RAM, and disk space - and running on the devices. Automated help to keep the devices safe and stable and help you address issues before they escalate.
Learn more about the .
To use a webhook as a channel for receiving , do the following:
Start the procedure to .
Reach out to Slack to configure your application and receive a unique webhook URL. For more information, see .When Slack is configured, you can use the URL provided as the webhook URL.
To set up a webhook to PagerDuty, you need to create a service with event API integration. For more information, see .
Learn how to from an edge device.
"{{ALERT_NAME}}"
The name of the alert.
"{{ALERT_TYPE}}"
Alert monitor type: resources, application, or process
"{{ALERT_VALUE}}"
The threshold value that triggers an alert.
"{{STATE}}"
Whether the alert was Triggered or Finished.
"{{DEVICE_IP}}"
The last IP address of the device.
"{{DEVICE_ID}}"
The alphanumeric identifier of the device.
"{{DEVICE_NAME}}"
The name given to the device.
"{{DEVICE_GROUP}}"
The group that the device belongs to.
"{{DEVICE_PROJECT}}"
The project that the device belongs to.
"{{DEVICE_ADDRESS}}"
The physical location (e.g., street address) according to the IP address of the device.
"{{DESTINATION}}"
The Webhook Channel URL.
"{{DASHBOARD_LINK}}"
Platform link to see further information about the alert.
"{{ALERT_TIMESTAMP}}"
The triggered or finished time of the alert.
"{{TRIGGERED_VALUE}}"
The value of the parameter (e.g. CPU or disk space) that triggered the alert.
"{{ALERT_NAME}}"
List of alert names in the alert bundle.
"{{ALERT_TYPE}}"
List of alert monitor types (resources, application, process).
"{{ALERT_VALUE}}"
List of values of the parameter (e.g. CPU or disk space) that triggered the alert.
"{{STATE}}"
List of states (Triggered or Finished) for the devices.
"{{DEVICE_NAME}}"
List of IP addresses of the devices.
"{{DEVICE_ID}}"
List of device identifiers.
Monitoring processes whether they are running or not and while receiving alerts accordingly
To begin monitoring a process, enter the software binary name. Connect monitors the given app name by searching for the currently running process with a similar name on the connected device.
To monitor running software, In most cases, the software binary name equals the executable file.
4 examples of binary names:
1. app.py
- running python application, enter the python app main file name that is being executed by python.
2. app
- running an executable binary file, enter the binary file name.
3. app.sh
- running a Bash file, enter the Bash file name.
4. mysql
- running a ready-service, enter the service name.
*In case of monitoring issues, it is recommended to enter the full path of the running application, for example: /home/device-app/app.py
To monitor running Docker container, choose and enter one of the 2 options:
runtime-runc
- will monitor if there are any running containers.
Enter the specific running command - the command that is being used to run the application inside the container, for example: python /home/app.py
. The container command can be found running "docker ps" on the edge device.
Information about JFrog Connect Agent releases.
Connect Agent sends the device’s system information to the server when the device is initialized. The information listed below is now sent and visible in the Technical Details of the Device Details panel in the web UI.
OS
Node Name
Kernel Release
Kernel Version
Hardware
Hostname
This information is in addition to the IP Address and System Information, which were already visible in the Technical Details.
Supports a new authentication mechanism that uses JSON Web Tokens (JWT).
Uses a project-device pairing token (a JWT) to support secure interactions between a Connect project and the Connect Agent on a device.
Connect Agent now supports ARM v6 architecture.
This is a patch to Connect Agent version 6.0. When this is installed, the version in the Connect web UI will appear as Connect Agent version 6.0.
Enhancement for better performance on ARM 64 bit systems.
Wider support of ARM 64 bit on Linux based systems, specifically on Raspberry Pi OS.
For more information, see .
JFrog Connect feature releases and updates.
11 February 2025
11 February 2025
11 February 2025
Enhancements have been made to the top and side menus in the Connect web UI.
The current Project now appears in a combobox on the top left of the page.
To choose a different project, click the combobox and choose a project from the list.
To add a new project, scroll to the bottom of the list and click + Add project.
The Create Project button has been removed from the Project page in Settings.
A new Help icon (?) appears on the upper right.
The widget for opening a ticket no longer appears in the bottom right.
Click the User icon to see the name of the current user and to log out of Connect.
At the bottom of the left navigation bar, the following have been added:
A link to the JFrog Platform
The username of the current user
9 December 2024
28 November 2024
25 November 2024
13 November 2024
12 November 2024
27 October 2024
Check the JFrog Connect server status.
To check the status of the JFrog Connect server, do the following:
Go to the JFrog Cloud Status page and choose the EMEA region.
Scroll down to the last server in the list: EUROPE - JFConnect Services (Frankfurt) - AWS
Each column in the band represents one day and indicates the server status on that day. You can see more information when you hover over a column. Historical information is displayed up to 90 days back.
To view the historical status by monthly breakdown, do the following:
Click View Historical Status.
In the dropdown list, choose EUROPE - JFConnect Services (Frankfurt) - AWS.
Configuration of image registries is now under in Settings. In the Registry Management Tab, you can:
(including Artifactory Edge)
using Docker Hub, AWS ECR, and other private registries as the registry provider.
Access scoping is a method of ensuring that only the intended artifacts are distributed to the intended edge and IoT devices. This is a way of protecting both the artifacts and the devices from unauthorized or inappropriate distribution. has been added as a mandatory part of the JFrog Registry configuration.
Register Device has been taken off the top menu bar. It is now a button on the page.
Click the new bell icon to see a list of notifications. A dot on the bell indicates that you have new notifications. Only in Connect can see the notifications.
Two new requests are available in the Connect API. Abort Deployment stops the deployment to all devices that are in pending state. Abort Device Deployment stops the deployment to a single device that you specify. Learn more about these API requests in and .
This feature enables you to move one or multiple devices from one project to another. You can read more about it at . A new Connect API request, , moves a single device from one project to another.
is an action block that you can add to an update flow in JFrog Connect. When you deploy the update flow, the action block will install one or more Debian Packages on the set of devices you choose.
provide for secure communication between the Connect Server and the Connect Agent. The tokens work with Connect Agent 7.0 and higher.
The Fetch Files request in the Connect API enables you to fetch one or more files, such as log files, from an edge device. You can also fetch an entire folder. The API documentation is available at , and the documentation for the feature already existing in the web UI is available at .
You can configure a phased software rollout consisting of two or three phases. In each phase, Connect deploys software based on tags that you have assigned to devices. Learn more about deploying software in phases in .
JFrog provides a page, , where you can check the status of the JFrog Connect server. In addition, you can check the status of other JFrog servers in regions around the world.
If your device doesn't support HTTPS, and it can only work with HTTP traffic, you can download the agent using the next HTTP command:
Your wget
can't execute HTTPS requests. This can happen when you have an old wget binary or old Busybox binary. Connect installation requires an updated wget
or Busybox
(version compiled in 2015 and above).
To fix this you can try to run the installation command with "http" instead of "https" or upgrade your wget/busybox.
To upgrade wget
, please run the commands below:
apt -y update
apt install -y wget
DEPRECATED
There might be situations when some of the MAC addresses are changing after a reboot. You can find out if this is the situation with your devices by checking your MAC addresses, rebooting the device, and checking them again.
Please turn on the option to "Register devices by duplicating image" in the settings category, under your project. Next, enter the number of the persistent MAC addresses your devices have. This will adopt the new devices registration algorithm for your account to work with the type of your devices.
Examples
You have 5 devices, all of them have 1 MAC address each. In that case, you will enter the number 1 at the persistent MAC addresses input.
You have 5 devices, all of them have 3 MAC addresses each. If so, you have to check how many of those MAC addresses are persistent across reboots. Let's say, 2 of them are persistent (meaning they are not changing when you reboot the device) and 1 of them changes every reboot. In that case, you will enter the number 2 at the persistent MAC addresses input.
You have 5 devices, some of them have 3 MAC addresses and others have 2 MAC addresses. In that case, you have to check how many of those MAC addresses are persistent across reboots for both types of devices. Let's say that 1 MAC address is persistent on the devices that have 2 MAC addresses in total, and 2 MAC addresses are persistent on the devices that have 3 MAC addresses in total, then you will enter the lower number of them at the persistent MAC addresses input, which is 1 in this case.
Add --no-check-certificate
after the wget
inside the installation command:
Connect agent can’t work properly with SELinux enabled, to fix the issue, please add the following se-policy to your Linux device or disable SELinux:
Disable SELinux
vi /etc/selinux/config
(edit SELinux config file).
Change the SELINUX parameter from enforcing to disabled (disable SELinux system).
reboot
(reboot the device).
OR permit Connect's Agent in SELINUX Run:
semanage fcontext -a -t bin_t /etc/connect/service/ConnectAgent
restorecon -v /etc/connect/service/ConnectAgent
service connect restart
*Remote control / remote access will still won't work until ssh and sshd binaries will be permitted as well.
To upgrade Busybox
, please and replace with the old binary or contact us at support@jfrog.com
for technical installation support.
When running an application with display, in some cases, by running the software remotely from the JFrog Connect platform, the software cannot find the display.
To fix the issue, add the next Bash commands to the software code: *Python example on a Raspberry Pi
Make sure to change the user "pi" in the path "/home/pi/.Xauthority" with your GUI Linux device user.
In case of running a Bash script, here are the same needed lines:
Some packages installations require user interaction. If you are installing/upgrading packages using the apt
command, add the next option at the beginning of your apt
command: DEBIAN_FRONTEND=noninteractive
For example:
DEBIAN_FRONTEND=noninteractive apt-get -y install <package name>
There are several cases when the Remote control tool will not work. If the tool doesn't work with your devices, please check the option below:
Make sure root
user exists and enabled. In case it is locked, here is how to enable it:
Set root password sudo passwd root
Activate root user sudo passwd -u root
Make sure openssh-server
is installed, or install it by running apt-get -y install openssh-server
Make sure network port 443 is OPEN in the device firewall or on the Router (OUTPUT table) when opening a remote control session.
Make sure you have a valid DNS record. You can add a DNS record by running the command: echo "nameserver 8.8.8.8" >> /etc/resolv.conf
In case the device firewall is on DROP mode, please run the next commands to allow Connect agent using iptables
:
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -p tcp --sport 442 -j ACCEPT
iptables -A INPUT -s 127.0.0.1 -p tcp --dport 442 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -p tcp --sport 442 -j ACCEPT
iptables -A OUTPUT -s 127.0.0.1 -p tcp --dport 442 -j ACCEPT
iptables -A OUTPUT -p tcp -d api.connect.jfrog.io --dport 443 -j ACCEPT
iptables -A OUTPUT -p tcp -d remote.connect.jfrog.io --dport 443 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
If none of the above solves the issue, please verify your device and PC internet connection stability.
Please follow guide.
If you are having an issue, try checking the troubleshooting topics in this section.