<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>azure devops &#8211; Sibeesh Passion</title>
	<atom:link href="https://mail.sibeeshpassion.com/category/azure/azure-devops/feed/" rel="self" type="application/rss+xml" />
	<link>https://mail.sibeeshpassion.com</link>
	<description>My passion towards life</description>
	<lastBuildDate>Wed, 25 Jun 2025 18:07:04 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>/wp-content/uploads/2017/04/Sibeesh_Passion_Logo_Small.png</url>
	<title>azure devops &#8211; Sibeesh Passion</title>
	<link>https://mail.sibeeshpassion.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>React Native Android Release with Azure DevOps and Google Play Store</title>
		<link>https://mail.sibeeshpassion.com/react-native-android-release-with-azure-devops-and-google-play-store-2/</link>
					<comments>https://mail.sibeeshpassion.com/react-native-android-release-with-azure-devops-and-google-play-store-2/#disqus_thread</comments>
		
		<dc:creator><![CDATA[SibeeshVenu]]></dc:creator>
		<pubDate>Wed, 25 Jun 2025 18:06:57 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[azure devops]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[react native android azure devops pipeline yaml]]></category>
		<category><![CDATA[react native android custom app version pipeline]]></category>
		<category><![CDATA[react native android google play store release]]></category>
		<category><![CDATA[react native android release]]></category>
		<category><![CDATA[react native android signing]]></category>
		<category><![CDATA[react native azure devops]]></category>
		<guid isPermaLink="false">https://sibeeshpassion.com/?p=14718</guid>

					<description><![CDATA[In this post, we will see how we can release a React native Android application to Google play store with custom app signing, custom app version configured from Azure DevOps pipeline build number]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">Introduction</h1>



<p>We can use React native, an open source mobile application framework by Facebook, to develop application for Android, IOS, UWP, and Web. In this post, we will see how we can release a React native Android application to Google play store with custom app signing, custom app version configured from Azure DevOps pipeline build number. Sounds interesting, right?</p>



<h1 class="wp-block-heading">Prerequisites </h1>



<ol class="wp-block-list">
<li>Make sure you have a React native application. You can follow <a href="https://learn.microsoft.com/en-us/windows/dev-environment/javascript/react-native-for-android">this doc</a> to create a dummy application.</li>



<li><a href="https://azure.microsoft.com/en-us/products/devops">Azure DevOps</a> </li>
</ol>



<h1 class="wp-block-heading">Create a dummy android pipeline</h1>



<p>Go to Pipelines in Azure DevOps and click on New pipeline, select Azure Devops, select your repository. In the Configure your pipeline section, select Android. </p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/06/image-1.png"><img fetchpriority="high" decoding="async" width="1024" height="320" src="/wp-content/uploads/2025/06/image-1-1024x320.png" alt="" class="wp-image-14727" srcset="/wp-content/uploads/2025/06/image-1-1024x320.png 1024w, /wp-content/uploads/2025/06/image-1-300x94.png 300w, /wp-content/uploads/2025/06/image-1-768x240.png 768w, /wp-content/uploads/2025/06/image-1-1536x480.png 1536w, /wp-content/uploads/2025/06/image-1-2048x641.png 2048w, /wp-content/uploads/2025/06/image-1-400x125.png 400w, /wp-content/uploads/2025/06/image-1-1918x600.png 1918w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>Rename your YAML file and click save. You don&#8217;t have to run your pipeline yet.</p>



<h1 class="wp-block-heading">Application Configuration</h1>



<p>Before we create the pipeline, let&#8217;s do some configuration in our application. </p>



<h2 class="wp-block-heading">Update the Gradle file</h2>



<p>A gradle file helps us to,</p>



<ul class="wp-block-list">
<li>Add libraries and dependencies</li>



<li>Define how to build different environments (debug vs. release)</li>



<li>Sign Android APKs/AABs</li>



<li>Automate tasks (e.g., tests, publishing, versioning)</li>
</ul>



<h3 class="wp-block-heading">Configure the app versioning</h3>



<p>By default, the app gets the verson that is mentioned in the <strong>app.json</strong> file in the root folder. Just like all the other deployments, it is a great idea to have our app version name and app version code configured to the build number and build id from the pipeline. To do that let&#8217;s do the changes below in the <strong>android\build.gradle</strong> file. Remember there is also another build.gradle file in android/app folder. Under the buildscript section, add the below methods. </p>



<pre class="wp-block-code"><code>def getMyVersionCode = { -&gt;
        def code = project.hasProperty('versionCode') ? versionCode.toInteger() : -1
        println "VersionCode is set to $code"
        return code
    }

    def getMyVersionName = { -&gt;
        def name = project.hasProperty('versionName') ? versionName : "1.0"
        println "VersionName is set to $name"
        return name
    }</code></pre>



<p>Update the ext section as below.</p>



<pre class="wp-block-code"><code>ext {
        buildToolsVersion = "35.0.0"
        minSdkVersion = 24
        compileSdkVersion = 35
        targetSdkVersion = 34
        ndkVersion = "26.1.10909125"
        kotlinVersion = "1.9.24"
        versionName = getMyVersionName()
        versionCode = getMyVersionCode()
    }</code></pre>



<p>Below is the full <strong>android/build.gradle</strong> file content.</p>



<pre class="wp-block-code"><code>buildscript {
    def getMyVersionCode = { -&gt;
        def code = project.hasProperty('versionCode') ? versionCode.toInteger() : -1
        println "VersionCode is set to $code"
        return code
    }

    def getMyVersionName = { -&gt;
        def name = project.hasProperty('versionName') ? versionName : "1.0"
        println "VersionName is set to $name"
        return name
    }
    ext {
        buildToolsVersion = "35.0.0"
        minSdkVersion = 24
        compileSdkVersion = 35
        targetSdkVersion = 34
        ndkVersion = "26.1.10909125"
        kotlinVersion = "1.9.24"
        versionName = getMyVersionName()
        versionCode = getMyVersionCode()
    }
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath("com.android.tools.build:gradle")
        classpath("com.facebook.react:react-native-gradle-plugin")
        classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
    }
}

apply plugin: "com.facebook.react.rootproject"</code></pre>



<p>Now go to the <strong>android\app\build.gradle</strong> file and use the new configs there. Under the android section, go to the defaultConfig and add the content below.</p>



<pre class="wp-block-code"><code>versionCode rootProject.ext.versionCode
versionName rootProject.ext.versionName</code></pre>



<p>Your final defaultConfig would looks like below.</p>



<pre class="wp-block-code"><code>defaultConfig {
        applicationId "com.yourapplicationid"
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.versionCode
        versionName rootProject.ext.versionName

        manifestPlaceholders = &#91;
            appAuthRedirectScheme: "com.yourapplicationid"
        ]
    }</code></pre>



<h3 class="wp-block-heading">Create and upload keystore to the Secure files</h3>



<p>By default the app uses debug configuration to sign, you can see this setting <strong>signingConfigs.debug</strong> in the section buildTypes for release. You can also see that in the both cases it uses the same <strong>debug.keystore</strong> file to sign, which is not recommended for the production releases. Let&#8217;s create a new keystore file for our releases first. Run the command below. To run the keytool command, make sure to insall the <a href="https://www.oracle.com/java/technologies/downloads/?er=221886">Java development kit (JDK)</a>. Also make sure to reference the appropriate JDK version in the command.</p>



<pre class="wp-block-code"><code>C:\"Program Files"\Java\jdk-24\bin\keytool -genkeypair -v -keystore yourkey-key.keystore -alias your-alias -keyalg RSA -keysize 2048 -validity 200000</code></pre>



<p>Make sure to give <strong>large number as validity</strong> in the command as stated <a href="https://developer.android.com/studio/publish/app-signing">in this post</a>. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p><strong>Validity (years):</strong> Set the length of time in years that your key will be valid. Your key should be valid for at least 25 years, so you can sign app updates with the same key through the lifespan of your app.</p>
</blockquote>



<p> As we have created the keystore file, let&#8217;s save them in a secured place, and good news is that the <a href="https://learn.microsoft.com/en-us/azure/devops/pipelines/library/secure-files?view=azure-devops">Azure DevOps already has a place for this</a>. </p>



<p>From Azure DevOps, go the Library under Pipelines, and click on the +Secure file option under under Secure files. </p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/06/image.png"><img decoding="async" width="1024" height="387" src="/wp-content/uploads/2025/06/image-1024x387.png" alt="" class="wp-image-14725" srcset="/wp-content/uploads/2025/06/image-1024x387.png 1024w, /wp-content/uploads/2025/06/image-300x113.png 300w, /wp-content/uploads/2025/06/image-768x290.png 768w, /wp-content/uploads/2025/06/image-1536x580.png 1536w, /wp-content/uploads/2025/06/image-2048x774.png 2048w, /wp-content/uploads/2025/06/image-400x151.png 400w, /wp-content/uploads/2025/06/image-1589x600.png 1589w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>After the secure file is uploaded, it is important to allow permission for our pipeline to use it. Go to the secure file, and click on the Pipeline permissions and then click on the Add pipeline plus icon and select your pipeline. </p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/06/image-3.png"><img decoding="async" width="1024" height="373" src="/wp-content/uploads/2025/06/image-3-1024x373.png" alt="" class="wp-image-14729" srcset="/wp-content/uploads/2025/06/image-3-1024x373.png 1024w, /wp-content/uploads/2025/06/image-3-300x109.png 300w, /wp-content/uploads/2025/06/image-3-768x280.png 768w, /wp-content/uploads/2025/06/image-3-1536x560.png 1536w, /wp-content/uploads/2025/06/image-3-2048x746.png 2048w, /wp-content/uploads/2025/06/image-3-400x146.png 400w, /wp-content/uploads/2025/06/image-3-1647x600.png 1647w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">Configure the keystore password as pipeline variables</h3>



<p>Now it is time to create a variable group in Azure DevOps and add the secured variables. Here keyAlias and keystorePassword is the details you had provided when you were creating the keystore. </p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/06/image-4.png"><img decoding="async" width="1024" height="717" src="/wp-content/uploads/2025/06/image-4-1024x717.png" alt="" class="wp-image-14730" srcset="/wp-content/uploads/2025/06/image-4-1024x717.png 1024w, /wp-content/uploads/2025/06/image-4-300x210.png 300w, /wp-content/uploads/2025/06/image-4-768x538.png 768w, /wp-content/uploads/2025/06/image-4-1536x1076.png 1536w, /wp-content/uploads/2025/06/image-4-2048x1435.png 2048w, /wp-content/uploads/2025/06/image-4-400x280.png 400w, /wp-content/uploads/2025/06/image-4-856x600.png 856w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h3 class="wp-block-heading">Update the Signing config for release</h3>



<p>Let&#8217;s create a release configuration under <strong>signingConfigs</strong> like below.</p>



<pre class="wp-block-code"><code>release {
            if (project.hasProperty("KEYSTORE_PATH")) {
                storeFile file(KEYSTORE_PATH)
                storePassword KEYSTORE_PASSWORD
                keyAlias KEY_ALIAS
                keyPassword KEY_PASSWORD
            }
        }</code></pre>



<p>From the above code, the variables KEY_PASSWORD, KEY_ALIAS, KEYSTORE_PASSWORD, KEYSTORE_PATH will be set from the pipeline itself. This is to sign the files using our secure file from Azure DevOps.</p>



<p>As there is a separate signingConfig for release, let&#8217;s configure that. Update the release section under the buildTypes. </p>



<pre class="wp-block-code"><code>release {
            // Caution! In production, you need to generate your own keystore file.
            // see https://reactnative.dev/docs/signed-apk-android.
            signingConfig signingConfigs.release
            minifyEnabled enableProguardInReleaseBuilds
            // Enables resource shrinking.
            shrinkResources true
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }</code></pre>



<p>Make sure to set the minifyEnabled and shrinkResources to true as this will reduce the overall size of your app bundle and time to install the app. You can read more on the app optimization <a href="https://developer.android.com/topic/performance/app-optimization/enable-app-optimization">here</a>.</p>



<h3 class="wp-block-heading">Optional: Increase the memory during the build</h3>



<p>You may get the error below when you run your pipeline. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Execution failed for task &#8216;:app:collectReleaseDependencies&#8217;. &gt; Java heap space</p>
</blockquote>



<p>To fix this, go to your gradle.properties and update the settings below.</p>



<pre class="wp-block-code"><code># Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m
org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=512m</code></pre>



<h2 class="wp-block-heading">Azure DevOps YAML </h2>



<p>As we have done the configurations, let&#8217;s start updating the YAML file by setting a name first.</p>



<pre class="wp-block-code"><code>name: $(date:yyyy).$(Month)$(rev:.r) </code></pre>



<p>Below is the full YAML file.</p>



<pre class="wp-block-code"><code># Android
# Build your Android project with Gradle.
# Add steps that test, sign, and distribute the APK, save build artifacts, and more:
# https://docs.microsoft.com/azure/devops/pipelines/languages/android
# https://learn.microsoft.com/en-us/azure/devops/pipelines/ecosystems/android
name: $(date:yyyy).$(Month)$(rev:.r)
trigger:
  - main
  - development

pool:
  vmImage: "macos-latest"

variables:
  - group: GooglePlayStore
  - name: KEYSTORE_FILE_NAME
    value: 'yourapp-gplaystore-key.keystore'

steps:
  - checkout: self
  - task: UseNode@1
    inputs:
      version: "22.x"
    displayName: "Use Node.js 22.x"
  - script: |
      ls -la $(Build.SourcesDirectory)
      ls -la $(Build.SourcesDirectory)/android
    displayName: "List Android Directory"
  - script: |
      npm install
    displayName: "npm install"
  - task: DownloadSecureFile@1
    name: keyStore
    displayName: "Download keystore from secure files"
    inputs:
      secureFile: $(KEYSTORE_FILE_NAME)
  - script: echo $(keyStore.secureFilePath)
    displayName: "Echo Keystore Path"
  - script: |
      ls -la $(Build.SourcesDirectory)/android
      ls -la $(Build.SourcesDirectory)/android/app
    displayName: "List Files"
  - task: Gradle@3
    displayName: "Gradle Build"
    inputs:
      workingDirectory: "$(Build.SourcesDirectory)/android"
      gradleWrapperFile: "android/gradlew"
      gradleOptions: "-Xmx3072m"
      publishJUnitResults: false
      testResultsFiles: "**/TEST-*.xml"
      tasks: "assembleRelease bundleRelease"
      options: "-PversionName=$(Build.BuildNumber) -PversionCode=$(Build.BuildId) -PKEYSTORE_PATH=$(keyStore.secureFilePath) -PKEYSTORE_PASSWORD=$(keystorePassword) -PKEY_ALIAS=$(keyAlias) -PKEY_PASSWORD=$(keyPassword)"
  - task: AndroidSigning@3
    inputs:
      apkFiles: "**/*.apk"
      apksignerKeystoreFile: "$(KEYSTORE_FILE_NAME)"
      apksignerKeystorePassword: "$(keystorePassword)"
      apksignerKeystoreAlias: "$(keyAlias)"
      apksignerKeyPassword: "$(keyPassword)"
      zipalign: false
  - task: CopyFiles@2
    displayName: "Copy APK Files"
    inputs:
      contents: "**/*.apk"
      targetFolder: "$(Build.ArtifactStagingDirectory)"
  - task: CopyFiles@2
    displayName: "Copy AAB App Bundle"
    inputs:
      sourceFolder: "android/app/build/outputs/bundle/release"
      contents: "**/*.aab"
      targetFolder: "$(Build.ArtifactStagingDirectory)/android/app/build/outputs/bundle/release"
  - task: PublishBuildArtifacts@1
    displayName: "Publish artifacts"
    inputs:
      pathToPublish: $(Build.ArtifactStagingDirectory)
      artifactName: yourapp</code></pre>



<p>We use the task <strong>DownloadSecureFile@1</strong> to download the keystore file and provide its path in the <strong>Gradle@3</strong> task. We set the name to keystore and use the property secureFilePath to get its path. </p>



<p>Note that in <strong>Gradle@3</strong> task even though you have set the workingDirectory as <strong>$(Build.SourcesDirectory)/android</strong>, you will need to se <strong>gradleWrapperFile </strong>as <strong>android/gradlew</strong>. Also check the options we pass to that task, that&#8217;s how we are setting the variables to the <strong>build.gradle</strong> files. The task value assembleRelease is to generate the APK file and bundleRelease is to create Android App Bundle (aab) for Google Play Store.</p>



<h1 class="wp-block-heading">Google Play Integrations</h1>



<p>Once the pipeline is run, you should be able to manually download the App bundle file from the artifacts. </p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/06/image-5.png"><img decoding="async" width="1024" height="888" src="/wp-content/uploads/2025/06/image-5-1024x888.png" alt="" class="wp-image-14736" srcset="/wp-content/uploads/2025/06/image-5-1024x888.png 1024w, /wp-content/uploads/2025/06/image-5-300x260.png 300w, /wp-content/uploads/2025/06/image-5-768x666.png 768w, /wp-content/uploads/2025/06/image-5-1536x1332.png 1536w, /wp-content/uploads/2025/06/image-5-400x347.png 400w, /wp-content/uploads/2025/06/image-5-692x600.png 692w, /wp-content/uploads/2025/06/image-5.png 1681w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>You can upload to the Play store console for doing an internal release to test the app internally now. Select your application, click on the Test and release menu and then under Testing, select internal testing. This is where you can create a few internal users and upload your aab file. You can share the invite link with them. Please be noted that your internal tester would need to accept the request on their first visit to install the app. They should also be able to update the application from Play store when you release a new version.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/06/image-7.png"><img decoding="async" width="1024" height="851" src="/wp-content/uploads/2025/06/image-7-1024x851.png" alt="" class="wp-image-14742" srcset="/wp-content/uploads/2025/06/image-7-1024x851.png 1024w, /wp-content/uploads/2025/06/image-7-300x249.png 300w, /wp-content/uploads/2025/06/image-7-768x638.png 768w, /wp-content/uploads/2025/06/image-7-1536x1276.png 1536w, /wp-content/uploads/2025/06/image-7-400x332.png 400w, /wp-content/uploads/2025/06/image-7-722x600.png 722w, /wp-content/uploads/2025/06/image-7.png 1904w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<h2 class="wp-block-heading">Service account and permission in Google Cloud Console</h2>



<p>Unfortunately the doc <a href="https://learn.microsoft.com/en-us/azure/devops/pipelines/ecosystems/android?view=azure-devops#release">here</a> and <a href="https://marketplace.visualstudio.com/items?itemName=ms-vsclient.google-play#user-content-google-play---release">here</a> are outdated and it took a while for me to configure this. You won&#8217;t be able to see the Setup and API access menu in <a href="https://play.google.com/console/">https://play.google.com/console/</a> as Google had moved them to another process. The new steps are, </p>



<h3 class="wp-block-heading"><strong>Create your service account in Google Cloud</strong></h3>



<ol start="1" class="wp-block-list">
<li>Go to <strong><a href="https://console.cloud.google.com/">Google Cloud Console</a> → IAM &amp; Admin → Service Accounts</strong></li>



<li>Create a new service account, grant it the <strong>Owner</strong> role (or at least Project > Editor)</li>



<li>Under the service account, add a <strong>JSON key</strong> and save the downloaded file. Please make sure to download this to a secure place, as this contains your key in it</li>
</ol>



<h3 class="wp-block-heading"><strong>Invite the service account in Play Console</strong></h3>



<ol start="1" class="wp-block-list">
<li>In the Play Console, go to <strong>Users and permissions</strong>.</li>



<li>Click <strong>Invite new user</strong>.</li>



<li>Paste the client_email from your JSON file (e.g. foo@bar.iam.gserviceaccount.com).</li>



<li>Assign your service account permissions:
<ul class="wp-block-list">
<li>Select your app</li>



<li>Give at least the permissions below
<ul class="wp-block-list">
<li>View app information (read-only)</li>



<li>Release to production, exclude devices, and use Play App Signing</li>



<li>Release apps to testing tracks</li>
</ul>
</li>
</ul>
</li>



<li>Send the invite, this will be auto approved</li>
</ol>



<h2 class="wp-block-heading">Create Azure DevOps service connection</h2>



<ol start="1" class="wp-block-list">
<li>Go to your AZDO project → <strong>Project settings → Service connections</strong>.</li>



<li>Create a <strong>New service connection → Google Play</strong>.</li>



<li>For <strong>service account email</strong>, use the JSON’s client_email; for <strong>private key</strong>, paste the entire key (include \n line breaks exactly)</li>



<li>Save it with the name yourapp-google-play. Make sure to replace yourapp with your app name.</li>
</ol>



<h2 class="wp-block-heading">Update the release YAML with GooglePlayRelease task</h2>



<p>The final step in the YAML file is to update it with the GooglePlayRelease task so that we can release app directly from the pipeline. </p>



<pre class="wp-block-code"><code>  - task: GooglePlayRelease@4
    inputs:
      serviceConnection: 'yourapp-google-play'
      applicationId: 'com.yourappid'
      action: 'SingleBundle'
      bundleFile: '$(Build.ArtifactStagingDirectory)/android/app/build/outputs/bundle/release/*.aab'
      track: 'internal'</code></pre>



<p>Finally, run your pipeline and if everything goes well, you should see that your pileline result as below.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/06/image-8.png"><img decoding="async" width="1024" height="517" src="/wp-content/uploads/2025/06/image-8-1024x517.png" alt="" class="wp-image-14745" srcset="/wp-content/uploads/2025/06/image-8-1024x517.png 1024w, /wp-content/uploads/2025/06/image-8-300x151.png 300w, /wp-content/uploads/2025/06/image-8-768x388.png 768w, /wp-content/uploads/2025/06/image-8-1536x776.png 1536w, /wp-content/uploads/2025/06/image-8-2048x1034.png 2048w, /wp-content/uploads/2025/06/image-8-400x202.png 400w, /wp-content/uploads/2025/06/image-8-1188x600.png 1188w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>You should also be able to see the new version released for your internal test users in Google play console.</p>



<figure class="wp-block-image size-large"><a href="/wp-content/uploads/2025/06/image-9.png"><img decoding="async" width="1024" height="480" src="/wp-content/uploads/2025/06/image-9-1024x480.png" alt="" class="wp-image-14746" srcset="/wp-content/uploads/2025/06/image-9-1024x480.png 1024w, /wp-content/uploads/2025/06/image-9-300x141.png 300w, /wp-content/uploads/2025/06/image-9-768x360.png 768w, /wp-content/uploads/2025/06/image-9-1536x720.png 1536w, /wp-content/uploads/2025/06/image-9-2048x960.png 2048w, /wp-content/uploads/2025/06/image-9-400x188.png 400w, /wp-content/uploads/2025/06/image-9-1280x600.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>



<p>You can promote or increase the rollout of your application by following this <a href="https://learn.microsoft.com/en-us/azure/devops/pipelines/ecosystems/android?view=azure-devops#promote">doc</a>. </p>



<h1 class="wp-block-heading">About the Author</h1>



<p>I am yet another developer who is passionate about writing and sharing knowledge. I have written more than 500 blogs on my&nbsp;<a rel="noreferrer noopener" href="https://sibeeshpassion.com/" target="_blank">blog</a>. If you like this content, consider following me here,</p>



<ul class="wp-block-list">
<li><a href="https://github.com/SibeeshVenu">GitHub</a></li>



<li><a href="https://medium.com/@sibeeshvenu">medium</a></li>



<li><a href="https://twitter.com/sibeeshvenu">Twitter</a></li>
</ul>



<h1 class="wp-block-heading">Your turn. What do you think?</h1>



<p>Thanks a lot for reading. Did I miss anything that you may think is needed in this article? Could you find this post useful? Kindly do not forget to share your feedback.</p>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://mail.sibeeshpassion.com/react-native-android-release-with-azure-devops-and-google-play-store-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Move Azure DevOps Work Items From One Organization to Another</title>
		<link>https://mail.sibeeshpassion.com/move-azure-devops-work-items-from-one-organization-to-another/</link>
					<comments>https://mail.sibeeshpassion.com/move-azure-devops-work-items-from-one-organization-to-another/#disqus_thread</comments>
		
		<dc:creator><![CDATA[SibeeshVenu]]></dc:creator>
		<pubDate>Mon, 09 Mar 2020 15:45:27 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[azure devops]]></category>
		<category><![CDATA[Azure DevOps]]></category>
		<category><![CDATA[azure scrum]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[move workitems azure devops]]></category>
		<category><![CDATA[org to org work items transfer]]></category>
		<guid isPermaLink="false">https://sibeeshpassion.com/?p=14052</guid>

					<description><![CDATA[[toc] Introduction I understand that you need to move all of your Azure DevOps Work Items from one of your organization to another. And that is the reason why you are reading this article, no worries, you came to the right place. At the end of this article, I am sure that you will be able to achieve this. In my previous article, I had shown you how you can move your repository from one organization to another, if you have not read it, consider reading it. Move Work Items to Another DevOps As I mentioned in my previous post [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>[toc]</p>



<h2 class="wp-block-heading">Introduction</h2>



<p>I understand that you need to move all of your Azure DevOps Work Items from one of your organization to another. And that is the reason why you are reading this article, no worries, you came to the right place. At the end of this article, I am sure that you will be able to achieve this. In my previous article, <a href="https://medium.com/@sibeeshvenu/move-git-repositories-from-one-to-other-organization-in-azure-devops-d15ee4283dc9">I had shown you how you can move your repository from one organization to another</a>, if you have not read it, consider reading it. </p>



<h2 class="wp-block-heading">Move Work Items to Another DevOps </h2>



<p>As I mentioned in my previous post I had already set up a sample project in my source DevOps organization and another in my destination DevOps organization. Then I created a sample user and gave access to both projects.</p>



<h3 class="wp-block-heading">Check the DevOps Project Process</h3>



<p> Now before we start we need to make sure that both of the projects follow the same Process in the DevOps.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="788" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/DevOps-Process-Check-1024x788.png" alt="" class="wp-image-14053" srcset="/wp-content/uploads/2020/03/DevOps-Process-Check-1024x788.png 1024w, /wp-content/uploads/2020/03/DevOps-Process-Check-300x231.png 300w, /wp-content/uploads/2020/03/DevOps-Process-Check-768x591.png 768w, /wp-content/uploads/2020/03/DevOps-Process-Check-425x327.png 425w, /wp-content/uploads/2020/03/DevOps-Process-Check.png 1119w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>DevOps Process Check</figcaption></figure></div>



<h3 class="wp-block-heading">Change the Project Process</h3>



<p>If the process of the two projects is different, then you will end up in many issues in the publishing steps, thus changing it to one is very important. To change, you need to have certain permissions as mentioned in <a href="https://docs.microsoft.com/en-us/azure/devops/organizations/settings/work/change-process-agile-to-scrum?view=azure-devops#prerequisites"><strong>this post</strong></a>. Once you have enough permission, go to your organization settings and click on the Process menu under Boards.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="703" height="1024" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Organization-Process-Settings-703x1024.png" alt="" class="wp-image-14054" srcset="/wp-content/uploads/2020/03/Organization-Process-Settings-703x1024.png 703w, /wp-content/uploads/2020/03/Organization-Process-Settings-206x300.png 206w, /wp-content/uploads/2020/03/Organization-Process-Settings-768x1119.png 768w, /wp-content/uploads/2020/03/Organization-Process-Settings-377x550.png 377w, /wp-content/uploads/2020/03/Organization-Process-Settings.png 1011w" sizes="(max-width: 703px) 100vw, 703px" /><figcaption>Organization Process Settings</figcaption></figure></div>



<p>Now you should be able to select the projects which are assigned to each process, clicking the project number will redirect you to the list.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="182" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/DevOps-Project-and-Process-1024x182.png" alt="" class="wp-image-14055" srcset="/wp-content/uploads/2020/03/DevOps-Project-and-Process-1024x182.png 1024w, /wp-content/uploads/2020/03/DevOps-Project-and-Process-300x53.png 300w, /wp-content/uploads/2020/03/DevOps-Project-and-Process-768x136.png 768w, /wp-content/uploads/2020/03/DevOps-Project-and-Process-1536x273.png 1536w, /wp-content/uploads/2020/03/DevOps-Project-and-Process-2048x364.png 2048w, /wp-content/uploads/2020/03/DevOps-Project-and-Process-425x76.png 425w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>DevOps Project and Process</figcaption></figure></div>



<p>Now click on the three dots you see near to the project name and then click on the Change button.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="350" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Change-the-DevOps-Process-1024x350.png" alt="" class="wp-image-14056" srcset="/wp-content/uploads/2020/03/Change-the-DevOps-Process-1024x350.png 1024w, /wp-content/uploads/2020/03/Change-the-DevOps-Process-300x102.png 300w, /wp-content/uploads/2020/03/Change-the-DevOps-Process-768x262.png 768w, /wp-content/uploads/2020/03/Change-the-DevOps-Process-425x145.png 425w, /wp-content/uploads/2020/03/Change-the-DevOps-Process.png 1204w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Change the DevOps Process</figcaption></figure></div>



<p>Just select the process and click Save. And also make sure that you have enabled all the Backlog Navigation Levels. </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1025" height="989" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Backlog-Navigation-Levels.png" alt="" class="wp-image-14058" srcset="/wp-content/uploads/2020/03/Backlog-Navigation-Levels.png 1025w, /wp-content/uploads/2020/03/Backlog-Navigation-Levels-300x289.png 300w, /wp-content/uploads/2020/03/Backlog-Navigation-Levels-768x741.png 768w, /wp-content/uploads/2020/03/Backlog-Navigation-Levels-425x410.png 425w" sizes="(max-width: 1025px) 100vw, 1025px" /><figcaption>Backlog Navigation Levels</figcaption></figure></div>



<p>You are done!.</p>



<h3 class="wp-block-heading">Create Query to Get the Work Items</h3>



<p>Now let&#8217;s say that I have below sample work items, and I need to create a query to get all these work items. </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="966" height="651" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Work-Items-in-Source-Organization.png" alt="" class="wp-image-14057" srcset="/wp-content/uploads/2020/03/Work-Items-in-Source-Organization.png 966w, /wp-content/uploads/2020/03/Work-Items-in-Source-Organization-300x202.png 300w, /wp-content/uploads/2020/03/Work-Items-in-Source-Organization-768x518.png 768w, /wp-content/uploads/2020/03/Work-Items-in-Source-Organization-425x286.png 425w" sizes="(max-width: 966px) 100vw, 966px" /><figcaption>Work Items in Source Organization</figcaption></figure></div>



<p>Click on the Queries menu on the left side and then click on the +New Query button. In the Type of Query button, click on the &#8220;Tree of work items&#8221; if you need the tree structure in the work items otherwise just click on &#8220;Flat list of work items&#8221;</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="719" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Tree-of-Work-Items-1024x719.png" alt="" class="wp-image-14059" srcset="/wp-content/uploads/2020/03/Tree-of-Work-Items-1024x719.png 1024w, /wp-content/uploads/2020/03/Tree-of-Work-Items-300x211.png 300w, /wp-content/uploads/2020/03/Tree-of-Work-Items-768x539.png 768w, /wp-content/uploads/2020/03/Tree-of-Work-Items-425x298.png 425w, /wp-content/uploads/2020/03/Tree-of-Work-Items.png 1087w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Tree of Work Items</figcaption></figure></div>



<p>Change the <em>Type of tree</em> dropdown value to Parent/Child, and then run the query.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="990" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Parent-Child-Query-DevOps-1024x990.png" alt="" class="wp-image-14061" srcset="/wp-content/uploads/2020/03/Parent-Child-Query-DevOps-1024x990.png 1024w, /wp-content/uploads/2020/03/Parent-Child-Query-DevOps-300x290.png 300w, /wp-content/uploads/2020/03/Parent-Child-Query-DevOps-768x743.png 768w, /wp-content/uploads/2020/03/Parent-Child-Query-DevOps-425x411.png 425w, /wp-content/uploads/2020/03/Parent-Child-Query-DevOps.png 1096w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Parent-Child Query DevOps</figcaption></figure></div>



<p>Just save the query, we will be using that very soon.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="918" height="557" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/DevOps-Export-Query.png" alt="" class="wp-image-14060" srcset="/wp-content/uploads/2020/03/DevOps-Export-Query.png 918w, /wp-content/uploads/2020/03/DevOps-Export-Query-300x182.png 300w, /wp-content/uploads/2020/03/DevOps-Export-Query-768x466.png 768w, /wp-content/uploads/2020/03/DevOps-Export-Query-425x258.png 425w" sizes="(max-width: 918px) 100vw, 918px" /><figcaption>DevOps Export Query</figcaption></figure></div>



<h3 class="wp-block-heading">Install the Azure DevOps Office Integration Tool</h3>



<p>To download the tool, please visit <a href="https://visualstudio.microsoft.com/downloads/#other-family">here</a>. Once you install the same, you should see a Team tab in your Excel, yes, we are going to play with Excel now.</p>



<h3 class="wp-block-heading">Get Data From Azure DevOps in Excel</h3>



<p>Click on the Team button and then New List, you will see an option to select the server, or if you don&#8217;t have any you need to add it by clicking the servers button.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="857" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Connect-Azure-DevOps-from-Excel-1024x857.png" alt="" class="wp-image-14062" srcset="/wp-content/uploads/2020/03/Connect-Azure-DevOps-from-Excel-1024x857.png 1024w, /wp-content/uploads/2020/03/Connect-Azure-DevOps-from-Excel-300x251.png 300w, /wp-content/uploads/2020/03/Connect-Azure-DevOps-from-Excel-768x643.png 768w, /wp-content/uploads/2020/03/Connect-Azure-DevOps-from-Excel-425x356.png 425w, /wp-content/uploads/2020/03/Connect-Azure-DevOps-from-Excel.png 1408w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Connect Azure DevOps from Excel</figcaption></figure></div>



<p>Now add both Source and Destination DevOps servers.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="744" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Add-DevOps-Servers-in-Excel-1024x744.png" alt="" class="wp-image-14063" srcset="/wp-content/uploads/2020/03/Add-DevOps-Servers-in-Excel-1024x744.png 1024w, /wp-content/uploads/2020/03/Add-DevOps-Servers-in-Excel-300x218.png 300w, /wp-content/uploads/2020/03/Add-DevOps-Servers-in-Excel-768x558.png 768w, /wp-content/uploads/2020/03/Add-DevOps-Servers-in-Excel-315x230.png 315w, /wp-content/uploads/2020/03/Add-DevOps-Servers-in-Excel-425x309.png 425w, /wp-content/uploads/2020/03/Add-DevOps-Servers-in-Excel.png 1185w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Add DevOps Servers in Excel</figcaption></figure></div>



<p>Now it is time to connect our Source DevOps server.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="850" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Connect-DevOps-Server-1024x850.png" alt="" class="wp-image-14077" srcset="/wp-content/uploads/2020/03/Connect-DevOps-Server-1024x850.png 1024w, /wp-content/uploads/2020/03/Connect-DevOps-Server-300x249.png 300w, /wp-content/uploads/2020/03/Connect-DevOps-Server-768x637.png 768w, /wp-content/uploads/2020/03/Connect-DevOps-Server-425x353.png 425w, /wp-content/uploads/2020/03/Connect-DevOps-Server.png 1168w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption> Connect DevOps Server </figcaption></figure></div>



<p>Click on the New List under the Team tab, will give you an option to select the query that we created before, just select the same and press Ok.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="921" height="645" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Select-DevOps-Query.png" alt="" class="wp-image-14065" srcset="/wp-content/uploads/2020/03/Select-DevOps-Query.png 921w, /wp-content/uploads/2020/03/Select-DevOps-Query-300x210.png 300w, /wp-content/uploads/2020/03/Select-DevOps-Query-768x538.png 768w, /wp-content/uploads/2020/03/Select-DevOps-Query-425x298.png 425w" sizes="(max-width: 921px) 100vw, 921px" /><figcaption>Select DevOps Query</figcaption></figure></div>



<p>This will fetch all the work items from your source DevOps. </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="201" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/DevOps-Work-Items-in-Excel-1024x201.png" alt="" class="wp-image-14066" srcset="/wp-content/uploads/2020/03/DevOps-Work-Items-in-Excel-1024x201.png 1024w, /wp-content/uploads/2020/03/DevOps-Work-Items-in-Excel-300x59.png 300w, /wp-content/uploads/2020/03/DevOps-Work-Items-in-Excel-768x151.png 768w, /wp-content/uploads/2020/03/DevOps-Work-Items-in-Excel-1536x302.png 1536w, /wp-content/uploads/2020/03/DevOps-Work-Items-in-Excel-425x84.png 425w, /wp-content/uploads/2020/03/DevOps-Work-Items-in-Excel.png 1840w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>DevOps Work Items in Excel</figcaption></figure></div>



<p> Click on the Team button, select any columns in the excel sheet, click on the <em>Choose Column</em>. Select All Work Items Types in the dropdown and then move all the columns to the right side.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="856" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Show-all-the-Columns-1024x856.png" alt="" class="wp-image-14069" srcset="/wp-content/uploads/2020/03/Show-all-the-Columns-1024x856.png 1024w, /wp-content/uploads/2020/03/Show-all-the-Columns-300x251.png 300w, /wp-content/uploads/2020/03/Show-all-the-Columns-768x642.png 768w, /wp-content/uploads/2020/03/Show-all-the-Columns-425x355.png 425w, /wp-content/uploads/2020/03/Show-all-the-Columns.png 1492w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Show all the Columns</figcaption></figure></div>



<p>This will show all the columns in the excel sheet with data. Now it is time to publish these work items to our destination DevOps. </p>



<h3 class="wp-block-heading">Publish Work Items to Destination DevOps</h3>



<p>To do this, open another Excel then click on the New List button under the Team Tab. Now select the destination DevOps and connect. In the next Pop up, select the <em>Input List</em> option.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="921" height="645" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Input-List.png" alt="" class="wp-image-14067" srcset="/wp-content/uploads/2020/03/Input-List.png 921w, /wp-content/uploads/2020/03/Input-List-300x210.png 300w, /wp-content/uploads/2020/03/Input-List-768x538.png 768w, /wp-content/uploads/2020/03/Input-List-425x298.png 425w" sizes="(max-width: 921px) 100vw, 921px" /><figcaption>Input List</figcaption></figure></div>



<p>You will be seeing some columns in the excel sheet now. Click the Team button and then <em>Add Tree Level</em>, this will make sure that we have the tree structure in our DEstination DevOps too. </p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>Please make sure that you are adding as many levels you have in your Source DevOps Excel sheet. In our case, it is 4.</p><cite>Tree Level</cite></blockquote>



<p>Now click on the Choose Columns and add all the columns as we did with the Source Excel Sheet. <strong>Please make sure that both Excel sheet columns are in the same order.</strong> You can order the fields in the order you wish. Once both excel sheet has the same order, then select the data from the source and then select the first data cell in the destination excel sheet and then press Enter. This is how the data looks like in the destination Excel.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="228" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Pasted-Data-1024x228.png" alt="" class="wp-image-14071" srcset="/wp-content/uploads/2020/03/Pasted-Data-1024x228.png 1024w, /wp-content/uploads/2020/03/Pasted-Data-300x67.png 300w, /wp-content/uploads/2020/03/Pasted-Data-768x171.png 768w, /wp-content/uploads/2020/03/Pasted-Data-1536x342.png 1536w, /wp-content/uploads/2020/03/Pasted-Data-425x95.png 425w, /wp-content/uploads/2020/03/Pasted-Data.png 1680w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Pasted Data</figcaption></figure></div>



<p>Please be noted that the above screenshot doesn&#8217;t include all the columns. In your case, it should be there in the excel sheet.</p>



<p>Now select any column in the Excel sheet and then click on the Publish button under the Team tab. By chance, if you are getting any errors you may have to manually review the same and assign the right values.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="916" height="984" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Work-Item-Publishing-Errors.png" alt="" class="wp-image-14072" srcset="/wp-content/uploads/2020/03/Work-Item-Publishing-Errors.png 916w, /wp-content/uploads/2020/03/Work-Item-Publishing-Errors-279x300.png 279w, /wp-content/uploads/2020/03/Work-Item-Publishing-Errors-768x825.png 768w, /wp-content/uploads/2020/03/Work-Item-Publishing-Errors-425x457.png 425w" sizes="(max-width: 916px) 100vw, 916px" /><figcaption>Work Item Publishing Errors</figcaption></figure></div>



<p>If everything goes well, you should see all your work items in your destination Azure DevOps.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="830" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/New-Work-Items-1024x830.png" alt="" class="wp-image-14073" srcset="/wp-content/uploads/2020/03/New-Work-Items-1024x830.png 1024w, /wp-content/uploads/2020/03/New-Work-Items-300x243.png 300w, /wp-content/uploads/2020/03/New-Work-Items-768x622.png 768w, /wp-content/uploads/2020/03/New-Work-Items-425x344.png 425w, /wp-content/uploads/2020/03/New-Work-Items.png 1191w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>New Work Items</figcaption></figure></div>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Thanks a lot for reading this article. I hope now you have learned about</p>



<ul class="wp-block-list"><li>how to use queries in Azure DevOps</li><li>how to use Azure DevOps integration tools for Office</li><li>how to change the project Process</li><li>how to move the work items from one DevOps to another</li></ul>



<p>If you have learned anything else from this article, please let me know in the comment section.</p>



<h2 class="wp-block-heading">Follow me</h2>



<p>If you like this article, consider following me, haha!.</p>



<ul class="wp-block-list"><li><a href="https://github.com/SibeeshVenu">GitHub</a></li><li><a href="https://medium.com/@sibeeshvenu">medium</a></li><li><a href="https://twitter.com/sibeeshvenu">Twitter</a></li></ul>



<h2 class="wp-block-heading">Your turn. What do you think?</h2>



<p>Thanks a lot for reading. Did I miss anything that you may think which is needed in this article? Could you find this post useful? Kindly do not forget to share your feedback.</p>



<p>Kindest Regards<br>Sibeesh Venu</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mail.sibeeshpassion.com/move-azure-devops-work-items-from-one-organization-to-another/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Move Git Repositories From One to Other Organization in Azure DevOps</title>
		<link>https://mail.sibeeshpassion.com/move-git-repositories-from-one-to-other-organization-in-azure-devops/</link>
					<comments>https://mail.sibeeshpassion.com/move-git-repositories-from-one-to-other-organization-in-azure-devops/#disqus_thread</comments>
		
		<dc:creator><![CDATA[SibeeshVenu]]></dc:creator>
		<pubDate>Fri, 06 Mar 2020 14:49:50 +0000</pubDate>
				<category><![CDATA[Azure]]></category>
		<category><![CDATA[azure devops]]></category>
		<category><![CDATA[Azure DevOps]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[git repository manage]]></category>
		<category><![CDATA[move git repository to other]]></category>
		<guid isPermaLink="false">https://sibeeshpassion.com/?p=14033</guid>

					<description><![CDATA[[toc] Introduction For this topic, I strongly believe that there is no need for an introduction as you already know what is Git and Azure DevOps, and I am guessing that you need to move your codebase or repositories from one of your organization to another. That is the reason why you are here. I believe that there is no direct way of achieving this, there may be some paid tools which do the tricks, but I didn&#8217;t want to pay anything for this small requirement. So let&#8217;s just see how I achieved this. Trust me this is not a [&#8230;]]]></description>
										<content:encoded><![CDATA[
<p>[toc]</p>



<h2 class="wp-block-heading">Introduction</h2>



<p>For this topic, I strongly believe that there is no need for an introduction as you already know what is Git and Azure DevOps, and I am guessing that you need to move your codebase or repositories from one of your organization to another. That is the reason why you are here. I believe that there is no direct way of achieving this, there may be some paid tools which do the tricks, but I didn&#8217;t want to pay anything for this small requirement. So let&#8217;s just see how I achieved this. Trust me this is not a tough task as it sounds. </p>



<h2 class="wp-block-heading">Background</h2>



<p>I was working with a project and my customer wanted to move the repositories to their Azure DevOps from ours. So before I do it directly with their DevOps, I wanted to try this out. So I created my own Azure DevOps and moved a sample repository to there from my company Azure DevOps. </p>



<h2 class="wp-block-heading">Move Repositories to Another Organization&#8217;s DevOps</h2>



<h3 class="wp-block-heading">Add a User to Both Organization</h3>



<p>To start doing this process, you should add a user to both projects. I created a sample user (tester@njanorumalayali.com) and assign the contributor access for the two repositories. If you don&#8217;t have permission to do so, please contact your project administrator and get it done. Once that is done, you can download all the codes from your Source Organization repository. To do that it is a good idea to use an SSH connection. </p>



<h3 class="wp-block-heading">Configure SSH Key</h3>



<p>To create one Generate the RSA key pair by running the <strong>ssh-keygen</strong> command. </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="709" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Generate-SSH-Keys-1024x709.png" alt="" class="wp-image-14034" srcset="/wp-content/uploads/2020/03/Generate-SSH-Keys-1024x709.png 1024w, /wp-content/uploads/2020/03/Generate-SSH-Keys-300x208.png 300w, /wp-content/uploads/2020/03/Generate-SSH-Keys-768x532.png 768w, /wp-content/uploads/2020/03/Generate-SSH-Keys-425x294.png 425w, /wp-content/uploads/2020/03/Generate-SSH-Keys.png 1099w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Generate SSH Keys</figcaption></figure></div>



<h3 class="wp-block-heading">Update the SSH Key in Source DevOps and Clone the Repository</h3>



<p>Now go to your source organization and add the Public Key Data under the <em>SSH public keys</em> section. You can find this public key in <code>.ssh</code> folder.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="703" height="274" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Public-Key-in-SSH-Folder.png" alt="" class="wp-image-14044" srcset="/wp-content/uploads/2020/03/Public-Key-in-SSH-Folder.png 703w, /wp-content/uploads/2020/03/Public-Key-in-SSH-Folder-300x117.png 300w, /wp-content/uploads/2020/03/Public-Key-in-SSH-Folder-425x166.png 425w" sizes="(max-width: 703px) 100vw, 703px" /><figcaption>Public Key in SSH Folder.png</figcaption></figure></div>



<p>Let&#8217;s add a new SSH key now.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="500" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Add-a-new-SSH-Key-1024x500.png" alt="" class="wp-image-14035" srcset="/wp-content/uploads/2020/03/Add-a-new-SSH-Key-1024x500.png 1024w, /wp-content/uploads/2020/03/Add-a-new-SSH-Key-300x146.png 300w, /wp-content/uploads/2020/03/Add-a-new-SSH-Key-768x375.png 768w, /wp-content/uploads/2020/03/Add-a-new-SSH-Key-1536x750.png 1536w, /wp-content/uploads/2020/03/Add-a-new-SSH-Key-425x207.png 425w, /wp-content/uploads/2020/03/Add-a-new-SSH-Key.png 1920w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Add a new SSH Key</figcaption></figure></div>



<p>Now we can get the SSH clone URL and clone our repository. </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="460" height="312" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Clone-Repository-Using-SSH.png" alt="" class="wp-image-14036" srcset="/wp-content/uploads/2020/03/Clone-Repository-Using-SSH.png 460w, /wp-content/uploads/2020/03/Clone-Repository-Using-SSH-300x203.png 300w, /wp-content/uploads/2020/03/Clone-Repository-Using-SSH-425x288.png 425w" sizes="(max-width: 460px) 100vw, 460px" /><figcaption>Clone Repository Using SSH</figcaption></figure></div>



<p>You should get a result as in the preceding image if everything correct. </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="344" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Clone-Result-1024x344.png" alt="" class="wp-image-14037" srcset="/wp-content/uploads/2020/03/Clone-Result-1024x344.png 1024w, /wp-content/uploads/2020/03/Clone-Result-300x101.png 300w, /wp-content/uploads/2020/03/Clone-Result-768x258.png 768w, /wp-content/uploads/2020/03/Clone-Result-425x143.png 425w, /wp-content/uploads/2020/03/Clone-Result.png 1123w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Clone Result</figcaption></figure></div>



<h3 class="wp-block-heading">Check out all the Branches and Tags</h3>



<p>Now let us just go inside of the cloned project and make sure all the branches are available by running <strong><code>git branch -a</code></strong>.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="560" height="181" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/git-branch-all.png" alt="" class="wp-image-14038" srcset="/wp-content/uploads/2020/03/git-branch-all.png 560w, /wp-content/uploads/2020/03/git-branch-all-300x97.png 300w, /wp-content/uploads/2020/03/git-branch-all-425x137.png 425w" sizes="(max-width: 560px) 100vw, 560px" /><figcaption>git branch all</figcaption></figure></div>



<p>Now it is time to <strong>check out all the branches locally</strong> so that they can be pushed to our new Organization DevOps. This is really important if you need those branches. </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="364" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Check-out-all-the-branches-1024x364.png" alt="" class="wp-image-14039" srcset="/wp-content/uploads/2020/03/Check-out-all-the-branches-1024x364.png 1024w, /wp-content/uploads/2020/03/Check-out-all-the-branches-300x107.png 300w, /wp-content/uploads/2020/03/Check-out-all-the-branches-768x273.png 768w, /wp-content/uploads/2020/03/Check-out-all-the-branches-1536x546.png 1536w, /wp-content/uploads/2020/03/Check-out-all-the-branches-425x151.png 425w, /wp-content/uploads/2020/03/Check-out-all-the-branches.png 1597w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Check out all the branches</figcaption></figure></div>



<p>Now fetch all of your tags too by running <code>git fetch --tags</code>. Once that is done you can verify once again whether all the branches are downloaded locally or not. </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="427" height="205" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/All-branches-downloaded-locally.png" alt="" class="wp-image-14040" srcset="/wp-content/uploads/2020/03/All-branches-downloaded-locally.png 427w, /wp-content/uploads/2020/03/All-branches-downloaded-locally-300x144.png 300w, /wp-content/uploads/2020/03/All-branches-downloaded-locally-425x204.png 425w" sizes="(max-width: 427px) 100vw, 427px" /><figcaption>All branches downloaded locally</figcaption></figure></div>



<h3 class="wp-block-heading">Update the SSH Key in the Destination DevOps</h3>



<p>Follow the same procedure as you did for the source DevOps and update the SSH public key there.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="956" height="445" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Destination-DevOps-SSH.png" alt="" class="wp-image-14041" srcset="/wp-content/uploads/2020/03/Destination-DevOps-SSH.png 956w, /wp-content/uploads/2020/03/Destination-DevOps-SSH-300x140.png 300w, /wp-content/uploads/2020/03/Destination-DevOps-SSH-768x357.png 768w, /wp-content/uploads/2020/03/Destination-DevOps-SSH-425x198.png 425w" sizes="(max-width: 956px) 100vw, 956px" /><figcaption>Destination DevOps SSH</figcaption></figure></div>



<h3 class="wp-block-heading">Remove Old and Add New Origin </h3>



<p>Now comes the important step. Here we are removing the old Origin and add our new Origin so that we can push all our changes including the branches and tags. So we are going to run the below commands one by one.</p>



<pre class="wp-block-preformatted">git remote rm origin
git remote add origin <new ssh origin from destination devops>
git push origin --all
git push --tags</pre>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="1024" height="473" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/Remove-Old-and-Add-New-Origin-1024x473.png" alt="" class="wp-image-14042" srcset="/wp-content/uploads/2020/03/Remove-Old-and-Add-New-Origin-1024x473.png 1024w, /wp-content/uploads/2020/03/Remove-Old-and-Add-New-Origin-300x139.png 300w, /wp-content/uploads/2020/03/Remove-Old-and-Add-New-Origin-768x355.png 768w, /wp-content/uploads/2020/03/Remove-Old-and-Add-New-Origin-1536x709.png 1536w, /wp-content/uploads/2020/03/Remove-Old-and-Add-New-Origin-425x196.png 425w, /wp-content/uploads/2020/03/Remove-Old-and-Add-New-Origin.png 1579w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Remove Old and Add New Origin</figcaption></figure></div>



<p>As you can see in the above image, all of our codebases now is been uploaded to the new Azure DevOps. I told you already it is not that hard as it sounds.</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="762" height="459" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/All-the-branches-in-new-DevOps.png" alt="" class="wp-image-14043" srcset="/wp-content/uploads/2020/03/All-the-branches-in-new-DevOps.png 762w, /wp-content/uploads/2020/03/All-the-branches-in-new-DevOps-300x181.png 300w, /wp-content/uploads/2020/03/All-the-branches-in-new-DevOps-425x256.png 425w" sizes="(max-width: 762px) 100vw, 762px" /><figcaption>All the branches in new DevOps</figcaption></figure></div>



<p>One thing to notice here is that the new repository will contain your branch history too. </p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" width="958" height="1024" src="https://sibeeshpassion.com/wp-content/uploads/2020/03/History-of-the-branches-958x1024.png" alt="" class="wp-image-14050" srcset="/wp-content/uploads/2020/03/History-of-the-branches-958x1024.png 958w, /wp-content/uploads/2020/03/History-of-the-branches-281x300.png 281w, /wp-content/uploads/2020/03/History-of-the-branches-768x821.png 768w, /wp-content/uploads/2020/03/History-of-the-branches-425x454.png 425w, /wp-content/uploads/2020/03/History-of-the-branches.png 1052w" sizes="(max-width: 958px) 100vw, 958px" /><figcaption>History of the branches</figcaption></figure></div>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Thanks a lot for reading this article. I hope now you have learned about</p>



<ul class="wp-block-list"><li>the basic git commands</li><li>how to configure SSH connection in Azure DevOps</li><li>how to push the repositories to another DevOps</li></ul>



<p>If you have learned anything else from this article, please let me know in the comment section.</p>



<h2 class="wp-block-heading">Follow me</h2>



<p>If you like this article, consider following me, haha!.</p>



<ul class="wp-block-list"><li><a href="https://github.com/SibeeshVenu">GitHub</a></li><li><a href="https://medium.com/@sibeeshvenu">medium</a></li><li><a href="https://twitter.com/sibeeshvenu">Twitter</a></li></ul>



<h2 class="wp-block-heading">Your turn. What do you think?</h2>



<p>Thanks a lot for reading. Did I miss anything that you may think which is needed in this article? Could you find this post useful? Kindly do not forget to share your feedback.</p>



<p>Kindest Regards<br>Sibeesh Venu</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mail.sibeeshpassion.com/move-git-repositories-from-one-to-other-organization-in-azure-devops/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
