Я пытаюсь запустить простой конвейер GitLab CI, но он завершается с синтаксической ошибкой.Python

Программы на Python
Anonymous
Я пытаюсь запустить простой конвейер GitLab CI, но он завершается с синтаксической ошибкой.

Сообщение Anonymous »

Я пытаюсь запустить простой конвейер GitLab CI, но он терпит неудачу из-за синтаксической ошибки.
Ошибка:

конфигурация заданий должна содержать хотя бы одно видимое задание.

Вот мой файл .gitlab-ci.yml:
Что я пытаюсь сделать
Я хочу создать базовый конвейер CI, который запускает простое задание сборки и печатает сообщение, подтверждающее, что конвейер работает правильно.
⚙️ Что я ожидал
Я ожидал, что конвейер запустится успешно и выполнит build_job, распечатав сообщение в журналах заданий.
❌ Что на самом деле происходит
Конвейер завершает работу перед выполнением с ошибкой:
jobs config should contain at least one visible job

🔍Дополнительная информация
  • Я использую общий GitLab Runner
  • Репозиторий размещен на GitLab
  • Файл .gitlab-ci.yml находится в корневом каталоге
💡 Возможные причины (вы также можете проверить перед публикацией)
Эта ошибка обычно возникает, если:
  • В задании отсутствуют обязательные ключевые слова, такие как сценарий
  • Задание отфильтровано с использованием правил, только или кроме
  • Неверное форматирование/отступ YAML
  • Задание считается скрытым (например, начинается с точки, например .build_job)
# SPYK3-PHISH GitLab CI/CD Pipeline - Alpine Optimized
# Simplified and error-free version

image: alpine:latest

stages:
- test
- build
- scan
- release
- deploy

variables:
DOCKER_IMAGE: $CI_REGISTRY_IMAGE
DOCKER_TAG: $CI_COMMIT_SHORT_SHA
PYTHON_VERSION: "3.11"

# Cache for pip packages
cache:
paths:
- .cache/pip
- .venv/

# Test stage - Alpine optimized
test:
stage: test
image: python:3.11-alpine
before_script:
- apk add --no-cache git gcc musl-dev python3-dev
- python -m venv .venv
- source .venv/bin/activate
- pip install --cache-dir .cache/pip --upgrade pip
- pip install --cache-dir .cache/pip flake8 pytest pytest-cov
script:
- source .venv/bin/activate
- python -m py_compile spyk3_phish.py
- flake8 spyk3_phish.py --max-line-length=120 || true
- python -c "import ast; ast.parse(open('spyk3_phish.py').read()); print('✅ Syntax OK')"
artifacts:
paths:
- .venv/
expire_in: 1 hour
only:
- main
- develop
- merge_requests

# Security scan with Bandit
security-scan:
stage: scan
image: python:3.11-alpine
before_script:
- apk add --no-cache git
- python -m venv .venv
- source .venv/bin/activate
- pip install --cache-dir .cache/pip bandit safety
script:
- source .venv/bin/activate
- bandit -r . -f json -o bandit-report.json || true
- safety check --json > safety-report.json || true
artifacts:
paths:
- bandit-report.json
- safety-report.json
expire_in: 7 days
only:
- main
- develop

# Build Alpine Docker image
build:
stage: build
image: docker:latest
services:
- docker:dind
variables:
DOCKER_TLS_CERTDIR: "/certs"
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker build --pull -t $DOCKER_IMAGE:$DOCKER_TAG -f Dockerfile.alpine .
- docker tag $DOCKER_IMAGE:$DOCKER_TAG $DOCKER_IMAGE:alpine-latest
- docker push $DOCKER_IMAGE:$DOCKER_TAG
- docker push $DOCKER_IMAGE:alpine-latest
only:
- main
- develop
tags:
- docker

# Container security scan with Trivy
container-scan:
stage: scan
image: docker:latest
services:
- docker:dind
variables:
TRIVY_VERSION: "0.45.0"
before_script:
- apk add --no-cache curl
- curl -sfL https://raw.githubusercontent.com/aquas ... install.sh | sh -s -- -b /usr/local/bin v${TRIVY_VERSION}
script:
- trivy image --severity HIGH,CRITICAL --no-progress --exit-code 0 --format json --output trivy-report.json $DOCKER_IMAGE:$DOCKER_TAG
artifacts:
paths:
- trivy-report.json
expire_in: 7 days
only:
- main
allow_failure: true

# Secret detection
secret-scan:
stage: scan
image: python:3.11-alpine
before_script:
- apk add --no-cache git
- pip install detect-secrets
script:
- detect-secrets scan --all-files > secrets-report.json || true
artifacts:
paths:
- secrets-report.json
expire_in: 7 days
only:
- main
- develop
allow_failure: true

# Release stable version
release:
stage: release
image: docker:latest
services:
- docker:dind
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
script:
- docker pull $DOCKER_IMAGE:$DOCKER_TAG
- docker tag $DOCKER_IMAGE:$DOCKER_TAG $DOCKER_IMAGE:stable
- docker tag $DOCKER_IMAGE:$DOCKER_TAG $DOCKER_IMAGE:latest
- docker push $DOCKER_IMAGE:stable
- docker push $DOCKER_IMAGE:latest
only:
- main
when: manual

# Deploy to test environment
deploy-test:
stage: deploy
image: alpine:latest
before_script:
- apk add --no-cache openssh-client
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh
- chmod 700 ~/.ssh
- ssh-keyscan $TEST_SERVER_IP >> ~/.ssh/known_hosts
script:
- |
ssh $TEST_SERVER_USER@$TEST_SERVER_IP "
docker pull $CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
docker stop spyk3-phish 2>/dev/null || true
docker rm spyk3-phish 2>/dev/null || true
docker run -d \
--name spyk3-phish \
--restart unless-stopped \
-p 8080:8080 \
-v spyk3_data:/app/.spyk3_phish \
-e SPYK3_MODE=production \
$CI_REGISTRY_IMAGE:$CI_COMMIT_SHORT_SHA
"
environment:
name: test
url: http://$TEST_SERVER_IP:8080
only:
- develop
when: manual

# Documentation pages
pages:
stage: deploy
image: alpine:latest
script:
- mkdir -p public
- |
cat > public/index.html

Вернуться в «Python»