先提前生成ssh key私钥文件,因为Jenkins命令行执行需要配置免密拉取代码,比如我生成文件为: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"
以下脚本内容是在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
构建即可