如何在 Azure devops 管道中缓存 Android NDK?
How to cache Android NDK in Azure devops pipeline?
在 Azure devops 管道中创建任务时,我需要缓存 NDK 以减少构建时间。因此,我正在尝试为此编写一个任务。
例如,这是我用来缓存 gradle 和 konan 存储库的内容
variables:
GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle
KONAN_USER_HOME: /Users/runner/.konan
steps:
- bash: env
displayName: env vars
- task: Cache@2
inputs:
key: 'gradle | "$(Agent.OS)"'
restoreKeys: gradle
path: $(GRADLE_USER_HOME)
displayName: Gradle build cache
- task: Cache@2
inputs:
key: 'konan | "$(Agent.OS)" | cache'
restoreKeys: konan
path: $(KONAN_USER_HOME)
displayName: Konan build cache
他们工作得很好!
但是对于 NDK,我如何知道 我的 NDK 的相对存储库路径并缓存它,假设任务是这样的
- task: Cache@2
inputs:
key: 'ndk | "$(Agent.OS)"'
restoreKeys: ndk
path: $(NDK_PATH)
displayName: NDK build cache
这方面的任何帮助都非常有帮助。
How do I know the relative repository path for my NDK?
您可以使用环境变量 ANDROID_NDK_PATH
获取 NDK 的路径。
如果您使用的是 Microsoft hosted agent windows-latest
中预装的 ndk,ANDROID_NDK_PATH
的值为 C:\Program Files (x86)\Android\android-sdk\ndk-bundle
。
所以,我想通了,忘了在这里 post,这就是我找到的。
1 - 从 devops 设置中获取 android-ndk 的相对路径(我没有这些权限)。
2 - 然后 运行 缓存任务缓存到该路径
1 - 使用此 bash 输出获取相对环境变量。 CREDITS 所以在我写的步骤中:
steps:
- bash: env
displayName: env vars
打印所有可用的环境变量example gist with some vars intentionally removed
从那里我选择了与我的使用相关的路径
2021-01-19T16:17:44.4273060Z ANDROID_HOME=/Users/runner/Library/Android/sdk
2021-01-19T16:17:44.4276800Z ANDROID_SDK_ROOT=/Users/runner/Library/Android/sdk
2021-01-19T16:17:44.4320010Z ANDROID_NDK_18R_PATH=/Users/runner/Library/Android/sdk/ndk/18.1.5063045
2021-01-19T16:17:44.4328690Z ANDROID_NDK_HOME=/Users/runner/Library/Android/sdk/ndk-bundle
现在最相关的路径是 ANDROID_SDK_ROOT
,因为这很有意义,然后将 /ndk
附加到它。
接下来是我的任务
2缓存任务:
- 为路径创建变量
NDK_HOME: /Users/runner/Library/Android/sdk/ndk
并添加到完全像这样的缓存任务中
variables:
GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle
KONAN_USER_HOME: /Users/runner/.konan
NDK_HOME: /Users/runner/Library/Android/sdk/ndk
pool:
vmImage: 'macos-latest'
name: $(date:yyyy).$(Month)$(rev:.r)
steps:
- bash: env
displayName: env vars
- task: Cache@2
inputs:
key: 'gradle | "$(Agent.OS)"'
restoreKeys: gradle
path: $(GRADLE_USER_HOME)
displayName: Gradle build cache
- task: Cache@2
inputs:
key: 'konan | "$(Agent.OS)" | cache'
restoreKeys: konan
path: $(KONAN_USER_HOME)
displayName: Konan build cache
- task: Cache@2
inputs:
key: 'ndk | "$(Agent.OS)"'
restoreKeys: ndk
path: $(NDK_HOME)/ndk
displayName: NDK build cache
很有魅力
另一种方法 动态创建变量 。谢谢
那么我的任务看起来像
steps:
- bash: env
displayName: env vars
- bash: echo "##vso[task.setvariable variable=ANDROID_SDK_ROOT;]$ANDROID_SDK_ROOT"
- task: Cache@2
inputs:
key: 'ndk | "$(Agent.OS)"'
restoreKeys: ndk
path: $(ANDROID_SDK_ROOT)/ndk
displayName: NDK build cache
以同样的方式工作
在 Azure devops 管道中创建任务时,我需要缓存 NDK 以减少构建时间。因此,我正在尝试为此编写一个任务。
例如,这是我用来缓存 gradle 和 konan 存储库的内容
variables:
GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle
KONAN_USER_HOME: /Users/runner/.konan
steps:
- bash: env
displayName: env vars
- task: Cache@2
inputs:
key: 'gradle | "$(Agent.OS)"'
restoreKeys: gradle
path: $(GRADLE_USER_HOME)
displayName: Gradle build cache
- task: Cache@2
inputs:
key: 'konan | "$(Agent.OS)" | cache'
restoreKeys: konan
path: $(KONAN_USER_HOME)
displayName: Konan build cache
他们工作得很好!
但是对于 NDK,我如何知道 我的 NDK 的相对存储库路径并缓存它,假设任务是这样的
- task: Cache@2
inputs:
key: 'ndk | "$(Agent.OS)"'
restoreKeys: ndk
path: $(NDK_PATH)
displayName: NDK build cache
这方面的任何帮助都非常有帮助。
How do I know the relative repository path for my NDK?
您可以使用环境变量 ANDROID_NDK_PATH
获取 NDK 的路径。
如果您使用的是 Microsoft hosted agent windows-latest
中预装的 ndk,ANDROID_NDK_PATH
的值为 C:\Program Files (x86)\Android\android-sdk\ndk-bundle
。
所以,我想通了,忘了在这里 post,这就是我找到的。 1 - 从 devops 设置中获取 android-ndk 的相对路径(我没有这些权限)。 2 - 然后 运行 缓存任务缓存到该路径
1 - 使用此 bash 输出获取相对环境变量。 CREDITS 所以在我写的步骤中:
steps:
- bash: env
displayName: env vars
打印所有可用的环境变量example gist with some vars intentionally removed 从那里我选择了与我的使用相关的路径
2021-01-19T16:17:44.4273060Z ANDROID_HOME=/Users/runner/Library/Android/sdk
2021-01-19T16:17:44.4276800Z ANDROID_SDK_ROOT=/Users/runner/Library/Android/sdk
2021-01-19T16:17:44.4320010Z ANDROID_NDK_18R_PATH=/Users/runner/Library/Android/sdk/ndk/18.1.5063045
2021-01-19T16:17:44.4328690Z ANDROID_NDK_HOME=/Users/runner/Library/Android/sdk/ndk-bundle
现在最相关的路径是 ANDROID_SDK_ROOT
,因为这很有意义,然后将 /ndk
附加到它。
接下来是我的任务
2缓存任务:
- 为路径创建变量
NDK_HOME: /Users/runner/Library/Android/sdk/ndk
并添加到完全像这样的缓存任务中
variables:
GRADLE_USER_HOME: $(Pipeline.Workspace)/.gradle
KONAN_USER_HOME: /Users/runner/.konan
NDK_HOME: /Users/runner/Library/Android/sdk/ndk
pool:
vmImage: 'macos-latest'
name: $(date:yyyy).$(Month)$(rev:.r)
steps:
- bash: env
displayName: env vars
- task: Cache@2
inputs:
key: 'gradle | "$(Agent.OS)"'
restoreKeys: gradle
path: $(GRADLE_USER_HOME)
displayName: Gradle build cache
- task: Cache@2
inputs:
key: 'konan | "$(Agent.OS)" | cache'
restoreKeys: konan
path: $(KONAN_USER_HOME)
displayName: Konan build cache
- task: Cache@2
inputs:
key: 'ndk | "$(Agent.OS)"'
restoreKeys: ndk
path: $(NDK_HOME)/ndk
displayName: NDK build cache
很有魅力
另一种方法 动态创建变量
steps:
- bash: env
displayName: env vars
- bash: echo "##vso[task.setvariable variable=ANDROID_SDK_ROOT;]$ANDROID_SDK_ROOT"
- task: Cache@2
inputs:
key: 'ndk | "$(Agent.OS)"'
restoreKeys: ndk
path: $(ANDROID_SDK_ROOT)/ndk
displayName: NDK build cache
以同样的方式工作