Tôi dường như không nhận được bộ nhớ cache hoặc các đồ tạo tác để chuyển đổi giữa các công việc trong gitlab CI. Tôi nghi ngờ nó là một cái gì đó để làm với cấu hình của tôi, nhưng tôi không chắc chắn những gì. Tôi đang chạy gitlab và gitlab-ci-multirunner, cả trong docker, sử dụng cấu hình docker-compose sau. Tôi đã bỏ qua cấu hình cơ sở dữ liệu và một số biến môi trường cho ngắn gọn:Cấu hình Á hậu CI Gitlab với bộ nhớ đệm trên docker
version: '2'
services:
gitlab:
image: sameersbn/gitlab:8.5.1
links:
- redis:redisio
- postgresql:postgresql
ports:
- "10080:80"
- "10022:22"
environment:
...
volumes:
- gitlab_data:/home/git/data
gitlab-ci-runner:
restart: always
image: gitlab/gitlab-runner
volumes:
- gitlab_runner_config_data:/etc/gitlab-runner
- /var/run/docker.sock:/var/run/docker.sock
- /etc/nginx/ssl/gitlab.crt:/etc/gitlab-runner/certs/ca.crt
- /etc/ssh:/ssh
links:
- gitlab:gitlab
redis:
...
postgresql:
...
volumes:
postgresql_data:
redis_data:
gitlab_data:
gitlab_runner_config_data:
Cấu hình á quân (config.toml
) là:
concurrent = 1
[[runners]]
name = "docker"
url = <public gitlab url>/ci
token = <gitlab token>
tls-ca-file = "/etc/gitlab-runner/certs/ca.crt"
executor = "docker"
[runners.docker]
image = "docker-bash"
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
Hình ảnh docker-bash
gọi là chỉ là hình ảnh chính thức docker:1.10 với bash Cài đặt.
quá trình xây dựng của tôi bao gồm 3 bước:
- Run
npm install
và các bài kiểm tra trong node:5 hình ảnh chính thức. Bây giờ, tôi đã rời khỏi bước này để kiểm tra triển khai. - Tạo hình ảnh trên đế có chứa mã
- Sử dụng ansible, qua hình ảnh docker được xây dựng theo yêu cầu để triển khai hình ảnh được xây dựng cho máy chủ sản xuất.
File .gitlab-ci.yml
trông như thế này:
variables:
FULL_IMAGE_TAG: deploy-$CI_BUILD_REF_NAME:$CI_BUILD_ID-$CI_BUILD_REF
IMAGE_FILE: deploy-$CI_BUILD_REF_NAME.tar.gz
cache:
paths:
- $IMAGE_FILE
build:
stage: build
script:
- docker build -t $FULL_IMAGE_TAG .
- docker save $FULL_IMAGE_TAG | gzip -cf - > $IMAGE_FILE
artifacts:
paths:
- $IMAGE_FILE
deploy:
stage: deploy
image: ansible-ssh
script:
- ls
- ansible-playbook -e image_file=$IMAGE_FILE -e branch=$CI_BUILD_REF_NAME -e full_image_name=$FULL_IMAGE_TAG deploy-playbook.yml
only:
- develop
- master
Như bạn thấy, hình ảnh Docker nén được gọi đến đây cả hai trong các phần bộ nhớ cache và hiện vật, nhưng là không thực sự sẵn ở bước triển khai , nơi ansible là nghĩa vụ phải sao chép nó vào máy từ xa. Tôi đã thử bao gồm một lệnh ls
để kiểm tra nội dung thư mục và tệp rõ ràng là không có, nhưng nó chắc chắn được xây dựng và tôi có thể tải xuống từ giao diện người dùng gitlab. Đây là nhật ký từ công việc triển khai:
gitlab-ci-multi-runner 1.0.4 (014aa8c)
Using Docker executor with image ansible-ssh ...
Pulling docker image ansible-ssh ...
WARNING: Cannot pull the latest version of image ansible-ssh : Error: image library/ansible-ssh not found
WARNING: Locally found image will be used instead.
Running on runner-59d43cf3-project-8-concurrent-0 via 381c2ea97744...
Fetching changes...
Removing artifacts.zip
Removing deploy-develop.tar.gz
HEAD is now at 6009bd0 test
Checking out 6009bd0f as develop...
HEAD is now at 6009bd0... test
$ ls
Dockerfile
deploy-playbook.yml
server
$ ansible-playbook -e image_file=$IMAGE_FILE -e branch=$CI_BUILD_REF_NAME -e full_image_name=$FULL_IMAGE_TAG deploy-playbook.yml
Using /etc/ansible/ansible.cfg as config file
1 plays in deploy-playbook.yml
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [deploy-host]
TASK [copy docker image] *******************************************************
task path: /builds/test/test/deploy-playbook.yml:44
fatal: [deploy-host]: FAILED! => {"changed": false, "failed": true, "msg": "could not find src=/builds/test/test/deploy-develop.tar.gz"}
NO MORE HOSTS LEFT *************************************************************
to retry, use: --limit @deploy-playbook.retry
PLAY RECAP *********************************************************************
deploy-host : ok=1 changed=0 unreachable=0 failed=1
ERROR: Build failed with: exit code 1
Tôi nghi ngờ rằng tôi không thiết lập hoặc sử dụng nhân vật chính xác, nhưng tôi không thể tìm thấy nhiều tài liệu cho bất kỳ trường hợp nào thực sự đơn giản và tôi không ' t biết công cụ đủ tốt để biết làm thế nào nó phù hợp với nhau dưới mui xe.
để đảm bảo các bước đang thực hiện một bước sau khi bạn đã thử thêm các giai đoạn: - xây dựng - triển khai – Pascal
Tôi đã làm, nhưng tôi có thể thấy thứ tự chúng chạy và ổn. – aquavitae
Điều gì sẽ xảy ra nếu bạn thêm bước "tạo tác" vào công việc 'deploy'? Hoặc di chuyển nó xuống bên dưới 'cache' để nó sẽ ảnh hưởng đến tất cả các công việc? Câu hỏi khác là, bạn có chắc chắn cả 'cache' và' artifacts' có thể trỏ tới cùng một đường dẫn? Tôi không biết, tôi chỉ cố gắng giúp bạn với logic. ;) –