bounty还有2天到期。回答此问题可获得+100声望奖励。hphex希望引起更多关注这个问题。
我正在尝试为具有以下要求的项目设置GitLab CI:
- 使用Flask为Python应用程序构建Docker容器。
- 使用thumbv 7 em-none-eabihf目标构建一个Rust二进制文件。
- 运行涉及以下内容的测试:
- 从步骤1开始使用Flask Python应用程序启动Docker容器。
- 装载步骤2中的工件。
- 编译自定义Rust库。
- 运行Rust库的cargo test命令。
我尝试过创建一个.gitlab-ci.yml
文件,但我不确定它是否正常工作,而且我很难理解如何正确启动Docker容器并使用挂载的工件运行测试。
以下是我的档案:
# .docker.gitlab-ci.yml file
.docker_init: &docker_init
- docker login -u gitlab-ci-token -p ${CI_JOB_TOKEN} ${CI_REGISTRY}
- echo "https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_SERVER_HOST}" >> ~/.git-credentials
.python_app_init: &python_app_init
- // Do some git credential stuff
- git clone https://github.com/username/python-app.git
# Base Docker job configuration
.docker:base: &base
image: ${GITLAB_DOCKER_IMAGE}
services:
- ${GITLAB_DIND_IMAGE}
tags:
- docker
# Build Docker image and push to registry
.docker:build:
<<: *base
script:
- *python_app_init
- *docker_init
- docker build -t ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} .
- docker push ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}
# Run Docker image
.docker:run:
<<: *base
script:
- *python_app_init
- *docker_init
- docker pull ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG}
- docker run --rm ${CI_REGISTRY_IMAGE}:${CI_COMMIT_REF_SLUG} -v ${CI_PROJECT_DIR}/rust-app/target/release/:/apps
# .rust.gitlab-ci.yml
# Base Rust job configuration
.rust:base: &base
image: ${RUST_BUILD_IMAGE}
cache:
key: ${RUST_CACHE_KEY}
paths:
- .cache/
.rust_toolchain: &rust_toolchain
- rustup component add rust-src --toolchain nightly-x86_64-unknown-linux-gnu
- rustup target add thumbv7em-none-eabihf
# Build Embedded Rust application
.rust:build:
extends: .rust:base
script:
- *rust_toolchain
- cd ${CI_PROJECT_DIR}/rust-app
- cargo build --release --target thumbv7em-none-eabihf
artifacts:
paths:
- ${CI_PROJECT_DIR}/rust-app/target/release/
# Test Embedded Rust application loaded on python docker image
.rust:test:
extends: .rust:base
script:
- *rust_toolchain
- cargo test
include:
- local: '/.docker-ci.yml'
- local: '/.rust-ci.yml'
stages:
- build
- test
# Build rust binary
build:rust:
stage: build
extends: .rust:build
# Build docker image
build:docker:
stage: build
extends: .docker:build
# Test
test:
stage: test
extends:
- .docker:run
- .rust:test
dependencies:
- build:rust
实际的CI错误输出指示.docker:run命令被忽略,从而阻止测试正确运行。
有人可以帮我创建一个工作.gitlab-ci.yml
文件,满足上述要求?
**更新:**您在评论中询问的实际错误消息是/bin/sh: eval: line xxx: cargo not found
。
1条答案
按热度按时间hwamh0ep1#
首先,我认为你的文章缺乏一些有用的调试信息。具体来说,浏览器中的管道图像将非常有助于查看错误发生的确切位置。
然而,我从错误消息中猜测,“build:rust”作业是第一个失败的。消息很清楚,
cargo
可执行文件,即未找到rust make / dependency management系统,导致构建失败。这也会导致测试失败,但我不认为你甚至达到了这一点。进一步分析这一点有点困难的是,您正在使用的图像存储在变量
${RUST_BUILD_IMAGE}
中,您(希望)在项目设置中设置该变量。如果您能告诉我们使用的是哪个映像,这将再次帮助调试。然而,我的猜测是,
$PATH
没有正确设置,以包括安装的cargo
。rustup
安装到~/.cargo/bin
中,因此添加路径可能会有所帮助:但为了更确定的东西,我们需要知道你用的是哪张图片...