aloisdeniel / vsts-flutter-tasks

Flutter build tasks for Azure DevOps Pipelines/TFS.
https://marketplace.visualstudio.com/items?itemName=aloisdeniel.flutter
105 stars 83 forks source link

Complete example to publish into playstore and apple store #72

Open ductranit opened 3 years ago

ductranit commented 3 years ago

Hi there, I wonder is there any complete example that run pipeline from build github repo to deploy into playtore & apple store? I tried to use google play and apple store extensions It's very hard for me to set it up because I can't find any fully document about it. Here is my try with ios build first:

# Flutter build
name: $(Date:yyyyMMdd)$(Rev:r)
variables:
  projectDirectory: .
trigger:
- deployment  

jobs:
  - job: Build
    pool:
      vmImage: 'macOS-latest'
    steps:
    - task: FlutterInstall@0
      inputs:
        channel: 'dev'
        version: 'latest'
    - task: CmdLine@2
      displayName: 'Update packages'
      inputs: 
        script: '$(FlutterToolPath)/flutter packages upgrade'
    - task: InstallAppleCertificate@2
      inputs:
        certSecureFile: '[my_cert.p12]'
        certPwd: '[password]'
        keychain: 'temp'
    - task: InstallAppleProvisioningProfile@1
      inputs:
        provisioningProfileLocation: 'secureFiles'
        provProfileSecureFile: '[my_profile.mobileprovision]'        
    - task: FlutterBuild@0
      inputs:
        target: ios
        projectDirectory: $(projectDirectory)
        iosCodesign: false    
    - task: CopyFiles@2
      inputs:
        contents: '/ios/iphoneos/Runner.app'
        targetFolder: '$(build.artifactStagingDirectory)'
    - task: PublishBuildArtifacts@1
      inputs:
        artifactName: 'store'
    - task: AppStoreRelease@1
      inputs:
        serviceEndpoint: 'itunes connection'
        appIdentifier: '[app_bundle]'
        appType: 'iOS'
        releaseTrack: 'TestFlight'
        shouldSkipWaitingForProcessing: true
        shouldSkipSubmission: true
        appSpecificId: '[my_app_id]'
        teamId: '[my_team_id]'
        teamName: '[my_team_name]'

At the moment I have trouble on the CopyFiles task, it says found 0 files. And the problem is that I don't know whether I'm doing correctly or not. Is there anyone that succeeded to publish into playstore & apple store with azure pipeline? Can you please share the yml setup? Thanks!

sstglobal commented 3 years ago

@ductranit

  - develop
name: $(Date:yyyyMMdd)$(Rev:r)
variables:

  FlutterChannel: 'stable'
  FlutterVersion: 'latest'

  ProjectDirectory: '$(Build.SourcesDirectory)'
  Flavor: 'dev'

  BuildNumber: '$(Build.BuildNumber)'
  BuildMessage: '$(Build.SourceVersionMessage)'
  BuildAndroidDirectory: '$(ProjectDirectory)/build/app/outputs/flutter-apk/app-$(Flavor)-release.apk'
  BuildIOSDirectory: '$(ProjectDirectory)/build/ios/App-$(Build.BuildNumber)/appname.ipa'

jobs:
  - job: Mobile
    variables:
    - group: inf-android
    - group: inf-ios
    steps:
      - task: FlutterInstall@0
        displayName: 'FlutterInstall'
        inputs:
          channel: 'stable'
      - task: CmdLine@2
        displayName: '[Flutter] doctor'
        inputs:
          script: |
            $(FlutterToolPath)/flutter config --android-sdk /Users/testuser/Library/Android/Sdk
            $(FlutterToolPath)/flutter doctor

      - task: CmdLine@2
        displayName: Run install
        inputs:
          script: |
            $(FlutterToolPath)/flutter pub get

      - task: InstallAppleCertificate@2
        inputs:
          certSecureFile: 'infCert.p12'
          certPwd: $(p12password)
          keychain: 'temp'
          deleteCert: true
      - task: InstallAppleProvisioningProfile@1
        inputs:
          provisioningProfileLocation: 'secureFiles'
          provProfileSecureFile: 'testapp.mobileprovision'
          removeProfile: true
      - task: FlutterBuild@0
        displayName: 'Build IOS'
        inputs:
          target: "ios"
          buildFlavour: "dev"
          buildNumber: '$(Build.BuildNumber)'
          buildName: $(buildName)
      - task: Bash@3
        displayName: 'Prepare an App Store package'
        inputs:
          targetType: 'inline'
          script: |
            xcodebuild -workspace ios/Runner.xcworkspace -scheme dev -sdk iphoneos -configuration Release-dev archive -archivePath build/ios/Runner.xcarchive
            xcodebuild -exportArchive -archivePath build/ios/Runner.xcarchive -exportOptionsPlist ci/ExportOptions.plist -exportPath build/ios/App-$(Build.BuildNumber)
      - task: FlutterBuild@0
        displayName: 'Build Android'
        inputs:
          target: "apk"
          projectDirectory: '$(ProjectDirectory)'
          buildFlavour: "dev"

      - task: CopyFiles@2
        displayName: 'Copy IOS'
        inputs:
          sourceFolder: '$(Build.SourcesDirectory)'
          contents: '$(BuildIOSDirectory)'
          targetFolder: '$(Build.ArtifactStagingDirectory)'
      - task: CopyFiles@2
        displayName: 'Copy Android'
        inputs:
          sourceFolder: '$(Build.SourcesDirectory)'
          contents: '$(BuildAndroidDirectory)'
          targetFolder: '$(Build.ArtifactStagingDirectory)'
      - task: PublishBuildArtifacts@1
        inputs:
          pathToPublish: '$(Build.ArtifactStagingDirectory)'
          artifactName: drop