我最近接触了 Gitlab CI/CD,目前正在学习如何优化我们的开发的不同方法。
我们正在研究各种嵌入式软件项目(对各种 MCU 进行编程)。
每次我们准备好执行发布时,我们都希望运行自动化的硬件级别测试(切换 GPIO 引脚、向设备发送一些串行命令等)。为此,我们有自己的 Python 工具,并且可以使用命令行运行它。
为了自动化此过程,我设置了一个简单的 Raspberry PI 4(安装了 gitlab-runner,并为我的 gitlab 项目设置了 shell 执行器)。跑步者配置:
concurrent = 1
check_interval = 0
shutdown_timeout = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "Raspberry PI TestTool runner"
url = "https://xxx-gitlab=xxxxxxx.lt/"
id = 12
token = "XXXXXXXXXXXXXXXX"
token_obtained_at = 2024-01-02T07:51:55Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "shell"
shell = "bash"
我的管道如下:
# List of stages for jobs, and their order of execution
stages:
- test
test-job1:
stage: test
script:
- echo "This job tests something"
- ls -l
- cd ~
- ls -l
- cat Desktop/test.txt
正如您从上面的管道中看到的,我当前要做的就是阅读
test.txt
文档中的文本。
我可以轻松地在 Raspberry PI 上做到这一点:
lukas@raspberrypi:/etc $ cd ~
lukas@raspberrypi:~ $ cat Desktop/test.txt
hello123
但是当尝试运行作业时,它失败了:
Running with gitlab-runner 16.7.0 (102c81ba)
on Raspberry PI TestTool runner htiDWYJ2, system ID: s_0ae6b2582ae5
Preparing the "shell" executor
00:00
Using Shell (bash) executor...
Preparing environment
00:01
Running on raspberrypi...
Getting source from Git repository
00:01
Fetching changes with git depth set to 20...
Reinitialized existing Git repository in /home/gitlab-runner/builds/htiDWYJ2/0/embeded-programmers/gitchangelog-test/.git/
Checking out 7f12264a as detached HEAD (ref is main)...
Skipping Git submodules setup
Executing "step_script" stage of the job script
00:00
$ echo "This job tests something"
This job tests something
$ ls -l
total 120
drwxr-xr-x 8 gitlab-runner gitlab-runner 4096 Jan 2 08:13 build
-rw-r--r-- 1 gitlab-runner gitlab-runner 235 Jan 2 08:13 CMakeLists.txt
drwxr-xr-x 2 gitlab-runner gitlab-runner 4096 Jan 2 08:22 main
-rw-r--r-- 1 gitlab-runner gitlab-runner 2921 Jan 2 08:13 Readme.md
-rw-r--r-- 1 gitlab-runner gitlab-runner 2 Jan 2 08:13 release_notes.md
-rw-r--r-- 1 gitlab-runner gitlab-runner 48870 Jan 2 08:13 sdkconfig
-rw-r--r-- 1 gitlab-runner gitlab-runner 0 Jan 2 08:13 sdkconfig.ci
-rw-r--r-- 1 gitlab-runner gitlab-runner 48870 Jan 2 08:13 sdkconfig.old
-rw-r--r-- 1 gitlab-runner gitlab-runner 1325 Jan 2 08:13 working_ci_scripts.txt
$ cd ~
$ ls -l
total 4
drwxr-xr-x 3 gitlab-runner gitlab-runner 4096 Jan 2 08:13 builds
$ cat Desktop/test.txt
cat: Desktop/test.txt: No such file or directory
Cleaning up project directory and file based variables
00:00
ERROR: Job failed: exit status 1
也许我完全误解了
shell
执行器的工作原理?我无法通过 CI/CD 管道访问 gitlab-runner (Raspberry PI 4) 上的所有文件吗?事实上,这个运行程序甚至不需要克隆 Gitlab 存储库,因为它不需要构建任何东西。它只需要执行一些脚本并读取位于 Raspberry PI 4 上的一些文件。
如果我想要做的事情无法使用
shell
执行器实现,那么允许通过 CI/CD 管道在 gitlab-runner 上读取文件/执行 python 脚本的替代方法是什么?
gitlab-runner 与 lukas 不是同一用户。 lukas ~/ 与 gitlab-runner ~/ 不同 您可以尝试使用 pwd 命令来本地化并在文件系统中查找您的文件。 像去 /user/lukas/Desktop/test.txt 这样的东西应该可以工作。