Gitlab-runner 是使用以下 docker-compose 创建的:
version: '3.6'
services:
gitlab-runner:
container_name: gitlab-runner
image: gitlab/gitlab-runner:v16.6.1
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /configs/gitlab-runner:/etc/gitlab-runner
我的 gitlab-runner config.toml
concurrent = 1
check_interval = 0
shutdown_timeout = 0
[session_server]
session_timeout = 1800
[[runners]]
name = "6f86bc827c67"
url = "https://gitlab.com/"
id = 30523766
token = ""
token_obtained_at = 2023-12-14T14:53:59Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
[runners.cache]
MaxUploadedArchiveSize = 0
[runners.docker]
tls_verify = false
image = "docker:24.0.5"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/certs/client", "/cache"]
shm_size = 0
network_mtu = 0
我的 .gitlab-ci.yml 文件:
stages:
- publish
- deploy
image: docker:24.0.5
services:
- name: docker:24.0.5-dind
variables:
TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA
DOCKER_TLS_CERTDIR: "/certs"
publish:
stage: publish
script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- ls -la
- pwd
- docker-compose build
- docker-compose push
only:
- backend_test
deploy:
stage: deploy
script:
- apk add --update --no-cache openssh
- chmod og= $ID_RSA
- eval $(ssh-agent -s)
- ssh-add $ID_RSA
- printf "TAG_LATEST=${TAG_LATEST}\nTAG_COMMIT=${TAG_COMMIT}\nSECRET_KEY=${SECRET_KEY}\nDATABASE_NAME=${TEST_DATABASE_NAME}\nDATABASE_USER=${TEST_DATABASE_USER}\nDATABASE_PASSWORD=${TEST_DATABASE_PASSWORD}\nDATABASE_HOST=${TEST_DATABASE_HOST}\nDATABASE_PORT=${TEST_DATABASE_PORT}\nGOOGLE_CLIENT_ID=${GOOGLE_CLIENT_ID}\nGOOGLE_CLIENT_SECRET=${GOOGLE_CLIENT_SECRET}" > .env
- scp -i $ID_RSA -o StrictHostKeyChecking=no -P $SERVER_PORT -r .env docker-compose.yml $SERVER_USER@$SERVER_IP:~/calendar/test/backend/
- ssh -i $ID_RSA -o StrictHostKeyChecking=no -p $SERVER_PORT $SERVER_USER@$SERVER_IP "docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no -p $SERVER_PORT $SERVER_USER@$SERVER_IP "cd ~/calendar/test/backend/ && docker-compose down --remove-orphans && export $(grep -v '^#' .env | xargs) && docker-compose up -d && rm .env"
environment:
name: production
url: https://$SERVER_IP/
only:
- backend_test
这是包括我的错误的日志:
Running with gitlab-runner 16.6.1 (f5da3c5a)
on 6f86bc827c67 RDq11xbw, system ID: r_dLhDEhelPT3t
Preparing the "docker" executor 00:08
Using Docker executor with image docker:24.0.5 ...
Starting service docker:24.0.5-dind ...
Pulling docker image docker:24.0.5-dind ...
Using docker image sha256:7015f2c475d511a251955877c2862016a4042512ba625ed905e69202f87e1a21 for docker:24.0.5-dind with digest docker@sha256:3c6e4dca7a63c9a32a4e00da40461ce067f255987ccc9721cf18ffa087bcd1ef ...
Waiting for services to be up and running (timeout 30 seconds)...
Pulling docker image docker:24.0.5 ...
Using docker image sha256:7015f2c475d511a251955877c2862016a4042512ba625ed905e69202f87e1a21 for docker:24.0.5 with digest docker@sha256:3c6e4dca7a63c9a32a4e00da40461ce067f255987ccc9721cf18ffa087bcd1ef ...
Preparing environment 00:00
Running on runner-rdq11xbw-project-36740136-concurrent-0 via 6f86bc827c67...
Getting source from Git repository 00:02
Fetching changes with git depth set to 20...
Reinitialized existing Git repository in /builds/kleikkowo/calendar/.git/
Checking out ad7fd968 as detached HEAD (ref is backend_test)...
Skipping Git submodules setup
Executing "step_script" stage of the job script 00:02
Using docker image sha256:7015f2c475d511a251955877c2862016a4042512ba625ed905e69202f87e1a21 for docker:24.0.5 with digest docker@sha256:3c6e4dca7a63c9a32a4e00da40461ce067f255987ccc9721cf18ffa087bcd1ef ...
$ docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
$ ls -la
total 52
drwxrwxrwx 4 root root 4096 Dec 14 16:45 .
drwxrwxrwx 4 root root 4096 Dec 14 14:54 ..
drwxrwxrwx 6 root root 4096 Dec 14 16:45 .git
-rw-rw-rw- 1 root root 2974 Dec 14 15:12 .gitignore
-rw-rw-rw- 1 root root 1705 Dec 14 16:43 .gitlab-ci.yml
-rw-rw-rw- 1 root root 2208 Dec 14 14:54 .pre-commit-config.yaml
-rw-rw-rw- 1 root root 756 Dec 14 15:12 Dockerfile
-rw-rw-rw- 1 root root 102 Dec 14 15:12 README.md
drwxrwxrwx 5 root root 4096 Dec 14 15:12 calendars
-rw-rw-rw- 1 root root 1489 Dec 14 16:45 docker-compose.yml
-rw-rw-rw- 1 root root 837 Dec 14 15:12 pyproject.toml
-rw-rw-rw- 1 root root 53 Dec 14 15:12 pytest.ini
-rwxrwxrwx 1 root root 31 Dec 14 15:12 start-backend.sh
$ pwd
/builds/kleikkowo/calendar
$ docker-compose build --build-arg build_context=/builds/kleikkowo/calendar
unable to prepare context: path "/builds/kleikkowo/calendar/. -f Dockerfile" not found
Cleaning up project directory and file based variables 00:00
ERROR: Job failed: exit code 17
我的 docker-compose 文件:
---
version: "3.6"
services:
calendar_backend_test:
image: $TAG_COMMIT
build: . -f Dockerfile
restart: always
environment:
- DATABASE_HOST=$DATABASE_HOST
- DATABASE_NAME=$DATABASE_NAME
- DATABASE_PASSWORD=$DATABASE_PASSWORD
- DATABASE_PORT=$DATABASE_PORT
- DATABASE_USER=$DATABASE_USER
- SECRET_KEY=$SECRET_KEY
- GOOGLE_CLIENT_ID=$GOOGLE_CLIENT_ID
- GOOGLE_CLIENT_SECRET=$GOOGLE_CLIENT_SECRET
security_opt:
- no-new-privileges:true
container_name: calendar_backend_test
networks:
- traefik_default
labels:
- "traefik.enable=true"
- "traefik.http.routers.calendar_backend_test.entrypoints=webs"
- "traefik.http.routers.calendar_backend_test.rule=Host(`be.gymsey.com`)"
- "traefik.http.routers.calendar_backend_test.tls.certresolver=letsencrypt"
- "traefik.http.services.calendar_backend_test.loadbalancer.server.port=8000"
- "traefik.http.services.calendar_backend_test.loadbalancer.server.scheme=http"
postgre_local:
image: postgres:14.1-alpine
restart: always
environment:
- POSTGRES_DB=$DATABASE_NAME
- POSTGRES_PASSWORD=$DATABASE_PASSWORD
- POSTGRES_USER=$DATABASE_USER
security_opt:
- no-new-privileges:true
container_name: $DATABASE_HOST
networks:
- traefik_default
volumes:
- db:/var/lib/postgresql/data
volumes:
db:
driver: local
networks:
traefik_default:
external: true
我不明白为什么我的命令构建只在 gitlab-runner 上看不到该文件,当我在本地执行此操作时,一切都很好,而且我知道它已连接到 gitlab-runner,因为就像几个月前使用超级旧的 gitlab 一样-runner 它确实工作正常,并且在本地也可以正常工作。我在这里缺少什么?
我期待脚本看到 Dockerfile
撰写文件中的
build:
参数不正确。 build: . -f Dockerfile
无效。当这个键是一个字符串时,它认为整个字符串是上下文路径。
如果您想提供 dockerfile 作为参数,您应该使用
Dockerfile:
键来提供它。