July 17, 2020

Implementing a Flutter CI/CD Pipeline in Jenkins: Part 2 (Jenkins Instance Setup)

Originally, I wanted to get the Flutter CI/CD pipeline implemented in a Docker container, as those are the easiest way to create a highly customized virtual server, and thus gave me the best chance of quickly creating a virtual server with the components I needed. However, once I successfully implemented a Jenkins environment that build a Flutter project into a release Android APK and moved on to iOS, I hit a roadblock. It is only possible to build iOS projects on MacOS. Thus, I needed to move to a solution built on a MacOS machine. This necessitated running a Jenkins instance directly on my Macbook without using a Docker container at all. Luckily, this is very simple using homebrew, and the process is outlined here. This process is also the process you’ll need to follow if you’re wanting to set up a remote Jenkins instance!

One of the first things I learned in my Jenkins education is that the easiest way to set up a Jenkins pipeline, is to use a Jenkinsfile. This Jenkinsfile defines each stage and step in the process, from Flutter commands to sh or bash commands. Jenkins automatically detects Jenkinsfiles in the base directory of projects brought in from whatever source you choose. For the purposes of this article, I will be showing how to integrate bitbucket projects into Jenkins. To do this, you must add two plugins. These two plugins together, ‘Bitbucket’, and ‘Bitbucket Branch Source’, will allow you to use a Bitbucket as a source in Jenkins. A ‘source’ in Jenkins is where Jenkins looks to execute commands against. In addition to these two plugins, this pipeline also needs the AppCenter plugin to distribute to AppCenter. If you plan to distribute somewhere else, that plugin isn’t necessary.

Image for post

To add plugins in Jenkins, navigate to ‘Manage Jenkins -> Manage Plugins -> Available’. After you install the plugins, you’ll have to restart your Jenkins server for those plugins to be running. Luckily, Jenkins has a quick option once they’re installed to reboot.

Image for post

Once those are installed, you can create your Jenkins Pipeline. On the Jenkins server, select ‘New Item -> Multibranch Pipeline’ and save.

Image for post

In order to access Bitbucket sources, you’ll have to add your credentials to Jenkins. ‘Credentials -> Jenkins -> Global credentials -> Add Credentials’.

Image for post

Then, fill in a display name and description. Under ‘Branch Sources’ click ‘Add source’ and select ’Bitbucket’. Next you’ll need to select the credentials you just added and enter in the name of the owner of the repo. Once you do that, a dropdown with all of that owner’s repos will populate(assuming you have access to any). Select the one you want from that dropdown.

Image for post

Assuming everything is set up correctly, Jenkins should automatically scan the source and run whatever Jenkinsfile it finds. This concludes Part 2 of this 4 part series! Next up is Part 3 where I’ll go over the Jenkinsfile and what each part of it does.

July 15, 2020

16 Powerful ‘Startup’ Strategies For Your Tech Team

At a small tech company that’s just getting off the ground, a scrappy, “get-it-done” startup mentality is often the key to growing and scaling. At a larger or more established company, this mentality can sometimes get lost or bogged down in corporate processes.

If this is the case in your organization, it can help to rally your tech team around an internal “startup mentality.” But this is often easier said than done. To set you on the right course, we asked 16 members of Forbes Technology Council what steps an enterprise tech team can take to operate more like a startup. Here’s what they had to say.

1. Leverage smaller teams.

The startup mentality is like Facebook’s initial motto, “Move fast and break things.” Larger companies cannot afford this, but there can be a middle ground by creating smaller teams and empowering them to make their own decisions backed by strong quality assurance. One big motivation for a tech team is seeing their work in production, so a faster deploy cycle helps keep the team motivated and driven. - Vishal AgarwalItsACheckmate.com Inc.

2. Task a group with getting you to the ‘proof of concept’ stage.

The process for developing a production-grade product is different than what is required for rapid innovation. The playbook I like is to create an emerging tech group with an entrepreneurial leader, focusing on ideation and getting concepts to proof-of-concept stages—go-to-market innovation should be in the mix. After successful POC, find the “business owner” who will productize it and run with it. - Praveen Mandal, Volta Charging and 2predict

3. Foster a creative company culture.

Startup mentality is often associated with creativity, a blank-slate mentality and innovation. As an enterprise matures, structure is needed. However, a culture of creativity, open-mindedness, out-of-box thinking and flexibility should be fostered. The resulting inputs can be shaped to conform or directionally comply with the guardrails of an enterprise architecture strategy or principles. - Siva Saravanan, Wavestone

4. Start with one team of innovators.

Having a startup mentality is a must for companies as it’s the only way to succeed in a dynamic world. It empowers people to try new approaches to old problems and create a culture based on the “fail fast; succeed faster” mantra. How to step in this direction? Start small—create one team to drive innovation and changes to existing or new processes. - Ivan Fioravanti, CoreView

5. Don’t stop looking for breakthroughs.

A startup mentality keeps everyone looking for breakthroughs at all times. It empowers people to work with maximum flexibility and bring innovative ideas to the table. A strong grip on changing trends and the ability to be creative is integral for creating tech wonders. When it comes to technology, innovation is the secret recipe. You cannot create wonders without thinking unconventionally. - Salman Lakhani, Cubix Global Inc.

6. Break down silos.

Any organization can benefit from speeding the pace of innovation, which startups are known for. In today’s agile and unpredictable world, companies need to ensure they’re making decisions as fast as possible. To start, removing the silos that often plague bigger companies lets teams understand a trend that’s happening in the industry, make a decision and act as quickly as possible. - Sujai Hajela, Mist

7. Encourage the team to ‘break things.’

There is always a need for innovation—even in large companies—and the best way to innovate is to iterate quickly and “break things,” as some say. There are many good advantages of startups, such as a quick minimum viable product, iteration, quick fixing, boundary-pushing and others. Large companies would do well to incorporate these into their everyday work. - Mercedes Soria, Knightscope

8. Empower your employees and embrace failure.

I highly recommend companies create a dedicated innovation group that formally ideates and experiments with new products, services and technologies. This group should fully embrace failure as a positive and not a negative trait. Employees of the company should be empowered by being given the funding and resources that enable them to test out ideas that could make an impact on the organization. - Eugene Khazin, Prime TSR

9. Break teams into pods with core responsibilities. 

Maintaining a startup mentality adds a sense of empowerment to the employees, which helps foster accountability and innovation. A good way to accomplish this would be to break down a team into certain pods with core responsibilities. During feature implementation, there would be ample coordination between pods, building out team camaraderie and allowing self-regulation as well. - Mihir Shinde, B&H Photo Video Pro Audio

10. Adopt a ‘microservice’ model.

Technology is changing business much faster than ever before. Product cycles are becoming shorter, and large companies need to be able to adapt fast to avoid obsolescence. Adopting a startup mentality is essential for big companies to survive. Such a mentality can be feasible in a “microservice,” non-monolith business structure. Remember, a group of small boats can change direction faster than a big ship! - Ahmad (Al) Fares, CeliTech Inc.

11. Create small initiatives in response to market needs, and pivot when needed.

Startup rules drive value for innovation in mature organizations too. Operate with smaller, focused teams. Identify market problems and know how many people will pay what price to solve them. If your tech initiative fails or stalls, accept the failure and pivot or close it down to avoid throwing good money at the wrong idea. Start small and scale rather than going big too soon. - Bob Hiss, Accenture

12. Get rid of the ‘box.’

This is obviously going to vary on a case-by-case basis, but I think tech teams generally thrive in a creative environment fostered by a “startup mentality.” It’s a whole lot easier to “think outside the box” when there’s no “box” placed around you in the first place. The key is having a good workflow process to interface between your freewheeling tech team and the rest of the business. - Dan Demers, Cinchy

13. Maintain a two-speed culture.

The one thing that is constant about tech is change, and the winners are on the forward edge of this change. Maintain a two-speed culture to keep your tech team focused on change. The keys to success for driving a startup mentality in a large company are to use small teams, give permission to go outside traditional boundaries and hire talented individuals. - Sanjay Srivastava, Genpact

14. Understand the key startup principles.

Maintaining a startup mentality can give teams the fluidity and flexibility they need to be successful. The most successful startups in the last couple of decades all had a few things in common: They challenged the status quo, made mistakes, weren’t afraid of change and adapted swiftly. Ultimately, understanding these simple principles leads to creating intuitive and easy-to-use products. - Abishek Surana Rajendra, Course Hero

15. Have a separate ‘startup’ within the company.

An established company must be willing to disrupt itself because if it doesn’t, another startup or corporation will. Having a disruptive innovation mentality necessitates carving out a separate division or “startup” within an organization with an independent team, its own funding and differentiated KPIs. - Bradian Muliadi, Analisa.io | Social Commerce Intelligence

16. Operate in a high-speed environment.

A startup mentality can benefit teams of all shapes and sizes by operating in a high-velocity test-and-learn environment. Innovation happens faster and more organically, which helps companies adapt to the ever-changing market. Startups tend to be passion- and purpose-driven, with outside-the-box thinkers—this creativity yields the best work! - Amy Czuchlewski, Bottle Rocket

This article was published on Forbes.com

July 15, 2020

AI and ML help digital brands deliver exceptional UX

Adolphus Nolan III, Solution Architect at Bottle Rocket, highlights how AI and ML are helping marketers exceed some of the loftier user experience expectations with essentially minimal effort.

30-second summary:

  • An individual user experience can now be influenced, enriched and personalized using the learnings from millions of similar (or dissimilar) user experiences. And the tools to get started have never been easier to access.
  • Machine learning (ML) will be most valuable for brands if your marketing and product teams are brought into the fold.
  • Widespread adoption of ML tools will drive product teams and marketers to rely on AI for decision making and improving the overall customer experience.
  • Investment in AI and ML should be focused and tied to a single real-world problem such as reducing customer service costs or improving conversion rates.

Artificial intelligence (AI)—like most disciplines—has made staggering advancements in the 2010s due in large part to powerful leaps forward in cloud computing.

Through AI and machine learning (ML), systems can now perform functions based on what they learned from data rather than what was explicitly programmed by a human.

This allows the software to adapt, become more robust and process information that the software wasn’t specifically coded to handle.

An individual user experience can now be influenced, enriched and personalized using the learnings from millions of similar (or dissimilar) user experiences. And the tools to get started have never been easier to access.

For the first time in recent history, digital brands are empowered to meet or exceed some of the loftier user experience expectations with essentially minimal effort.

Marketing and AI

Marketers will be able to use AI to better predict customer lifetime value and target customers more accurately.

Using ML, each potential customer’s likelihood to churn can be compared to current high-value customers by comparing profiles. And while this propensity can be guessed, it would be without any strong degree of fidelity.

ML offers objective analysis at scale for your dataset or other datasets you may want to compare against.

Product teams and AI

Product teams will be able to link data from disparate data sources to craft a richer experience.

When developing digital (or physical) products in which the goal is to inspire utility, it is paramount to continue to gather usage information from users: every screen viewed in an app, every level completed in a game, every cup of coffee digitally initiated, all produce usage logs.

At scale, this could amount to millions of records sent from hundreds of different touchpoints. And for product teams working with designers and engineers, some insights are required to continually improve product offerings.

The demand for ML keeps growing

Crowdflower ran a recent survey with data scientists from a broad range of backgrounds, including those who were new to the field and those who were at a chief data officer level.

The survey revealed 50 percent of respondents noted ML had significant importance for their companies and their departments. The problem is that most companies don’t know where to start or are boiling the ocean by including too many things.

Investment in AI and ML should be focused and tied to a single real-world problem such as reducing customer service costs or improving conversion rates.

The demand for ML keeps growing. As businesses are shifting to stay relevant in the cognitive era, ML will both support and drive today’s data scientists and advanced analytics leaders into the future.

This article was originally published in ClickZ.com.

July 10, 2020

The 16 Most Influential (And Inspirational) Modern Tech Leaders, According To Industry Experts

If you ask a group of tech leaders who they believe is the most influential tech leader of our era, you’ll probably get a wide range of answers. From industry “celebrities” like Bill Gates and Mark Zuckerberg to the quieter leaders who stay out of the spotlight, there’s no shortage of innovators who have changed the tech industry—and the world—as we know it.

As successful tech leaders themselves, the members of Forbes Technology Council often seek to emulate the industry’s movers and shakers. We asked 16 of them to share their choice of the most influential tech industry leader of our era, and why.

1. Elon Musk

I have met Elon Musk, and I find him so influential because of the sheer number and variety of technology companies he has started and grown. He has influenced everything from digging tunnels more cheaply to connecting brains to machines, space launches, electric cars, rapid transportation, and electricity generation and storage—each time having an opportunity to radically reshape a particular market. - John Walsh IIIRed Summit Global 

2. Neil Gunther

Neil Gunther developed the universal law of computational scalability. This law is profoundly powerful and not only explains the factors behind scaling computational systems but also the underlying dynamics behind agile teams and highly scalable organizations. - Sheldon Monteiro, Publicis Sapient

3. Antonio Neri

Antonio Neri, CEO of HPE, is a visionary who has made a big bet on moving to an “Everything as a Service” model by 2022. The move to an entirely services-led organization and the disruption of a decades-long, hardware-based sales model in enterprise IT is a bold move. Neri’s engineering background, customer-centric approach and strategic acquisitions put HPE ahead in the market. - Jo Peterson, Clarify 360

4. Jack Dorsey

Jack Dorsey, CEO of Twitter, is the influential tech leader of our era. He has built great tech companies like Twitter and Square while leading the charge for curbing false information on social media. Twitter is able to stand up and block inflammatory or fake news from spreading. - Umesh Vaidyamath, INSZoom.com, Inc.

5. Steve Jobs

I believe the most influential tech leader of our era was Steve Jobs. He was so forward-thinking and innovative and utilized out-of-the-box business and product strategies. He created something truly unique and set up growth for Apple for many years to come. - Marty Puranik, Atlantic.Net, Inc.

6. Meredith Whittaker

AI researcher Meredith Whittaker is the thorn in Big Tech’s side—in the best possible way. After leading walkouts at Google over diversity and accountability, she reinvented herself as an AI ethicist, elevating awareness of algorithmic bias and sparking a backlash against “black box” systems. As employees and advocates work to make Big Tech more accountable, Whittaker is leading the charge. - Chris Turlica, MaintainX Inc.

7. Satya Nadella

Satya Nadella’s belief in customer value as the lodestar for everything Microsoft does is a radical shift in culture for Microsoft and, by example, the entire technology industry. It’s a shift from focus on self to focus on the other, and it’s a remarkable example of how to build lasting value in every business. - Jon Sobel, Sight Machine

8. Jack Ma

Jack Ma experienced many personal and career failures prior to emerging as a recognizable tech leader. The ability to overcome misfortunes and still achieve one of the most influential tech leadership roles in the world takes a great deal of passion, lots of energy and a commitment to keep marching forward no matter what happens along the way. - Jay Hakami, Sky I.T. Group

9. Jeff Bezos

When you look at all the companies, brands and organizations you interact with on a daily basis, you will be hard-pressed to find one that Jeff Bezos doesn’t influence, whether directly or indirectly. He might not be a tech professional but he does influence almost every industry, so I think he is the most influential tech leader in our era. - Magdiel Rodriguez, Alivi

10. Salman Khan

Salman Khan, founder of Khan Academy, may not be an obvious tech leader, but he is my choice for the most influential because he effectively used technology to make the world a better place by bringing education to the masses for free. Touching 100 million users annually, Khan’s goal of “leveling the playing field” is the promise of what technology can be: a tool for positive change. - Neelan Choksi, Tasktop Technologies

11. Lt. Gen. John ‘Jack’ Shanahan

Lt. Gen. John “Jack” Shanahan served as the first director of the Joint Artificial Intelligence Center (JAIC). He advanced a bold vision: “to transform the DoD through AI.” He espoused the idea that our future national security and economic security, as well as the preservation of “our unalienable rights of life, liberty, and the pursuit of happiness,” depend on embracing AI across every element of the Department of Defense. - Hassan Tetteh, Department of Defense Joint Artificial Intelligence Center

12. Anne Wojcicki

Anne Wojcicki, founder of 23andMe, has changed the game by putting health information in the hands of individuals instead of in folders in a doctor’s file cabinet. Now, with the pharmaceutical industry moving to personalized medicine, 23andMe is in a great position, holding a huge amount of data that it can leverage to create an individualized approach to healthcare. - Amy Czuchlewski, Bottle Rocket

13. Jack Welsh

As a former GE employee, I believe it is Jack Welsh. He leveraged data analytics for achieving business results with the Lean Six Sigma (LSS) initiatives. Also, LSS was the language in which an entire organization of over 300,000 employees very successfully communicated across the globe. - Prashanth Southekal, DBP Institute

14. Alex Karp

Alex Karp is a behind-the-scenes tech guru, and his work will become more influential to everyone in due time. His work at Palantir is something of a revolutionary approach in the tech community—not to mention his opinions on data transparency. He is a barbarian at the gate for this generation of data privacy. - Damian Ehrlicher, Protected IT

15. Tobi Lütke

The most influential tech leader of our era is Tobi Lütke, CEO and co-founder of Shopify. While Amazon seeks to build on its lead as the world’s marketplace, Shopify is empowering every other small, medium and large business to launch e-commerce stores. Tobi’s people-centric approach to leadership differentiates him from the Jeff Bezoses and Mark Zuckerbergs of this world. - Maddison Long, CloudOps

16. Leaders In The Sharing Economy

Great technology is defined by how it has changed the way we live in the world. I’m biased, but the growth of the sharing economy is what inspires me most about the possibility of technology. In this Covid-19 era, I know there’s some doubt around how this business model will evolve, but the underlying insight—that technology allows us to open our cars and our homes to each other—will persist. - Jody Kelman, Lyft

This article was published on Forbes.com

July 10, 2020

Implementing a Flutter CI/CD Pipeline in Jenkins: Part 1 (Introduction, Strategy, and Environment Setup)

In order to seriously consider a toolkit for development, be it cross-platform or single platform, it must be possible to implement a Continuous Integration/Continuous Deployment pipeline for that toolkit. Flutter is no exception to this, though Flutter’s suggested CI/CD walkthrough didn’t exactly fit Bottle Rocket’s needs. Flutter has a page on CI/CD that recommends using fastlane as a means to push builds to App stores.

Bottle Rocket’s needs are a bit more involved than just pushing builds to App stores. At minimum, at Bottle Rocket, we prefer to be able to have new pull requests automatically tested and made into test builds for QA. This generally requires a Jenkins server watching our git repositories. However, Flutter is a bit more complex than just a single platform in terms of integration with Jenkins. At minimum, it requires having the Flutter SDK installed on whatever machine or server is running Jenkins.

This complexity coupled with Flutter’s nascent nature, posed a bit of a challenge as there aren’t many articles or sources for setting up this proposed Jenkins environment. However, it is definitely possible to implement even with minimal(or no) Jenkins/Docker experience! Personally, I’d never set up a Jenkins environment before this foray into the world of CI/CD.

If your build environment is fresh/new and without build tools, you’ll need to install those as well. Additionally, I recommend that your build server will be a MacOS system, as iOS building requires MacOS. The rest of this article assumes all libraries, packages, and SDKs are installed correctly(this can be verified with the ‘flutter doctor command’. Below is a quick list of the things to install. I’ll also go into detail on each item below the list.


Installing Homebrew should be the first thing you do, as it’s used in a lot of other steps below. It’s as simple as pasting the below line into terminal and following the prompts.

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

XCode and Command Line Tools

If you’re only deploying to Android, you can skip XCode. However, as Flutter’s main strength is that it’s cross-platform, I don’t recommend this. Assuming you’re taking advantage of all Flutter has to offer, you’ll want to install XCode and the appropriate command line tools. This can be done through the Mac App Store.

Flutter SDK

The MacOS Flutter installation page details both installing a specific version of the Flutter SDK as well as using git to install the latest stable build. I recommend using the latest stable build personally, and the git cloning method is very simple (Assuming you’ve already installed git. If not, the steps for doing this on MacOS are detailed here. I’d recommend using the Homebrew method)! The other bit that the installation page glazes over is setting the ‘flutter’ global PATH. Luckily, another page on the official Flutter knowledgebase goes over this! I recommend reading it and following the steps outlined within.


In order for your project to generate an Android app, Java must be installed on your machine. OpenJDK is the best option for this. This can be installed with Homebrew with the below command

brew cask install adoptopenjdk8

Once Java is installed, JAVA_HOME must be set in the path. This can be done with an export command, likely similar to the one below. Your path may be different depending on which version you install and where it’s installed. The important bits are at the end, specifically ‘Contents/Home’.

export JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home

Android SDK

In order for Flutter to export Android APK’s, you must install the Android SDK. If you have access to the machine physically and can use a GUI, Android Studio a good option. However, I recommend using Homebrew once again, as it’s doable from the terminal.

brew cask install android-sdk

Once the SDK is installed, you should set ANDROID_HOME so Flutter knows where the SDK is. This path may change based on the version of the SDK you install. In my case, the ‘Home’ folder for the SDK was printed out in terminal on completion of the Homebrew installation. After setting the home directory, the next line tells Flutter where it is.

export ANDROID_HOME=/usr/local/Caskroom/android-sdk/4333796/

flutter config --android-sdk $ANDROID_HOME

In order to install the necessary build tools for Flutter(currently a minimum of API level 28), the below commands must be run. Without the build tools, APKs can’t be built.

sdkmanager platform-tools "build-tools;29.0.2"

sdkmanager platform-tools "platforms;android-29"

sdkmanager platform-tools "build-tools;28.0.3"

sdkmanager platform-tools "platforms;android-28"

sdkmanager platform-tools "extras;android;m2repository"


Many of the packages and libraries used in Flutter are accessed through Cocoapods. To install Cocoapods, it’s recommended to use Ruby. Ruby can once again be installed via Homebrew.

brew install ruby //Installs Ruby

sudo gem install cocoapods //Installs Cocoapods


To build and export iOS IPAs, this Jenkins pipeline will use Fastlane. Fastlane can be installed via the below Homebrew command.

brew install fastlane

With all these libraries and frameworks installed, we can move on to installing Jenkins, running a Jenkins instance on MacOS, and adding the necessary Jenkins plugins for our pipeline! This concludes Part 1 of this 4 part series on Implementing a Flutter CI/CD Pipeline in Jenkins. Part 2 covers Jenkins Instance Setup.

© 2020 Bottle Rocket. All Rights Reserved.