[英]Dynamically add an Android project dependency during Jenkins build
我目前有一個構建我的 Android APK 的 Jenkins 管道。 我正在努力尋找一種在構建過程中動態添加依賴項的好方法。
我不想更改主存儲庫中當前的 build.grade 文件:
dependencies {
api 'androidx.appcompat:appcompat:1.1.0'
...
}
我有一個來自另一個私有存儲庫的依賴項:
api 'com.private.library:some-library:1.0'
是否可以從 Jenkins 管道訪問 build.gradle 文件依賴項並動態添加依賴項? 我可以將當前的 android 項目包裝在另一個包含依賴項的 gradle 文件中嗎? 或者可能是在構建時添加依賴項的另一種好方法?
根據您的管道的定義方式。您可以在克隆存儲庫之后和構建 apk 之前,在管道中添加一個運行 shell 命令的步驟。 例如,如果在 linux 上運行,則使用 sed 添加要添加的行。
stages {
stage('Clone repo') {...}
stage('Add dependency') {
steps {
sh '''
sed -i "/api 'androidx.appcompat:appcompat:1.1.0'/a api 'com.private.library:some-library:1.0'" ./path/to/build.gradle
'''
}
}
stage('Build') {...}
}
這將在 appcompat 依賴項之后的新行上添加私有 repo 依賴項。
編輯:如果你想用這種方法 go ,這個命令可能是一個更好的選擇。
echo "dependencies { api 'com.private.library:some-library:1.0' }" >> path/to/build.gradle
此命令沒有 sed 文本依賴項(在主倉庫中更改原始 build.gradle 的情況下風險較小)。 它只是在文件末尾添加了另一個包含您的私有 repo 依賴項的依賴項塊。 您可以在同一個文件中定義多個依賴塊,因此如果定義了其他依賴項也沒問題,它不會覆蓋。
通過將這兩個字符串插入到build.gradle's
defaultConfig 中解決了問題:
def env = System.getenv()
versionName "1." + env['BUILD_NUMBER']
代替
versionName "1.0"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.