【发布时间】:2021-10-14 01:00:35
【问题描述】:
到目前为止,我在 Gitlab CI 上拥有/拥有一个健康的工作管道,分为两个阶段(构建和部署)。
现在我想在这两者之间添加一个测试阶段,并且我想在前一个阶段构建的图像上运行测试。我应该如何进行?
现在有了这个 CI 文件,我将获得一个正在运行的容器,一个 Web 服务器开始监听,但什么也没有,它会无限期地停留,这是我不想要的。
variables:
CONTAINER_IMAGE: $CI_REGISTRY_IMAGE/XXXXXXXXX:$CI_COMMIT_REF_SLUG
CONTAINER_IMAGE_HASHED: $CI_REGISTRY_IMAGE/XXXXXXXXX:$CI_COMMIT_REF_SLUG-$CI_COMMIT_SHORT_SHA
build:
stage: build
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- echo "Start building XXXXXXXXX container"
- docker pull $CI_REGISTRY_IMAGE:latest || true
- docker build --cache-from $CI_REGISTRY_IMAGE:latest --tag $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA --tag $CI_REGISTRY_IMAGE:latest .
- docker push $CI_REGISTRY_IMAGE:$CI_COMMIT_SHA
- docker push $CI_REGISTRY_IMAGE:latest
environment:
name: staging
url: $PUBLIC_ADDRESS
test:
stage: test
image: docker:stable
services:
- docker:dind
script:
- docker run --rm $CI_REGISTRY_IMAGE /bin/bash -c "vendor/bin/phpunit"
environment:
name: test
deploy:
stage: deploy
before_script:
- mkdir -p ~/.ssh
- echo -e "$KEY" > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
script:
- apk update && apk add openssh-client
- ssh $SERVER_USER@$SERVER_IP "docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY &&
docker pull $CI_REGISTRY_IMAGE &&
docker stop XXXXXXXXX || true &&
docker rm XXXXXXXXX || true &&
docker run -d -p 80:80 --name XXXXXXXXX $CI_REGISTRY_IMAGE"
environment:
name: production
url: $PUBLIC_ADDRESS
我想运行测试(包括 PHPUnit),失败或成功时,容器应该关闭并移除 (--rm) 并继续部署(让我们说成功)(使用 allow_failure: true/false)。
编辑 1:
这种方式也给出了相同的结果(容器运行并保持运行):
...
test:
stage: test
image: $CI_REGISTRY_IMAGE
services:
- docker:dind
before_script:
- cd webroot
- composer install
- composer run-script post-root-package-install
script:
- vendor/bin/phpunit
environment:
name: test
...
【问题讨论】:
-
请检查您的问题标题。这是一个开放式提问(主题非常广泛)。你的具体问题是什么,是什么阻止你把它变成一个具体的问题(而不是描述你通常想要做什么然后遇到一些问题 - 我们每天都在做,Stackoverflow 最适合具体问题)
标签: php docker phpunit gitlab-ci