Jenkins上配置Git拉取子Module代码并且执行Ndk编译相关

先提前生成ssh key私钥文件,因为Jenkins命令行执行需要配置免密拉取代码,比如我生成文件为:id_rsa_gitee726

以下脚本内容是在Jenkins里面的Build—>Execute Windows batch command添加 windows 脚本内容,下面代码内容均是
首先在环境变量配置 git 的环境变量,确保在命令行中 git.exe 命令能用
后面脚本中%ANDROID_SDK_ROOT%或%CATALINA_TMPDIR%这种带%号的都是变量,有些是环境变量,copy 使用时需要注意自己的变量

Jenkins最前面的Source Code Management配置:git@gitee.com:xx_development/xxxxxAndroid.git

Jenkins在 windows 执行git命令行还需要配置权限等问题

@echo off
echo 前期权限准备!!
set sshKeyPath=%rootDish%\development\\id_rsa_gitee726
icacls "%sshKeyPath%"
icacls "%sshKeyPath%" /reset
icacls "%sshKeyPath%" /inheritance:r
icacls "%sshKeyPath%" /grant "%USERNAME%:(R,W)"
icacls "%sshKeyPath%" /remove:g "NT AUTHORITY\Authenticated Users"
icacls "%sshKeyPath%" /remove "BUILTIN\Administrators"
icacls "%sshKeyPath%" /remove "BUILTIN\Users"
icacls "%sshKeyPath%" /remove "NT AUTHORITY\SYSTEM"
icacls "%sshKeyPath%" /remove "NT AUTHORITY\Authenticated Users"
icacls "%sshKeyPath%"
ssh-add %sshKeyPath%
echo 不通过交互式提示接受主机密钥!
git config --global --get core.sshCommand
git config --global core.sshCommand "ssh -i %sshKeyPath%"
git config --global --get core.sshCommand
echo 设置环境变量!
ssh -T git@gitee.com
set GIT_SSH_COMMAND="ssh -i %sshKeyPath%"
echo 启用长路径支持!
git.exe config --global core.longpaths true
pause

脚本切换主工程目录更新代码

@echo off
echo 拉取C++项目对应子module!!
git.exe submodule foreach --recursive 'git reset --hard && git clean -fdx'
git.exe submodule update --init --recursive --force
pause

脚本切换主工程子目录更新代码

@echo off
echo 切换到C++项目对应分支!!
cd xxxxxAndroid/app/src/main/cpp
git.exe checkout xxxxx-android
git.exe pull origin xxxxx-android
pause

还需要拉取指定CMake版本后相关才可构建

@echo off
setlocal

REM 指定 CMake 版本,根据构建日志报错需求版本来定
set "CMAKE_VER=3.31"
set "CMAKE_VERSION=%CMAKE_VER%.6"
set "CMAKE_DIR=%ANDROID_SDK_ROOT%//cmake//%CMAKE_VERSION%"
set "CMAKE_URL=https://cmake.org/files/v%CMAKE_VER%/cmake-%CMAKE_VERSION%-windows-x86_64.zip"
set "CMAKE_ZIP=%CATALINA_TMPDIR%\cmake-%CMAKE_VERSION%.zip"
set "PROP_FILE=local.properties"
REM 指定 NinJa 版本,根据https://github.com/ninja-build/ninja/releases/最新版本来定
set "NINJA_VERSION=1.13.0"
set "NINJA_DIR=%CMAKE_DIR%//bin"
set "NINJA_URL=https://github.com/ninja-build/ninja/releases/download/v%NINJA_VERSION%/ninja-win.zip"
set "NINJA_ZIP=%CATALINA_TMPDIR%\ninja-%NINJA_VERSION%.zip"

REM 检查 CMake 是否已安装
if exist "%CMAKE_DIR%//bin//cmake.exe" (
    echo CMake 已安装在 %CMAKE_DIR%
    goto ninJaLogic
    exit /b 0
)

REM 下载 CMake
echo 正在下载 CMake %CMAKE_VERSION%...
powershell -Command "Invoke-WebRequest -Uri '%CMAKE_URL%' -OutFile '%CMAKE_ZIP%'"
if errorlevel 1 (
    echo 下载 CMake 失败!
    exit /b 1
)

REM 解压 CMake
echo 正在解压 CMake...
powershell -Command "Expand-Archive -Path '%CMAKE_ZIP%' -DestinationPath '%CATALINA_TMPDIR%'"
if errorlevel 1 (
    echo 解压 CMake 失败!
    exit /b 1
)

REM 移动 CMake 并重命名文件夹
if exist "%CATALINA_TMPDIR%//cmake-%CMAKE_VERSION%-windows-x86_64" (
    move /Y "%CATALINA_TMPDIR%//cmake-%CMAKE_VERSION%-windows-x86_64" "%CMAKE_DIR%"
)

REM 删除 CMake 压缩包
del "%CMAKE_ZIP%"

echo CMake %CMAKE_VERSION% 安装完成,路径:%CMAKE_DIR%
goto ninJaLogic

:ninJaLogic
    REM 检查 NinJa 是否已安装
    if exist "%NINJA_DIR%//ninja.exe" (
        echo NinJa 已安装在 %NINJA_DIR%
        goto breaking
        exit /b 0
    )
    
    REM 下载 NinJa
    echo 正在下载 NinJa %NINJA_VERSION%...
    powershell -Command "Invoke-WebRequest -Uri '%NINJA_URL%' -OutFile '%NINJA_ZIP%'"
    if errorlevel 1 (
        echo 下载 NinJa 失败!
        exit /b 1
    )

    REM 解压 NinJa
    echo 正在解压 NinJa...
    powershell -Command "Expand-Archive -Path '%NINJA_ZIP%' -DestinationPath '%CATALINA_TMPDIR%'"
    if errorlevel 1 (
        echo 解压 NinJa 失败!
        exit /b 1
    )
    
    REM 移动 NinJa 并重命名文件
    if exist "%CATALINA_TMPDIR%//ninja.exe" (
        move /Y "%CATALINA_TMPDIR%//ninja.exe" "%NINJA_DIR%"
    )
    
    REM 删除 NinJa 压缩包
    del "%NINJA_ZIP%"

    echo NinJa %NINJA_VERSION% 安装完成,路径:%NINJA_DIR%

    goto breaking
    pause
    exit

:breaking
    cd QyVpn
    REM 判断 local.properties 是否存在
    if not exist "%PROP_FILE%" (
        echo %PROP_FILE% 不存在,已创建。
        echo cmake.dir=%CMAKE_DIR% > "%PROP_FILE%"
        goto :eof
    )
    
    REM 检查是否已有 cmake.dir
    findstr /b /c:"cmake.dir=" "%PROP_FILE%" >nul
    if %errorlevel%==0 (
        REM 有,更新
        REM 用临时文件存储替换结果
        (for /f "usebackq delims=" %%a in ("%PROP_FILE%") do (
            echo %%a | findstr /b /c:"cmake.dir=" >nul
            if not errorlevel 1 (
                echo cmake.dir=%CMAKE_DIR%
            ) else (
                echo %%a
            )
        )) > "%PROP_FILE%.tmp"
        move /Y "%PROP_FILE%.tmp" "%PROP_FILE%" >nul
        echo 已更新 cmake.dir 到 %CMAKE_DIR%
    ) else (
        REM 没有,追加
        echo cmake.dir=%CMAKE_DIR% >> "%PROP_FILE%"
        echo 已新增 cmake.dir 到 %CMAKE_DIR%
    )

    pause
    exit

endlocal

最后执行assembleDebug --stacktrace --info构建即可

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容