在Jenkins构建期间动态添加Android项目依赖项

时间:2019-10-21 00:55:25

标签: android jenkins gradle jenkins-pipeline

我目前有一个构建我的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文件中吗?还是在构建时添加依赖项的另一种好方法?

1 个答案:

答案 0 :(得分:2)

取决于管道的定义方式。在克隆存储库之后和构建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依赖项之后的新行上添加私有回购依赖项。

编辑: 如果您想使用这种方法,则此命令可能是一个更好的选择。

echo "dependencies { api 'com.private.library:some-library:1.0' }" >> path/to/build.gradle 

此命令没有sed文本依赖性(如果在主存储库中更改了原始build.gradle,则风险较小)。它只是在文件末尾添加了另一个带有私有回购依赖项的依赖项块。您可以在同一个文件中定义多个依赖项块,因此如果定义了其他依赖项也没问题,它将不会被覆盖。