自动化测试平台搭建

Sunmy Lv5

自动化测试平台搭建

测试平台技术论证与实践

初步方案

需要2台服务器(a,b)均安装Ubuntu 2204,a作为Gitlab服务器,b作为Jenkins服务器,同时均安装docker作为镜像的部署工具。

存在问题

序号 问题简述 解决方案 当前状态
1 系统采用centos还是ubuntu ubuntu
2 采用docker方式安装配置Gitlab还有Jenkins,还是直接在系统上部署Gitlab,Jenkins?docker安装,便于部署,升级,但是目前只在单机上验证过部署Gitlab docker

基础环境配置

(下表将列出所有电脑通用环境配置)

软件名称 开放端口 软件版本
Docker Client/ Docker Compose —— 24.0.7
Git —— Docker version 24.0.7, build afdd53b
Portainer 19000 2.19.4

软件基本信息

软件名称 部署设备名称 开放端口 软件版本
Gitlab PC_02(192.168.2.136) 19980、19922、19443 16.7
Jenkins PC_01(192.168.2.105) 18080、50000 2.440
VsCode PC_01(192.168.2.105) 18000 1.4.0

硬件基本信息

设备名称(角色) 设备IP 系统信息
PC_01(Jenkins) 192.168.2.105 root@DESK-01:/home/qwea# uname -a Linux DESK-01 6.2.0-39-generic #40~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 16 10:53:04 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
PC_02(Gitlab) 192.168.2.136 root@DESK-02:~# uname -a Linux DESK-02 6.2.0-37-generic #38~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 2 18:01:13 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
server(Centos测试机) 192.168.2.135 root@server sqa# uname -a Linux server 4.18.0-348.7.1.el8_5.x86_64 #1 SMP Wed Dec 22 13:25:12 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux

系统初始化配置

Firefox配置

关闭 Firefox 的提示 “您必须先登录此网络才能访问互联网

  1. 在搜索地址栏输入about:config
  2. 搜索 network.captive-portal-service.enabled,并将值设为 false

系统更新

1
2
3
4
5
6
# 系统更新
apt update && apt-get update
apt upgrade && apt-get upgrade

# 安装必要基本软件
sudo apt-get install -y iputils-ping net-tools curl openssh-server vim

通用基础软件配置

MAKE GCC

1
2
3
4
5
6
7
8
9
10
root@DESK-01:/newFS# apt-get install -y make
root@DESK-01:/newFS# apt install -y build-essential manpages-dev
root@7fcd1a013aa4:/# apt install -y build-essential manpages-dev --fix-missing
root@DESK-01:/newFS# gcc --version
gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
Copyright (C) 2021 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

root@DESK-01:/newFS#

SSH

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 开启SSH
sudo systemctl start ssh

# 系统开机自起
sudo systemctl enable ssh

# 查看状态
sudo systemctl status ssh
防火墙配置
Bash
# 查看状态
root@DESK-02:/home/qwea# systemctl status ufw
● ufw.service - Uncomplicated firewall
Loaded: loaded (/lib/systemd/system/ufw.service; enabled; vendor preset: enabled)
Active: active (exited) since Tue 2024-01-09 16:39:51 CST; 17h ago
Docs: man:ufw(8)
Main PID: 590 (code=exited, status=0/SUCCESS)
CPU: 816us

1月 09 16:39:51 DESK-01 systemd[1]: Starting Uncomplicated firewall...
1月 09 16:39:51 DESK-01 systemd[1]: Finished Uncomplicated firewall.
root@DESK-02:/home/qwea#

# 查看开发端口
root@DESK-02:/home/qwea# netstat -aptn
激活Internet连接 (服务器和已建立连接的)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 648/systemd-resolve
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 868/cupsd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 13663/sshd: /usr/sb
tcp 0 0 0.0.0.0:19922 0.0.0.0:* LISTEN 14593/docker-proxy
tcp 0 0 0.0.0.0:19980 0.0.0.0:* LISTEN 14550/docker-proxy
tcp 0 0 0.0.0.0:19000 0.0.0.0:* LISTEN 17029/docker-proxy
tcp 0 0 0.0.0.0:19443 0.0.0.0:* LISTEN 14570/docker-proxy
tcp 0 0 192.168.2.136:22 192.168.2.105:35836 ESTABLISHED 56290/sshd: qwea [p
tcp 0 0 192.168.2.136:59410 34.120.208.123:443 ESTABLISHED 2493/firefox
tcp6 0 0 ::1:631 :::* LISTEN 868/cupsd
tcp6 0 0 :::22 :::* LISTEN 13663/sshd: /usr/sb
tcp6 0 0 :::19922 :::* LISTEN 14600/docker-proxy
tcp6 0 0 :::19980 :::* LISTEN 14557/docker-proxy
tcp6 0 0 :::19000 :::* LISTEN 17035/docker-proxy
tcp6 0 0 :::19443 :::* LISTEN 14577/docker-proxy
root@DESK-02:/home/qwea#

Docker安装

1
2
# 自动脚本安装
bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh)

Git

1
2
3
# add-apt-repository ppa:git-core/ppa 
# apt update;
# apt install git

Portainer

1
2
3
4
5
6
7
root@DESK-01:/newFS/docker# docker run -d \
-p 19000:9000 \
--name=portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--privileged=true \
portainer/portainer-ce:latest

Gitlab

Docker Client(推荐)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 运行镜像
docker run -itd \
-p 19443:443 \
-p 19980:80 \
-p 19922:22 \
-u root \
-v /newFS/docker/gitlab/data/log:/var/log/gitlab \
-v /newFS/docker/gitlab/data/opt:/var/opt/gitlab \
-v /newFS/docker/gitlab/data/etc:/etc/gitlab \
--restart=unless-stopped \
--name=gitlab \
gitlab/gitlab-ce

# 查看密码
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
Docker Compose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 1 创建Docker配置文件
mkdir /srv/docker/gitlab
cd /srv/docker/gitlab
chmod -R a+w /srv/docker/gitlab/
# 2 编辑Docker File
vim docker-compose.yml

version: '3.1'
services:
gitlab:
image: 'gitlab/gitlab-ce:latest'
container_name: gitlab
restart: always
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.11.11:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8929:8929'
- '2224:2224'
volumes:
- './config:/etc/gitlab'
- './logs:/var/log/gitlab'
- './data:/var/opt/gitlab'

# 3 启动镜像
docker-compose up -d

Jenkins

Docker Client(推荐)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
docker run -itd \
-p 18080:8080 \
-p 50000:50000 \
-u root \
-v /newFS/docker/jenkins/jenkins_home:/var/jenkins_home \
-v /etc/localtime:/etc/localtime \
--restart=unless-stopped \
--name=jenkins \
jenkins/jenkins

# 也可以通过以下方式修改时区,暂未验证
docker rm -f jenkins

docker run -itd \
-p 18080:8080 \
-p 50000:50000 \
-u root \
-v /newFS/docker/jenkins/jenkins_home:/var/jenkins_home \
-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai \
--restart=unless-stopped \
--name=jenkins \
jenkins/jenkins
Docker Compose
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 1 创建Docker配置文件
mkdir /srv/docker/jenkins
cd /srv/docker/jenkins
chmod -R a+w /srv/docker/jenkins/
# 2 编辑Docker File
vim docker-compose.yml

version: "3.1"
services:
jenkins:
image: jenkins/jenkins
container_name: jenkins
ports:
- 8080:8080
- 50000:50000
volumes:
- ./data/:/var/jenkins_home/

# 3 启动镜像
docker-compose up -d

# 4 查看密码登录Jenkins
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword


# 4 更新下载地址
# 修改数据卷中的hudson.model.UpdateCenter.xml文件
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>https://updates.jenkins.io/update-center.json</url>
</site>
</sites>
# 将下载地址替换为http://mirror.esuni.jp/jenkins/updates/update-center.json
<?xml version='1.1' encoding='UTF-8'?>
<sites>
<site>
<id>default</id>
<url>http://mirror.esuni.jp/jenkins/updates/update-center.json</url>
</site>
</sites>
# 清华大学的插件源也可以https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

VsCode

Docker Client
1
2
3
4
5
6
7
8
9
10
11
docker run -d \
--privileged \
--restart=always \
--name vscode-server \
-p 18000:8000 \
-e PASSWORD=code-server \
-e SUDO_PASSWORD=root \
-e VSCODE_KEYRING_PASS="vscode" \
-e VSCODE_SERVE_MODE=serve-local \
-v /newFS/docker/vscode-server:/root/code/vscode-server \
ahmadnassri/vscode-server:1.4.0
系统初始化
1
2
3
gcc -v
apt update && apt-get update
apt-get install -y build-essential gdb iputils-ping net-tools vim
Git配置
1
2
3
4
5
# 配置提交用户名
git config --global user.name "test01"

# 配置提交用户邮箱
git config --global user.email "test01@sqa-chn.com"
拉取项目
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@f0a5b14e4336:~/code/vscode-server/GitProjects# 
root@f0a5b14e4336:~/code/vscode-server/GitProjects# git clone http://192.168.2.136:19980/root/test.git
Cloning into 'test'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.
root@f0a5b14e4336:~/code/vscode-server/GitProjects# ^C
root@f0a5b14e4336:~/code/vscode-server/GitProjects# ls
test
root@f0a5b14e4336:~/code/vscode-server/GitProjects# cd test/
root@f0a5b14e4336:~/code/vscode-server/GitProjects/test# ls
README.md
root@f0a5b14e4336:~/code/vscode-server/GitProjects/test#

搭建过程问题记录

Docker overlay2迁移

docker部署应用过程中,默认会在 /var/lib/docker 下新建overlay2数据卷,占用存储空间,解决方法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 如果系统原有硬盘空间不足可以通过挂载额外硬盘的方式增加存储空间
# 如果原有空余硬盘存,应先考虑对其进行分区,格式化,然后再挂载到指定目录
root@DESK-02:~# fdisk /dev/sda
# 上述命令执行后会得到一个 /dev/sda1 的分区
root@DESK-02:~# mkfs.ext4 /dev/sda1
# 挂载到指定目录
root@DESK-02:~# mdkir /newFS
root@DESK-02:~# mount /dev/sda1 /newFS

# 查看docker的存储目录
root@DESK-02:~# docker info | grep "Docker Root Dir"
Docker Root Dir: /var/lib/docker
root@DESK-02:~# systemctl stop docker
Warning: Stopping docker.service, but it can still be activated by:
docker.socket
root@DESK-02:~# mkdir -p /newFS/var/lib/docker
root@DESK-02:~# cp -r /var/lib/docker/* /newFS/var/lib/docker
root@DESK-02:~# vim /etc/docker/daemon.json
root@DESK-02:~#
root@DESK-02:~#
root@DESK-02:~# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.cn-beijing.aliyuncs.com"],
"data-root": "/newFS/var/lib/docker",
"storage-driver": "overlay2"
}
root@DESK-02:~#
root@DESK-02:~#
root@DESK-02:~# systemctl daemon-reload
root@DESK-02:~# systemctl start docker.service
root@DESK-02:~# systemctl enable docker.service
root@DESK-02:~#
root@DESK-02:~#
root@DESK-02:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
687838d398ec jenkins/jenkins "/usr/bin/tini -- /u…" 2 hours ago Up 4 seconds 0.0.0.0:50000->50000/tcp, :::50000->50000/tcp, 0.0.0.0:18080->8080/tcp, :::18080->8080/tcp jenkins
root@DESK-02:~#
root@DESK-02:~#
root@DESK-02:~# docker info | grep "Docker Root Dir"
Docker Root Dir: /newFS/var/lib/docker
root@DESK-02:~#

Gitlab http 克隆地址更改为本地IP

docker部署Gitlab之后系统仓库克隆地址会变为字符串,并非实际IP地址:自定义端口,解决方法如下

通过映射配置目录修改gitlab.rb配置配置文件

1
2
3
4
5
6
7
8
9
10
11
root@DESK-02:/# find /newFS/docker/gitlab/ -name gitlab.rb
root@DESK-02:/# vim /newFS/docker/gitlab/data/etc/gitlab.rb
# 修改以下配置文件
#+++++++++++++++++++++++++++++++++++++++++++++++++++++
external_url 'http://192.168.2.136:19980'

nginx['listen_port'] = 80
#+++++++++++++++++++++++++++++++++++++++++++++++++++++

# 重启Gitlab
root@DESK-02:/# docker restart gitlab

按以上配置的效果是可以使用端口访问gitlab的web服务

直接修改Gitlab容器内的配置文件(此方法未解决,容器重启后依然会出现)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 进入Gitlab容器修改配置文件后重启
root@DESK-02:/home/qwea# docker exec -it gitlab /bin/bash
root@963e760bd6b3:/# cd /opt/gitlab/embedded/service/gitlab-rails/config
root@963e760bd6b3:/opt/gitlab/embedded/service/gitlab-rails/config# pwd
/opt/gitlab/embedded/service/gitlab-rails/config
root@963e760bd6b3:/opt/gitlab/embedded/service/gitlab-rails/config# vi gitlab.yml
root@963e760bd6b3:/opt/gitlab/embedded/service/gitlab-rails/config#
root@963e760bd6b3:/opt/gitlab/embedded/service/gitlab-rails/config# gitlab-ctl restart
ok: run: alertmanager: (pid 32374) 0s
ok: run: gitaly: (pid 32392) 0s
ok: run: gitlab-exporter: (pid 32428) 1s
ok: run: gitlab-kas: (pid 32441) 0s
ok: run: gitlab-workhorse: (pid 32457) 0s
ok: run: logrotate: (pid 32479) 1s
ok: run: nginx: (pid 32485) 0s
ok: run: postgres-exporter: (pid 32513) 1s
ok: run: postgresql: (pid 32522) 0s
ok: run: prometheus: (pid 32524) 0s
ok: run: puma: (pid 32559) 1s
ok: run: redis: (pid 32564) 0s
ok: run: redis-exporter: (pid 32573) 1s
ok: run: sidekiq: (pid 32589) 0s
ok: run: sshd: (pid 32595) 0s
root@963e760bd6b3:/opt/gitlab/embedded/service/gitlab-rails/config#
root@963e760bd6b3:/opt/gitlab/embedded/service/gitlab-rails/config#
root@963e760bd6b3:/opt/gitlab/embedded/service/gitlab-rails/config# cat gitlab.yml
# This file is managed by gitlab-ctl. Manual changes will be
# erased! To change the contents below, edit /etc/gitlab/gitlab.rb
# and run `sudo gitlab-ctl reconfigure`.

production: &base
#
# 1. GitLab app settings
# ==========================

## GitLab settings
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: 192.168.2.136 // 修改为实际地址
port: 19980 // 修改为实际端口
https: false

Docker创建测试环境

Ubuntu

1
2
3
4
5
6
7
8
9
10
# ubuntu2204
docker run -itd --user=root \
-v /newFS/docker/ubuntu_2204:/root \
--name=ubuntu_2204 \
ubuntu:22.04

docker run -itd --user=root \
-v /newFS/docker/ubuntu_arm64v8:/root \
--name=ubuntu_arm64v8 \
arm64v8/ubuntu

Centos

现有的环境中Jenkins容器编译好的结果文件,放在Ubuntu2204上测试没有问题,但是放在Centos8上执行出现GLIBC版本错误

1
2
3
[root@server sqa]# ./all_test 
./all_test: /lib64/libc.so.6: version `GLIBC_2.34' not found (required by ./all_test)
[root@server sqa]#
  1. 分析错误信息可以知道在Centos8上执行二进制文件(all_test),需要glibc的版本至少为GLIBC_2.34,而现在系统上的glibc版本低于执行文件需要的版本
  2. 查看测试过程中所有设备的glibc版本
设备名称 GLIBC版本 GLIBC版本详细信息
DESK-01 2.35 root@DESK-01:~# ldd --version ldd (Ubuntu GLIBC 2.35-0ubuntu3.6) 2.35
DESK-02 2.35 root@DESK-02:~# ldd --version ldd (Ubuntu GLIBC 2.35-0ubuntu3.5) 2.35
server 2.28 [root@server sqa]# ldd --version ldd (GNU libc) 2.28
Gitlab 2.35 root@963e760bd6b3:/# ldd --version ldd (Ubuntu GLIBC 2.35-0ubuntu3.5) 2.35
Jenkins 2.36 root@7fcd1a013aa4:/# ldd --version ldd (Debian GLIBC 2.36-9+deb12u3) 2.36
VsCode 2.37 root@f0a5b14e4336:/# ldd --version ldd (Ubuntu GLIBC 2.37-0ubuntu2.2) 2.37
  1. 解决方法
    a. 更新测试机中GLIBC的版本(glibc是系统级别的库,全局更新,风险较大)
    b. 按照测试机中的GLIBC版本重新编译文件(测试系统中存在过多环境版本,增加管理成本)
    c. 交叉编译?

使用交叉编译适配不同架构测试环境

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
root@DESK-01:/newFS/data/x86_64# tar -xvf gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu.tar.xz 
root@DESK-01:/newFS/data/x86_64# vim /etc/profile
# 加入下面内容
export PATH=$PATH:/newFS/data/x86_64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin

# 验证
root@DESK-01:/newFS/data/x86_64# root@DESK-01:/newFS/data/x86_64# aarch64-none-linux-gnu-gcc -v
使用内建 specs。
COLLECT_GCC=aarch64-none-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/newFS/data/x86_64/gcc-arm-10.3-2021.07-x86_64-aarch64-none-linux-gnu/bin/../libexec/gcc/aarch64-none-linux-gnu/10.3.1/lto-wrapper
目标:aarch64-none-linux-gnu
配置为:/data/jenkins/workspace/GNU-toolchain/arm-10/src/gcc/configure --target=aarch64-none-linux-gnu --prefix= --with-sysroot=/aarch64-none-linux-gnu/libc --with-build-sysroot=/data/jenkins/workspace/GNU-toolchain/arm-10/build-aarch64-none-linux-gnu/install//aarch64-none-linux-gnu/libc --with-bugurl=https://bugs.linaro.org/ --enable-gnu-indirect-function --enable-shared --disable-libssp --disable-libmudflap --enable-checking=release --enable-languages=c,c++,fortran --with-gmp=/data/jenkins/workspace/GNU-toolchain/arm-10/build-aarch64-none-linux-gnu/host-tools --with-mpfr=/data/jenkins/workspace/GNU-toolchain/arm-10/build-aarch64-none-linux-gnu/host-tools --with-mpc=/data/jenkins/workspace/GNU-toolchain/arm-10/build-aarch64-none-linux-gnu/host-tools --with-isl=/data/jenkins/workspace/GNU-toolchain/arm-10/build-aarch64-none-linux-gnu/host-tools --enable-fix-cortex-a53-843419 --with-pkgversion='GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29)'
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 10.3.1 20210621 (GNU Toolchain for the A-profile Architecture 10.3-2021.07 (arm-10.29))
root@DESK-01:/newFS/data/x86_64#

用户名密码管理

软件名称 访问地址 用户名 密码 备注
Gitlab http://192.168.2.136:19980/ root 1234qwer
Gitlab http://192.168.2.136:19980/ test01 1234qwer 提交代码过程建议使用测试用户,非必要不使用root用户
Jenkins http://192.168.2.105:18080/ root 1234qwer
VsCode http://192.168.2.105:18000/ —— ——
Portainer http://192.168.2.105:19000/ admin 1234qwer@qwea
Portainer http://192.168.2.136:19000/ admin 1234qwer@qwea

项目配置

Gitlab项目配置

用户管理

用户注册模板

image.png

项目仓库管理

管理员设置项目仓库用户权限

如果想要Gitlab项目中的用户具有代码拉取推送的权限,需要设置为Maintainer的权限
image.png

Jenkins项目配置

容器配置

1
2
3
4
5
6
# 系统更新
apt update && apt-get update
apt upgrade && apt-get upgrade

# 安装必要基本软件
sudo apt-get install -y iputils-ping net-tools curl openssh-server vim

Publish Over SSH

  1. 进入系统主页后,依次选择系统管理、插件管理
    image.png
  2. 选择可用插件(Available plugins),搜索Publish Over SSH 点击安装
    image.png
  3. 安装后可在已安装插件(Installed plugins)里查看到
    image.png

配置SSH服务器

  1. 进入系统主页后,依次选择系统管理、系统配置
    image.png
  2. 设置SSH Servers
    image.png

Docker Pipeline

  1. 参考上述插件安装过程,进入系统主页后,依次选择系统管理、插件管理,
    选择可用插件(Available plugins),搜索Docker Pipeline点击安装
  2. 配置流水线语法
1
2
3
4
5
6
7
8
9
10
11
12
pipeline {
agent {
docker { image 'node:6.3' }
}
stages {
stage('build') {
steps {
sh 'npm --version'
}
}
}
}
  1. 如果想使用docker镜像作为基础环境,需要系统具备docker环境,且安装了使用的镜像
  2. 上述过程中可能会出现,Jenkins用户和docker用户权限不足的问题,解决方法如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Pipeline Console Outp
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/test
[Pipeline] {
[Pipeline] isUnix (hide)
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker inspect -f . node:6.3

permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/containers/node:6.3/json": dial unix /var/run/docker.sock: connect: permission denied
[Pipeline] isUnix
[Pipeline] withEnv
[Pipeline] {
[Pipeline] sh
+ docker pull node:6.3
permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/images/create?fromImage=node&tag=6.3": dial unix /var/run/docker.sock: connect: permission denied
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE


# 1 将 Jenkins 用户添加到 Docker 组:
sudo usermod -aG docker jenkins
# 注意:jenkins 是默认情况下 Jenkins 进程运行的用户名。如果您的 Jenkins 进程使用不同的用户,请替换为相应的用户名。

# 2 重新启动 Jenkins: 重启 Jenkins 以使组成员身份更改生效。
sudo service jenkins restart

# 3 确认 Docker 组成员身份:
groups jenkins

# 4 重新运行 Jenkins Pipeline:
重新运行您的 Jenkins Pipeline,看看是否解决了 Docker 权限问题。

自由风格软件项目Demo

  1. 选择自由风格创建项目,输入项目名,点击确定
    image.png
  2. 选择General 进行配置
    设置丢弃旧的构建,保持5天构建,最大构建7个(根据需要自行设置)
    image.png
  3. 选择源码管理 添加仓库地址,第1次添加Git仓库地址可能出现如下错误
    image.png

a. 点击 添加,选择Jenkins
image.png

b. 配置Jenkins 选择具有Gitlab仓库权限的用户名密码,其他根据需要自行决定,添加完成后点击Credentials,选择成功添加的凭据、选择要构建的分支
image.png

c. 重新回到源码管理页面选择设置好的Credentials
image.png

  1. 根据需要配置构建触发器
  2. 根据需要配置构建环境
  3. 选择Build Steps,点击增加构建步骤,可根据需要选择执行shell或Send files or execute commands over SSH等。
    image.png

a. 选择执行shell,在Jenkins中执行make命令,构建项目
b. 选择执行shell,在Jenkins中执行make命令,对编译后的结果文件增加执行权限
c. 选择 Send files or execute commands over SSH,将Jenkins编译好的需要的结果文件传输到远程服务器
image.png

  1. 选择构建后操作,点击增加构建后操作步骤,可根据需要选择Send build artifacts over SSH等。
    a. 选择Send build artifacts over SSH,在远程服务器上执行命令,自动保存log
    image.png

b. 预先配置好要执行的远程脚本如下,自动执行结果文件并保存到指定文件
image.png

流水线项目Demo

  1. 选择自由风格创建项目,输入项目名,点击确定
    image.png
  2. 选择General 进行配置
    设置丢弃旧的构建,保持5天构建,最大构建7个(根据需要自行设置)
    image.png
  3. 根据需要配置构建触发器
  4. 根据需要配置高级项目选项
  5. 选择流水线,根据需要选择流水线语法进行配置
    a. 从Gitlab拉取测试仓库,选择步骤,点击checkout: Check out from version control,输入Repository URL、Credentials、指定分支后点击生成流水线脚本
    image.png
    image.png
  6. 在Jenkins上执行make命令编译仓库内的文件
    image.png
    image.png
  7. 传输结果文件到远程服务器
    image.png
    image.png
  8. 在远程服务器执行命令,自动保存log
    image.png
    image.png
  9. 流水线项目Demo脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
pipeline {
agent any

stages {
stage('Pull Code') {
steps {
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'Gitlab_test_01', url: 'http://192.168.2.136:19980/root/test.git']])
}
}
stage("Make"){
steps{
sh "make"
}
}
stage("Send"){
steps{
sshPublisher(publishers: [sshPublisherDesc(configName: 'DESK-02', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/home/qwea/target', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'all_test,test_control_remote.sh')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
stage("Remote Exec"){
steps{
sshPublisher(publishers: [sshPublisherDesc(configName: 'DESK-02', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /home/qwea/target
chmod +x ./*
./test_control_remote.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}

SSH Key(暂未确定SSH Key是否跟远程服务器上传有关)

Jenkines主机生成密钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# jenkines主机生成ssh密钥
root@DESK-01:~# ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:c1tNQlP4nTnUcQDOPCogkPb0b9sXh0uXOUeIG8jvqPA root@DESK-01
The key's randomart image is:
+---[RSA 2048]----+
| .. ++oo+|
| o.. =.. .o|
| . o... . .*oooo|
| .... o.o=o+o|
| .S o..+.+.|
| o+ o* * .|
| .. o.+ = o |
| o. o + |
| E. . |
+----[SHA256]-----+
root@DESK-01:~#

Gitlab主机生成密钥

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
root@DESK-02:~# ssh-keygen -t rsa -b 2048
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa
Your public key has been saved in /root/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:3HbOx0epxu6jwPqd5UtLwillne004jUawWmF4MPOToo root@DESK-02
The key's randomart image is:
+---[RSA 2048]----+
| .. .. |
| o ..o |
| + = |
| . .o + + .|
| S o*.= B.|
| o.B++.O.o|
| E = =oXo..|
| . + Xo.. |
| ... +o*o |
+----[SHA256]-----+
root@DESK-02:~#

VsCode 容器生成密钥

将客户端主机密钥添加到要连接的服务端主机上

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1. ubuntu 默认禁止root通过ssh登陆,需要先修改如下配置
root@DESK-02:~/.ssh# vim /etc/ssh/sshd_config

#++++++++++++++++++++++++++++++++++++++++++++++++++++++
#LoginGraceTime 2m
PermitRootLogin yes
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#++++++++++++++++++++++++++++++++++++++++++++++++++++++

# 修改完成后,重启ssh服务
root@DESK-02:~/.ssh# systemctl restart ssh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
pipeline {
agent any

stages {
stage('拉取代码') {
steps {
checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'Gitlab_test_01', url: 'http://192.168.2.136:19980/root/test.git']])
}
}
stage('编译代码') {
steps {
sh "pwd"
sh "uname -a"
sh "ls"
sh "make --version"
sh "gcc --version"
echo "========"
sh "make"
echo "========"
echo "./all_test"
sh "./all_test"
}
}
stage('传输执行文件'){
steps{
echo "传输执行文件"
// sh "scp all_test root@192.168.2.136:/root"
}
}
}

}

Slave 节点管理

  1. Jenkins的任务可以分布在不同的节点上运行
  2. 节点上需要配置Java运行时化境,Java_Version > 1.5
  3. 节点支持WIndows,Linux, Max
  4. Jenkins运行的主机在逻辑上是master节点
    image.png
添加节点

系统管理 》 节点管理

使用手册

测试流程管理

image.png

CI/CD流程

image.png

代码仓库管理

在Gitlab上依据3.3.2 安全车控操作系统测评能力要求中的测试分类新建不同的代码仓库,分别是协议符合性(ProtocolConformance)、功能(Function)、性能(Performance)、可靠性(Reliability)、专项测试(SpecialTest)、功能安全(FunctionalSafety)
以上所有仓库新建main、dev、test分支,除系统管理员外,所有人员只有往test分支提交或拉取代码的权限,禁止操作main分支和dev分支,系统管理员可以管理审核test分支上的代码确认无误后提交到dev分支,进行CICD操作,CICD验证无误后,可以将代码合并到main分支。

人员角色权限管理

  1. 系统管理员 代码审核,仓库管理
  2. 开发
  3. 测试
  4. 维护
  • 标题: 自动化测试平台搭建
  • 作者: Sunmy
  • 创建于 : 2025-05-07 13:35:54
  • 更新于 : 2025-06-29 21:05:24
  • 链接: https://ldspdvsun.github.io/cmchvp8fm0006h0gbfoglcp7k/
  • 版权声明: 版权所有 © Sunmy,禁止转载。
评论