Multiarch Docker builds using Shippable

Recently I have been experimenting with different ways of building multi architecture Docker images.  As part of this process I wrote about Docker image manifests and the different ways you can package multi architecture builds into a single Docker image.  Packaging the images is only half the problem though.  You basically need to create the different Docker images for the different architectures first, before you are able to package them into manifests.

There are several ways to go about building the Docker images for various architectures.  In the remainder of this post I will be showing how you can build Docker images natively against arm64 only as well as amd64/arm64 simultaneously using some slick features provided by the folks at Shippable.  Having the ability to automate multi architecture builds with CI is really powerful because it avoids having to use other tools or tricks which can complicate the process.

Shippable recently announced integrated support for arm64 builds.  The steps for creating these cross platform builds is fairly straight forward and is documented on their website.  The only downside to using this method is that currently you must explicitly contact Shippable and requests access to use the arm64 pool of nodes for running jobs, but after that multi arch builds should be available.

For reference, here is the full shippable.yml file I used to test out the various types of builds and their options.

Arm64 only builds

After enabling the shippable_shared_aarch64 node pool (from the instruction above) you should have access to arm64 builds, just add the following block to your shippable.yml file.

runtime:
  nodePool: shippable_shared_aarch64

The only other change that needs to be made is to point the shippable.yaml file at the newly added node pool and you should be ready to build on arm64.  You can use the default “managed” build type in Shippable to create builds.

Below I have a very simple example shippable.yml file for building a Dockerfile and pushing its image to my Dockerhub account.  The shippable.yml file for this build lives in the GitHub repo I configured Shippable to track.

language: none

runtime:
  nodePool:
    - shippable_shared_aarch64
    - default_node_pool

build:

  ci:
    - sed -i 's|registry.fedoraproject.org/||' Dockerfile.fedora-28
    - docker build -t local/freeipa-server -f Dockerfile.fedora-28 .
    - tests/run-master-and-replica.sh local/freeipa-server

  post_ci:
    - docker tag local/freeipa-server jmreicha/freeipa-server:test
    - docker push jmreicha/freeipa-server:test

integrations:
  hub:
    - integrationName: dockerhub
      type: dockerRegistryLogin

Once you have a shippable.yml file in a repo that you would like to track and also have things set up on the Shippable side, then every time a commit/merge happens on the master branch (or whatever branch you set up Shippable to track) an arm64 Docker image gets built and pushed to the Dockerhub.

Docs for settings up this CI style job can be found here.  There are many other configuration settings available to tune so I would encourage you to read the docs and also play around with the various options.

Parallel arm64 and amd64 builds

The approach for doing the simultaneous parallel builds is a little bit different and adds a little bit more complexity, but I think is worth it for the ability to automate cross platform builds.  There are a few things to note about the below configuration.  You can use templates in either style job.  Also, notice the use of the shipctl command.  This tool basically allows you to mimic some of the other functionality that exists in the default runCI jobs, including the ability to login to Docker registries via shell commands and manage other tricky parts of the build pipeline, like moving into the correct directory to build from.

Most of the rest of the config is pretty straight forward.  The top level jobs directive lets you create multiple different jobs, which in turn allows you to set the runtime to use different node pools, which is how we build against amd64 and arm64.  Jobs also allow for setting different environment variables among other things.  The full docs for jobs shows all of the various capabilities of these jobs.

templates: &build-test-push
  - export HUB_USERNAME=$(shipctl get_integration_field "dockerhub" "username")
  - export HUB_PASSWORD=$(shipctl get_integration_field "dockerhub" "password")
  - docker login --username $HUB_USERNAME --password $HUB_PASSWORD
  - cd $(shipctl get_resource_state "freeipa-container-gitRepo")
  - sed -i 's|registry.fedoraproject.org/||' Dockerfile.fedora-27
  - sed -i 's/^# debug:\s*//' Dockerfile.fedora-27
  - docker build -t local/freeipa-server -f Dockerfile.fedora-27 .
  - tests/run-master-and-replica.sh local/freeipa-server
  - docker tag local/freeipa-server jmreicha/freeipa-server:$arch
  - docker push jmreicha/freeipa-server:$arch

resources:
    - name: freeipa-container-gitRepo
      type: gitRepo
      integration: freeipa-container-gitRepo
      versionTemplate:
          sourceName: jmreicha/freeipa-container
          branch: master

jobs:
  - name: build_amd64
    type: runSh
    runtime:
      nodePool: default_node_pool
      container: true
    integrations:
      - dockerhub
    steps:
      - IN: freeipa-container-gitRepo
      - TASK:
          runtime:
            options:
              env:
                - privileged: --privileged
                # Also look at using SHIPPABLE_NODE_ARCHITECTURE env var
                - arch: amd64
          script:
            - *build-test-push

  - name: build_arm64
    type: runSh
    runtime:
      nodePool: shippable_shared_aarch64
      container: true
    integrations:
      - dockerhub
    steps:
      - IN: freeipa-container-gitRepo
      - TASK:
          runtime:
            options:
              env:
                - privileged: --privileged
                - arch: arm64
          script:
            - *build-test-push

As you can see, there is a lot more manual configuration going on here than the first job.

I decided to use the top level templates directive to basically DRY the configuration so that it can be reused.  I am also setting environment variables per job to ensure the correct architecture gets built and pushed for the various platforms.  Otherwise the configuration is mostly straight forward.  The confusion with these types of jobs if you haven’t set them up before mostly comes from figuring out where things get configured in the Shippable UI.

Conclusion

I must admit, Shippable is really easy to get started with, has good support and has good documentation.  I am definitely a fan and will recommend and use their products whenever I get a chance.  If you are familiar with Travis then using Shippable is easy.  Shippable even supports the use of Travis compatible environment variables, which makes porting over Travis configs really easy.  I hope to see more platforms and architectures supported in the future but for now arm64 is a great start.

There are some downside to using the parallel builds for multi architecture builds.  Namely there is more overhead in setting up the job initially.  With the runSh (and other unmanaged jobs) you don’t really have access to some of the top level yml declarations that come with managed jobs, so you will need to spend more time figuring out how to wire up the logic manually using shell commands and the shipctl tool as depicted in my above example.  This ends up being more flexible in the long run but also harder to understand and get working to begin with.

Another downside of the assembly line style jobs like runSh is that they currently can’t leverage all the features that the runCI job can, including the matrix generation (though there is a feature request to add it in the future) and report parsing.

The last downside when setting up unmanaged jobs is trying to figure out how to wire up the different components on the Shippable side of things.  For example you don’t just create a runCI job like the first example.  You have to first create an integration with the repo that you are configuring so that shippable can make an rSync and serveral runSh jobs to connect with the repo and be able to work correctly.

Overall though, I love both of the runSh and runCI jobs.  Both types of jobs lend themselves to being flexible and composable and are very easy to work with.  I’d also like to mention that the support has been excellent, which is a big deal to me.  The support team was super responsive and helpful trying to sort out my issues.  They even opened some PRs on my test repo to fix some issues.  And as far as I know, there are no other CI systems currently offering native arm64 builds which I believe will become more important as the arm architecture continues to gain momentum.

Read More

The Ultimate Guide to Winning Big with the Jackpot City App and Casino Bonuses

Welcome to the world of Jackpot City, where the thrill of winning is just a tap away. Whether you’re a seasoned player or new to the online casino scene, the Jackpot City app offers an unbeatable experience with its wide range of games and enticing bonuses.

Jackpot City Casino Logo

Amazing Bonuses at Jackpot City Casino

As a new player, you can take advantage of the Jackpot City bonus offers, which include generous match bonuses on your first few deposits. These bonuses increase your playing power, providing more opportunities to experience the excitement of the casino.

Explore Jackpot City Online Casino

With a vast array of games, Jackpot City online casino ensures that there’s something for every type of player. From classic table games like blackjack and roulette to the latest slots, the selection is endless. And for continuous rewards, don’t forget to log in regularly using the Jackpot City login to claim your daily bonuses and free spins.

Spin the Reels with Jackpot City Slots

If you’re a slots enthusiast, you won’t want to miss the thrilling experience offered by Jackpot City slots. With themes ranging from ancient Egypt to futuristic adventures, each slot offers unique features and massive jackpots.

Get Started with Jackpot City Free Spins

Don’t miss out on your chance to enjoy Jackpot City free spins which can give you additional opportunities to win without spending extra. These promotions are perfect for trying out new games and discovering which ones bring you the most luck.

Conclusion

With the Jackpot City app, every day can be a lucky day. Take advantage of the incredible bonuses, explore diverse games, and experience the thrill of winning from the comfort of your home. So why wait? Download the app, try your luck, and see what treasures await you at Jackpot City.

For more insights into the excitement of playing online, watch our exclusive video:

Read More

Erleben Sie das Beste: NV Casino, NV Casino Bonus und Einfache NV Casino Online Login Schritte

Willkommen im aufregenden Universum der Online-Glücksspiele! Im NV Casino erwartet Sie nicht nur Spaß und Spannung, sondern auch eine Vielzahl von Bonusangeboten und bequemen Log-In-Möglichkeiten. Entdecken Sie, wie das NV Casino Ihr ultimatives Ziel für Online-Glücksspiele sein kann.

Einführung in das NV Casino

Das NV Casino ist bekannt dafür, seinen Nutzern ein unvergleichliches Online-Spielerlebnis zu bieten. Mit einer großen Auswahl an Spielen, die von klassischen Kartenspielen bis hin zu modernen Spielautomaten reichen, ist etwas für jeden Geschmack dabei. Dank der benutzerfreundlichen Plattform und der schnell ladenden Spiele können Sie sich sofort ins Abenteuer stürzen.

Attraktive NV Casino Bonusangebote

Für Spieler, die das Beste aus ihrem Einsatz herausholen möchten, bietet das NV Casino attraktive Boni. Der NV casino bonus ist besonders beliebt und bietet Ihnen extra Spielguthaben oder Freispiele. Diese Angebote sind eine großartige Möglichkeit, Ihre Gewinne zu maximieren und das Beste aus Ihrem Spielerlebnis herauszuholen.

NV Casino Online Login leicht gemacht

Der Zugangsprozess im NV Casino ist denkbar einfach und effizient. Eine intuitive Benutzeroberfläche sorgt dafür, dass Sie innerhalb weniger Minuten mit dem Spielen beginnen können. Alles, was Sie tun müssen, ist, Ihre Anmeldedaten einzugeben, und schon kann der Spaß beginnen!

NV Casino

Interaktive Inhalte für Ihre Unterhaltung

Erfahren Sie mehr über die spannenden Möglichkeiten im NV Casino durch unser Video:

Abschließend ist das NV Casino die perfekte Wahl für jeden, der auf der Suche nach einem aufregenden und lohnenden Online-Glücksspielerlebnis ist. Mit den eindrucksvollen Boni, einer benutzerfreundlichen Oberfläche und einer Vielzahl an Spielen wird jeder Besuch zu einem puren Vergnügen.

Read More

Unlocking Exciting Offers with SpinBet: Your Guide to SpinBet App, SpinBet Casino, and SpinBet Promo Code

Are you on the lookout for an electrifying online casino experience? Look no further than the dynamic world of SpinBet. With its user-friendly SpinBet app, a plethora of gaming options at SpinBet casino, and enticing SpinBet promo code offers, gamers around the globe are diving into a sea of adventure and rewards.

Experience Gaming Like Never Before

SpinBet is renowned for its vast array of gaming options that cater to both novices and seasoned players. The intuitive design of the SpinBet app ensures that your gambling adventure is seamless and enjoyable. Whether you’re a fan of table games, slots, or live dealer experiences, there’s something for everyone.

SpinBet Casino Slots

Why Choose SpinBet?

  • Variety of Games: From classic slots to modern video games, SpinBet houses an extensive gaming library.
  • Safety and Security: SpinBet employs state-of-the-art security measures to protect your data and transactions.
  • Lucrative Promotions: Regular bonuses keep players coming back for more rewards with the SpinBet promo code.

Getting Started with the SpinBet App

Embarking on your SpinBet journey is straightforward. Download the SpinBet app, available for both Android and iOS devices, to start playing. The app provides easy navigation and a user-friendly interface for a superior gambling experience. Once installed, create your account, take advantage of any SpinBet promo code available, and you’re ready to spin to win!

Responsible Gaming

SpinBet is committed to promoting responsible gaming. The app includes features that allow players to set limits on their spending and gaming time, ensuring that the fun remains within control. Player well-being is always the top priority at SpinBet.

Join the SpinBet Community Today

Are you ready to dive into a world of fun and fortune with SpinBet? Whether you’re looking to unwind after a long day or pursue a winning streak, SpinBet provides the ultimate platform. Join the community today and discover all that SpinBet has to offer.

Discover More with Our Latest Video

Read More

Explore Betti Casino: Betti Casino Login, Free Spins, and the Betti Casino App

Welcome to the exciting world of online gaming with Betti Casino! In this comprehensive guide, we will delve into everything you need to know about Betti Casino, including how to access the Betti Casino login, enjoy Betti Casino free spins, and make the most of the Betti Casino app. Whether you’re a seasoned player or new to online gaming, Betti Casino offers something for everyone.

Getting Started with Betti Online Casino

Betti Casino, a leading online gaming platform, has quickly gained popularity among avid gamers. With a wide range of games and thrilling promotions, it’s no wonder players are flocking to Betti Online Casino. To get started, players must first create an account, which opens the door to endless entertainment and the chance to win big.

The Betti Casino Login Process

Accessing your Betti Casino account is straightforward. Simply visit the homepage, click on the Betti Casino login button, and enter your credentials. If you’re new, signing up is quick and easy, providing immediate access to all the games and promotions Betti Casino has to offer.

Betti Casino Interface

Exciting Offers: Betti Casino Free Spins

One of the standout features of Betti Online Casino is the availability of Betti Casino free spins. These promotions allow players to try their luck without spending a dime. Regularly check the promotions page for the latest free spins offers, and remember, these are often linked to new game releases or special events.

The Betti Casino App: Gaming on the Go

The Betti Casino app brings the thrill of gaming right to your fingertips. Compatible with both Android and iOS devices, the app provides a seamless experience, allowing you to play your favorite games wherever and whenever. With intuitive navigation and lightning-fast loading times, it’s no surprise the Betti Casino app is a hit among players.

Why Choose Betti Online Casino?

  • Variety of Games: From slots to table games, Betti Casino has it all.
  • Secure Transactions: Peace of mind with state-of-the-art encryption.
  • 24/7 Customer Support: Friendly support staff ready to assist at any time.
  • Promotions: Regular offers to maximize your gaming experience.

For more exciting gaming action and to join the community of winners, visit Betti Casino UK today!

Join the Betti Casino Community

Engage with other players through community forums and live chat features. Betti Casino not only offers exceptional games but also fosters a community spirit, encouraging players to share tips, strategies, and successes. Participate in daily challenges and leaderboard competitions for added fun.

In conclusion, Betti Casino stands out as a premier online gaming destination. With its user-friendly interface, generous promotions, and the flexibility of playing on your computer or phone, it’s the perfect choice for both casual and serious gamers. Don’t miss out on the excitement – log in and start playing at Betti Casino today!

Read More