先提前生成ssh key私鑰文件,因為Jenkins命令行執(zhí)行需要配置免密拉取代碼,比如我生成文件為:id_rsa_gitee726
- 生成參考這個鏈接:https://help.gitee.com/base/account/SSH%E5%85%AC%E9%92%A5%E8%AE%BE%E7%BD%AE#%E7%94%9F%E6%88%90-ssh-%E5%85%AC%E9%92%A5
- 主要語句為:
ssh-keygen -t ed25519 -C "Gitee SSH Key"
以下腳本內(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構建即可