持续集成测试#
如果你的项目依赖于 SUMO,那么保持与较新 SUMO 版本的兼容性可能会成为一个问题。 虽然我们努力保持向后兼容性,但仍可能会为你的项目引入破坏性更改。 由于我们不可能测试所有依赖于 SUMO 的项目的集成,因此本文档将协助你为你的项目设置 CI 测试。
使用 GitHub Actions#
执行 CI 测试的一种流行方法是创建 GitHub Actions 工作流。
GitHub Actions 工作流由 GitHub master/main 分支中 .github/workflows 目录下的 YAML 文件定义。
下面,我们将通过一个示例工作流(来自 Veins 项目)进行讲解,并对代码进行注释(有关完整的 GitHub Actions 指南,请参阅官方文档):
name: linux-build # 工作流名称,显示在项目 GitHub 的 'Actions' 标签页下
on: # 定义触发此工作流运行的事件
push:
pull_request:
schedule:
- cron: '42 0 * * *'
jobs: # 定义要运行的独立作业
build: # 此作业的 ID
runs-on: ubuntu-latest # 运行此作业的 VM 类型
env: # 为此作业定义环境变量
OMNET_VERSION: 5.6.2
strategy: # 定义作业变体
fail-fast: false # 如果任何作业变体失败,不要取消所有正在进行的作业
matrix: # 定义变体参数及其值
sumo_build: [ubuntu, ppa, nightly]
steps: # 定义此作业的独立步骤
- name: Cloning Veins # 此步骤的名称
uses: actions/checkout@v2 # 此步骤使用的预定义且可重用的操作(参见 https://github.com/actions/checkout)
with: # 为预定义操作的参数设置值
path: src/veins
- name: Cloning OMNeT++
uses: actions/checkout@v2
with:
repository: omnetpp/omnetpp
ref: omnetpp-${{ env.OMNET_VERSION }} # 计算上面定义的环境变量 OMNET_VERSION
path: src/omnetpp
- name: Preparing Build System
run: | # 为此步骤定义一个自定义的多行命令(而不是可重用的操作)
if [[ "${{ matrix.sumo_build }}" == "ppa" ]]; then sudo add-apt-repository ppa:sumo/stable; fi
sudo apt-get update
sudo apt-get install build-essential gcc g++ bison flex perl python3 libxml2-dev zlib1g-dev default-jre doxygen graphviz
- name: Installing SUMO from repo
if: matrix.sumo_build != 'nightly' # 仅当条件为真时才运行此步骤
run: |
sudo apt-get install sumo sumo-tools
echo "SUMO_HOME=/usr/share/sumo" >> $GITHUB_ENV
- name: Installing SUMO from PyPI
if: matrix.sumo_build == 'nightly'
run: |
python -m pip install --index-url https://test.pypi.org/simple/ eclipse-sumo
python -c "import sumo; print('SUMO_HOME=' + sumo.SUMO_HOME)" >> $GITHUB_ENV
- name: Adapting PATH
run: |
echo "PATH=$PWD/src/omnetpp/bin:$SUMO_HOME/bin:$PATH" >> $GITHUB_ENV
cat $GITHUB_ENV
- name: Building OMNeT
run: |
cd src/omnetpp
cp configure.user.dist configure.user
./configure WITH_TKENV=no WITH_QTENV=no WITH_OSG=no WITH_OSGEARTH=no
make -j4
- name: Building Veins
run: |
cd src/veins
./configure
make -j4
- name: Running Veins Test
run: |
cd src/veins/examples/veins
echo $SUMO_HOME; sumo
../../bin/veins_launchd -vv --daemon -L veins_launchd.log
./run -u Cmdenv
- name: Upload Test log
if: ${{ always() }}
uses: actions/upload-artifact@v2 # 参见 https://github.com/actions/upload-artifact
with:
name: veins-${{ matrix.sumo_build }}.log
path: |
src/veins/examples/veins/veins_launchd.log
总而言之,工作流的基本结构由顶级代码块 name、on 和 jobs 组成,分别定义了工作流的名称、触发器和作业。
然后,你的项目的 CI 测试作业通常应遵循以下步骤:
1. 克隆所需的 git 仓库
2. 设置构建环境
3. 构建/安装
4. 运行测试脚本
虽然上面的示例中包含了一些对大多数(如果不是全部)项目的 CI 测试工作流都有用的通用步骤,但请注意它包含了一些特定于 Veins 的步骤,这些步骤需要根据你的项目需求进行调整。
