Jenkins上配置Git拉取子Module代碼并且執(zhí)行Ndk編譯相關

先提前生成ssh key私鑰文件,因為Jenkins命令行執(zhí)行需要配置免密拉取代碼,比如我生成文件為:id_rsa_gitee726

以下腳本內(nèi)容是在Jenkins里面的Build—>Execute Windows batch command添加 windows 腳本內(nèi)容,下面代碼內(nèi)容均是
首先在環(huán)境變量配置 git 的環(huán)境變量,確保在命令行中 git.exe 命令能用
后面腳本中%ANDROID_SDK_ROOT%或%CATALINA_TMPDIR%這種帶%號的都是變量,有些是環(huán)境變量,copy 使用時需要注意自己的變量

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

Jenkins在 windows 執(zhí)行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 設置環(huán)境變量!
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 版本,根據(jù)構建日志報錯需求版本來定
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 版本,根據(jù)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% 不存在,已創(chuàng)建。
        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

最后執(zhí)行assembleDebug --stacktrace --info構建即可

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容