Android Image Deprecations and EOL for 2024

Hello :wave:

We are deprecating the following Android images on CircleCI and will be removing them from our platform on Sept 30, 2024:

Tags:

  • android:202102-01
  • android:2021.12.1
  • android:2022.01.1
  • android:2022.03.1
  • android:2022.04.1
  • android:2022.06.1
  • android:2022.06.2
  • android:2022.07.1
  • android:2022.08.1
  • android:2022.09.1
  • android:2023.03.1
  • android:2023.04.1
  • android:2023.06.1
  • android:2023.07.1
  • android:2023.09.1
  • android:2023.11.1

Once an image is removed, the CircleCI jobs that use that image will fail with an error message - This job was rejected because the image is unavailable .

CircleCI will email impacted users with a list of projects that must be updated before the EOL date.

Why are these images being deprecated?

To ensure pipelines on CircleCI run with the highest level of reliability & security.

What do I need to do if my build shows a “deprecated image” banner?

The changes you will need to make depend on how you are specifying your image choice.

Changes necessary if you are not using the Android orb

You will need to update your CircleCI config to use a valid Android image as per the tagging conventions in our Android Image Policy.

The recommended tags to use are as follows:

  • default - latest stable version and version if do not specify anything
  • edge - Development image of latest image

A couple examples:

Before:

 machine:
      image: android:202102-01 // any of the deprecated image tags above

After:

 machine:
      image: android:default
 machine:
      image: android:edge

Changes necessary if you are using the Android orb

Users of the Android Orb version 2.0.0 or later you will only see a deprecated image they have explicitly specified the tag of such an image in your build (users of Android orbs prior to version 2.0.0 are encouraged to upgrade).

You will need to update your CircleCI config to either use the default Android image (by removing the explicit tag: in the config) or changing the config (by altering the tag: value) to use a valid Android image as per the tagging conventions in our Android Image Policy.

An example:

Before:

version: '2.1'
orbs:
  android: circleci/android@2.5.0
jobs:
  test:
    executor:
      name: android/android-machine
      tag: 202102-01
    steps:
       ...

After:

version: '2.1'
orbs:
  android: circleci/android@2.5.0
jobs:
  test:
    executor:
      name: android/android-machine
    steps:
       ...

What will happen after the Sept 30 EOL Date?

If you do not currently specify an image, your job will keep the same behavior, and use the default tag automatically.

Calling any of the deprecated image tag versions directly will cause your job to fail.

Brownout Schedule and EOL

We will be conducting brownouts for the above images on the following dates and times.

  • 25 March 2024
    • 07:00 UTC → 11:00 UTC
    • 13:00 UTC → 17:00 UTC
    • 20:00 UTC → 00:00 UTC
  • 25 June 2024
    • 01:00 UTC → 11:00 UTC
    • 13:00 UTC → 23:00 UTC
  • 18 September 2024
    • 00:00 UTC → 00:00 UTC (24 Hour)
  • 30 September 2024
    • Deprecated tags are removed and will be unavailable

During these times, all jobs calling these images will fail. Please update your configs as soon as possible to prevent any disruption to your pipelines.

The default tag is available for you to transition to as of writing and we highly recommend updating your config to avoid job failure during these brownouts. If you have already updated your tags, please disregard this email.

What’s Next?

Details on how we manage and maintain our Android images can be found here: Android Image Policy.

Feedback

If you have any questions, comments, or concerns, please post a reply in this thread and we will be happy to help!

Respectfully,
CircleCI Images Team

Are android machines affected?

I tried to remove the tag here but got this error:

    executor:
      name: android/android-machine
      resource-class: 2xlarge

Error calling executor: 'android/android-machine' Missing required argument(s): tag

The naming standard is documented here

cimg/android - CircleCI

Just to clarify, that document talks about cimg/android. My question is if android/android-machine is also affected by the deprecations.

Thank you!

My mistake.

Can you post more of your config file as android/android-machine works with the android orb and so context and arguments come from the orb setup.

Config file:

version: 2.1
orbs:
  android: circleci/android@2.4.0

jobs:
  build_dev_app:
    executor:
      name: android/android-machine
      resource-class: 2xlarge
      tag: 2022.09.1

Should we remove the tag argument?

OK, this is where we go down a rabbit hole.

I guess you are working from examples found on the ORB page here

Now what the docs on this page do not make clear at all is that “android/android-machine” is just a placeholder. The image name loaded is

image: android:<< parameters.tag >>

Where tag is a valid value from the list on the page I linked to. So “android/android-machine” which is just “android” shares the same tag list as “cimg/android” images.

I can run the following workflow without errors, I had to use a smaller resource class as I’m on the free plan and did get a warning about the image being deprecated.

version: 2.1
orbs:
  android: circleci/android@2.4.0

jobs:
  build_dev_app:
    executor:
      name: android/android-machine
      resource-class: large
      tag: 2022.09.1
    steps:
      - checkout            

workflows:
  build-and-test:
    jobs:
      - build_dev_app

The real problem is that the original post was made without considering the use of the ORB. So to use the ORB you set tag: to default or edge as in the following example

version: 2.1
orbs:
  android: circleci/android@2.4.0

jobs:
  build_dev_app:
    executor:
      name: android/android-machine
      resource-class: large
      tag: default
    steps:
      - checkout            

workflows:
  build-and-test:
    jobs:
      - build_dev_app
1 Like

Changing the tag to default or a newer (supported image tag), should allow you to still use the orb.

The issue is that the original post did not cover the configuration needed for the ORB and as the way that an executor is defined for the ORB is different to the way it is defined for a non ORB configuration it left things a little unclear.

I see, thank you for pointing this out.

Hello, we were having issues migrating to the default tag because “rvm” breaks on the step “Install Ruby v$(cat ./.ruby-version) via RVM”:

#!/bin/bash -eo pipefail
#!/usr/bin/env bash

PARAM_RUBY_VERSION=$(eval echo "${PARAM_VERSION}")

if ! openssl version | grep -q -E '1\.[0-9]+\.[0-9]+' 
then 
    echo "Did not find supported openssl version. Installing Openssl rvm package."
    rvm pkg install openssl
    WITH_OPENSSL="--with-openssl-dir=$HOME/.rvm/usr"
fi

rvm install "$PARAM_RUBY_VERSION" "$WITH_OPENSSL"
rvm use "$PARAM_RUBY_VERSION"

RUBY_PATH="$(rvm $PARAM_RUBY_VERSION 1> /dev/null 2> /dev/null && rvm env --path)"
printf '%s\n' "source $RUBY_PATH" >> "$BASH_ENV"

Exited with code exit status 127

This is using the latest circleci/ruby orb “install” command.

Switching to rbenv seems to work:

  cmd-bundle-install-android:
    description: Bundle install
    steps:
      - restore_cache:
          name: Restore Ruby cache
          keys:
            - android-ruby-{{ .Environment.CACHE_VERSION }}-{{ checksum "./.ruby-version" }}
      - run:
          name: Install Ruby version
          command: |
            rbenv install --skip-existing $(cat ./.ruby-version)
            rbenv global $(cat ./.ruby-version)
            rbenv rehash
      - save_cache:
          name: Save Ruby cache
          paths:
            - ~/.rbenv/versions
          key: android-ruby-{{ .Environment.CACHE_VERSION }}-{{ checksum "./.ruby-version" }}
      - ruby/install-deps:
          key: android-gems-cache-{{ .Environment.CACHE_VERSION }}

The default android image no longer has rvm installed as part of the image itself. The ruby orb should install rvm when needed, though it seems that you’re having issues with this failing.

We’re going to investigate this at our end and try to replicate and address this issue.

If this is a blocker, please be aware that the 2023.10.1 tag is not deprecated and provides rvm as part of the image. I would suggest that the simplest solution for users running into problems related to rvm installation might be to use this tag instead of default.

Jesper: Would it be possible for you to provide a job URL and a copy of your .circleci/config.yml? You can reach out to support and mention my name and the URL of this discuss post if you want to provide any information to me privately outside of discuss.

I have submitted a ticket with the requested information now, reference ID is 147715