
Khách mời của chúng ta, Pantheon, nhà sáng tạo công cụ dành cho nhà phát triển, sẽ chia sẻ về cách tự động hóa quá trình triển khai. WordPress Sử dụng GitLab CI/CD.
В Tôi làm việc trong bộ phận quan hệ với nhà phát triển, vì vậy tôi luôn tìm kiếm những cách thức mới để hỗ trợ các nhà phát triển. WordPress и Drupal Giải quyết các vấn đề tự động hóa trong quy trình làm việc. Để làm được điều này, tôi thích thử nghiệm các công cụ mới và kết hợp chúng để đạt được hiệu quả cao hơn.
Tôi thường thấy các nhà phát triển gặp khó khăn với một máy chủ dàn dựng duy nhất.
Thật là vui khi chờ đến lượt bạn sử dụng máy chủ trung gian hoặc gửi cho khách hàng một URL kèm theo ghi chú: “Nhìn vào đây, nhưng chưa nhìn vào đây”.
- một trong những công cụ Pantheon thú vị - giải quyết vấn đề này, vì với chúng, bạn có thể tạo môi trường cho các nhánh Git theo yêu cầu. Mỗi môi trường multidev có URL và cơ sở dữ liệu riêng, vì vậy các nhà phát triển có thể làm việc lặng lẽ, kiểm tra chất lượng và nhận được sự chấp thuận mà không cần phải dẫm chân lên nhau.
Nhưng Pantheon không có công cụ kiểm soát phiên bản hoặc tích hợp và triển khai liên tục (CI/CD). Nhưng nó là một nền tảng linh hoạt mà bạn có thể tích hợp bất kỳ công cụ nào.
Tôi cũng nhận thấy rằng các nhóm sử dụng một số công cụ nhất định để phát triển và các công cụ khác nhau để lắp ráp và triển khai.
Ví dụ: họ có các công cụ khác nhau để kiểm soát phiên bản và CI/CD. Bạn phải loay hoay và chuyển đổi giữa các công cụ để chỉnh sửa mã và chẩn đoán sự cố.
Trên có một bộ công cụ phát triển đầy đủ: để kiểm soát phiên bản, vé, yêu cầu hợp nhất, quy trình CI/CD tốt nhất, sổ đăng ký vùng chứa và mọi thứ tương tự. Tôi chưa từng thấy ứng dụng nào cung cấp nhiều tính năng như vậy để quản lý quy trình phát triển của bạn.
Tôi yêu thích tự động hóa nên đã học cách kết nối Pantheon với GitLab để cam kết với nhánh chính trên GitLab được triển khai vào môi trường phát triển chính trong Pantheon. Và các yêu cầu hợp nhất trên GitLab có thể tạo và triển khai mã tới môi trường multidev trong Pantheon.
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách thiết lập kết nối giữa GitLab và Pantheon cũng như tối ưu hóa quy trình làm việc của bạn. WordPress и Drupal.
Tất nhiên là có thể, , nhưng chúng tôi sẽ làm mọi thứ bằng chính đôi tay của mình để tìm hiểu sâu hơn và trong tương lai, hãy sử dụng công cụ này không chỉ để triển khai.
Giới thiệu
Đối với bài đăng này, bạn cần hiểu rằng Pantheon chia mỗi trang web thành ba thành phần: mã, cơ sở dữ liệu và tệp.
Mã nguồn bao gồm các tệp CMS như lõi, plugin và giao diện. WordPressCác tệp này được quản lý trong , được lưu trữ bởi Pantheon, nghĩa là chúng tôi có thể triển khai mã từ GitLab đến Pantheon bằng Git.
Các tệp trong Pantheon là các tệp phương tiện, tức là hình ảnh cho trang web. Thông thường chúng được người dùng tải lên và Git bỏ qua chúng.
, tìm hiểu thêm về hoặc tại pantheon.io.
Giả định
Dự án của tôi trên Pantheon và GitLab có tên là pantheon-gitlab-blog-demoTên dự án phải là duy nhất. Chúng ta sẽ làm việc với một trang web ở đây. WordPressBạn cũng có thể lấy nó. DrupalNhưng một số điều sẽ cần phải thay đổi.
tôi sẽ sử dụng và bạn có thể làm việc ở , nếu bạn muốn.
Tạo một dự án
Đầu tiên, hãy tạo (chúng ta sẽ quay lại vấn đề này sau).
Bây giờ Sau đó chúng tôi tiến hành lắp đặt. WordPress Dành cho bảng điều khiển trang web.
Nếu tay bạn đang muốn thay đổi thứ gì đó, chẳng hạn như xóa hoặc thêm plugin, hãy kiên nhẫn. Trang web chưa được kết nối với GitLab và chúng tôi muốn tất cả các thay đổi mã đều phải thông qua GitLab.
Khi nào chúng ta sẽ cài đặt nó? WordPressQuay lại trang tổng quan của trang web Pantheon và thay đổi chế độ phát triển sang Git.
Cam kết ban đầu trên GitLab
Bây giờ bạn cần chuyển mã ban đầu. WordPress Từ trang web Pantheon lên GitLab. Để làm điều này, chúng ta sao chép mã từ kho lưu trữ Git của trang web Pantheon về máy tính cục bộ rồi đẩy nó lên kho lưu trữ GitLab.
Để làm cho nó dễ dàng và an toàn hơn, và chúng tôi sẽ không phải nhập mật khẩu mỗi lần sao chép kho lưu trữ Pantheon Git. Đồng thời rồi .
Để thực hiện việc này, hãy sao chép cục bộ trang web Pantheon bằng cách sao chép lệnh từ trường Sao chép bằng Git trên bảng điều khiển trang web.
Nếu bạn cần trợ giúp, hãy đọc tài liệu .
Bây giờ hãy thay đổi git remote originđể trỏ đến GitLab thay vì Pantheon. Nó có thể được thực hiện .
Hãy truy cập dự án GitLab và sao chép URL kho lưu trữ từ danh sách thả xuống Bản sao trên trang chi tiết dự án. Hãy chọn tùy chọn Sao chép bằng SSH vì chúng tôi đã định cấu hình khóa SSH.
Theo mặc định git remote để có bản sao cục bộ của kho lưu trữ mã - origin. Điều này có thể được thay đổi c git remote set-url origin [URL репозитория GitLab], trong đó thay vì dấu ngoặc, chúng ta nhập URL thực tế.
Cuối cùng, chúng tôi khởi động git push origin master --forceđể gửi mã WordPress Từ trang Pantheon trên GitLab.
Tùy chọn –force chỉ cần thiết một lần. Sau đó trong các đội
git pushnó sẽ không có trên GitLab.
Thiết lập thông tin xác thực và biến
Bạn có nhớ cách chúng tôi thêm khóa SSH cục bộ để đăng nhập vào Pantheon và GitLab không? Mã thông báo SSH có thể được sử dụng để ủy quyền cho GitLab và Pantheon.
GitLab có tài liệu tuyệt vời. Hãy xem nào .
Bây giờ chúng ta sẽ hoàn thành hai bước đầu tiên: Hãy tạo một cặp khóa SSH mới cục bộ bằng ssh-keygen và thêm khóa riêng làm biến cho dự án.
Sau đó chúng tôi sẽ hỏi SSH_PRIVATE_KEY như trong cài đặt dự án.
Ở bước thứ ba và thứ tư, chúng ta sẽ tạo một tệp .gitlab-ci.yml với nội dung như thế này:
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"Chúng ta chưa cam kết tập tin .gitlab-ci.yml, thì bạn sẽ cần phải thêm một cái gì đó khác vào nó.
Bây giờ chúng ta thực hiện bước thứ năm và thêm khóa chung mà bạn đã tạo ở bước đầu tiên vào các dịch vụ mà bạn cần truy cập trong môi trường xây dựng.
Trong trường hợp của chúng tôi, chúng tôi muốn truy cập Pantheon từ GitLab. Chúng ta làm theo hướng dẫn trong tài liệu của Pantheon trên và thực hiện bước này.
Hãy nhớ: SSH riêng tư có trong GitLab, SSH mở có trong Pantheon.
Hãy thiết lập thêm một vài biến môi trường. Cái đầu tiên được gọi là PANTHEON_SITE. Giá trị của nó là tên của trang Pantheon trên máy của bạn.
Tên trên máy được liệt kê ở cuối lệnh Clone with Git. Bạn đã sao chép trang web cục bộ nên đây sẽ là tên của thư mục kho lưu trữ cục bộ.
Tiếp theo, hãy thiết lập biến môi trường PANTHEON_GIT_URL. Đây là URL kho lưu trữ Git cho trang Pantheon mà chúng tôi đã sử dụng.
Chỉ nhập URL kho lưu trữ SSH, không nhập
git clonevà tên của trang web trên máy ở cuối.
Phù. Thế là xong, bây giờ chúng ta có thể hoàn thành tập tin của mình .gitlab-ci.yml.
Tạo nhiệm vụ triển khai
Những gì chúng tôi sẽ làm ban đầu với GitLab CI rất giống với những gì chúng tôi đã làm với kho Git trước đây. Nhưng lần này, hãy thêm kho lưu trữ Pantheon làm nguồn Git từ xa thứ hai, sau đó đẩy mã từ GitLab sang Pantheon.
Để làm điều này, hãy cấu hình deploy и deploy:dev, vì chúng tôi sẽ triển khai lên môi trường phát triển trên Pantheon. Tệp kết quả .gitlab-ci.yml sẽ trông như thế này:
stages:
- deploy
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
deploy:dev:
stage: deploy
environment:
name: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
only:
- masterBiến SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL trông quen quen - chúng tôi đã thiết lập các biến môi trường này trước đó. Với các biến này chúng ta sẽ có thể sử dụng các giá trị trong file .gitlab-ci.yml nhiều lần và chúng sẽ chỉ cần được cập nhật ở một nơi.
Cuối cùng, thêm, cam kết và gửi tệp .gitlab-ci.yml trên GitLab.
Kiểm tra việc triển khai
Nếu chúng tôi làm mọi thứ một cách chính xác, nhiệm vụ deploy:dev sẽ chạy thành công trong GitLab CI/CD và gửi cam kết .gitlab-ci.yml ở Pantheon. Chúng ta hãy xem xét.
Gửi chủ đề yêu cầu hợp nhất tới Pantheon
Ở đây chúng ta sẽ sử dụng tính năng Pantheon yêu thích của tôi − , nơi bạn có thể tạo môi trường Pantheon bổ sung cho các nhánh Git theo yêu cầu.
, nên phần này có thể bỏ qua. Nhưng nếu có quyền truy cập, bạn có thể tăng năng suất một cách đáng kể bằng cách thiết lập tự động tạo môi trường nhiều nhà phát triển trên Pantheon từ các yêu cầu hợp nhất GitLab.
Trước tiên hãy tạo một nhánh Git mới cục bộ bằng cách sử dụng git checkout -b multidev-support. Bây giờ hãy thay đổi một cái gì đó một lần nữa trong .gitlab-ci.yml.
Tôi muốn đưa số yêu cầu hợp nhất vào tên môi trường Pantheon. Ví dụ: yêu cầu hợp nhất đầu tiên là mr-1, thứ hai - mr-2 Vân vân.
Yêu cầu hợp nhất thay đổi, vì vậy chúng tôi cần xác định động tên các nhánh Pantheon. Thật dễ dàng trên GitLab - bạn chỉ cần sử dụng .
Chúng ta có thể lấy $CI_MERGE_REQUEST_IIDđể chỉ định số yêu cầu hợp nhất. Hãy áp dụng tất cả những điều này cùng với các biến môi trường toàn cục mà chúng ta đã chỉ định trước đó và thêm một tác vụ triển khai: multidev mới vào cuối tệp .gitlab-ci.yml.
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Checkout the merge request source branch
- git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon git repository as an additional remote
- git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
- git push pantheon $CI_COMMIT_REF_NAME:mr-$CI_MERGE_REQUEST_IID --force
only:
- merge_requestsNó sẽ tương tự như nhiệm vụ của chúng tôi deploy:dev, chỉ có nhánh được gửi tới Pantheon, không tới master.
Chúng tôi đã thêm và cam kết tập tin cập nhật .gitlab-ci.yml, và bây giờ hãy đẩy một nhánh mới tới GitLab với git push -u origin multidev-support.
Bây giờ hãy tạo một yêu cầu hợp nhất mới từ chi nhánh multidev-supportbằng cách nhấp chuột Tạo yêu cầu hợp nhất.
Sau khi tạo yêu cầu hợp nhất, chúng tôi xem cách thực thi tác vụ CI/CD deploy:multidev.
Hãy nhìn xem, một chủ đề mới đã được gửi tới Pantheon. Nhưng nếu đi tới phần multidev trên bảng điều khiển của trang Pantheon, chúng ta sẽ không thấy môi trường mới ở đó
Hãy xem phần Chi nhánh Git.
Kết quả là, chủ đề của chúng tôi mr-1 đã tới Pantheon. Hãy tạo một môi trường từ một nhánh mr-1.
Chúng ta đã tạo một môi trường multidev, bây giờ chúng ta hãy quay lại GitLab và xem phần Hoạt động > Môi trường. Chúng ta sẽ thấy các mục cho dev и mr-1.
Điều này là do chúng tôi đã thêm một mục environment Với tên name и url vào các nhiệm vụ CI/CD. Nếu nhấp vào biểu tượng môi trường mở, chúng ta sẽ được đưa đến URL của môi trường multidev trên Pantheon.
Tự động tạo multidev
Về nguyên tắc, bạn có thể dừng ở đây và chỉ cần nhớ tạo môi trường multidev cho mỗi yêu cầu hợp nhất, nhưng quá trình này có thể được tự động hóa.
Pantheon có công cụ dòng lệnh , nơi bạn có thể làm việc với nền tảng một cách tự động. Terminus cho phép bạn tạo môi trường multidev từ dòng lệnh - lý tưởng cho .
Chúng tôi cần một yêu cầu hợp nhất mới để kiểm tra điều này. Hãy tạo một nhánh mới bằng cách sử dụng git checkout -b auto-multidev-creation.
Để sử dụng Terminus trong các tác vụ CI/CD của GitLab, bạn cần có mã thông báo máy để xác thực với Terminus và hình ảnh vùng chứa với Terminus.
, lưu nó ở nơi an toàn và thêm nó dưới dạng biến môi trường toàn cầu trong GitLab với tên PANTHEON_MACHINE_TOKEN.
Nếu bạn quên cách thêm biến môi trường GitLab, hãy quay lại nơi chúng tôi đã xác định
PANTHEON_SITE.
Tạo Dockerfile với Terminus
Nếu bạn không sử dụng Docker hoặc không thích tập tin Dockerfile, chụp ảnh của tôi registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest và bỏ qua phần này.
, nơi chúng ta có thể xây dựng và đặt Dockerfile cho dự án của mình. Hãy tạo một Dockerfile với Terminus để hoạt động với Pantheon.
Terminus là một công cụ dòng lệnh PHP, vì vậy hãy bắt đầu với hình ảnh PHP. Tôi đang cài đặt Terminus thông qua Composer nên tôi sẽ sử dụng . Chúng tôi tạo ra Dockerfile trong thư mục kho lưu trữ cục bộ với nội dung sau:
# Use the official Composer image as a parent image
FROM composer:1.8
# Update/upgrade apk
RUN apk update
RUN apk upgrade
# Make the Terminus directory
RUN mkdir -p /usr/local/share/terminus
# Install Terminus 2.x with Composer
RUN /usr/bin/env COMPOSER_BIN_DIR=/usr/local/bin composer -n --working-dir=/usr/local/share/terminus require pantheon-systems/terminus:"^2"Làm theo hướng dẫn để ghép và gửi hình ảnh từ phần Xây dựng và đẩy hình ảnh в để thu thập một hình ảnh từ Dockerfile và đẩy nó vào GitLab.
Mở phần Đăng ký trong dự án GitLab. Nếu mọi thứ diễn ra theo đúng kế hoạch, hình ảnh của chúng ta sẽ ở đó. Viết một liên kết đến thẻ hình ảnh - chúng tôi cần nó cho tập tin .gitlab-ci.yml.
Mục script trong vấn đề deploy:multidev đang bắt đầu phát triển, vì vậy hãy chuyển nó sang một tệp riêng. Tạo một tập tin mới private/multidev-deploy.sh:
#!/bin/bash
# Store the mr- environment name
export PANTHEON_ENV=mr-$CI_MERGE_REQUEST_IID
# Authenticate with Terminus
terminus auth:login --machine-token=$PANTHEON_MACHINE_TOKEN
# Checkout the merge request source branch
git checkout $CI_COMMIT_REF_NAME
# Add the Pantheon Git repository as an additional remote
git remote add pantheon $PANTHEON_GIT_URL
# Push the merge request source branch to Pantheon
git push pantheon $CI_COMMIT_REF_NAME:$PANTHEON_ENV --force
# Create a function for determining if a multidev exists
TERMINUS_DOES_MULTIDEV_EXIST()
{
# Stash a list of Pantheon multidev environments
PANTHEON_MULTIDEV_LIST="$(terminus multidev:list ${PANTHEON_SITE} --format=list --field=id)"
while read -r multiDev; do
if [[ "${multiDev}" == "$1" ]]
then
return 0;
fi
done <<< "$PANTHEON_MULTIDEV_LIST"
return 1;
}
# If the mutltidev doesn't exist
if ! TERMINUS_DOES_MULTIDEV_EXIST $PANTHEON_ENV
then
# Create it with Terminus
echo "No multidev for $PANTHEON_ENV found, creating one..."
terminus multidev:create $PANTHEON_SITE.dev $PANTHEON_ENV
else
echo "The multidev $PANTHEON_ENV already exists, skipping creating it..."
fiTập lệnh nằm trong một thư mục riêng và . Chúng tôi có một tập lệnh cho logic multidev của mình. Bây giờ chúng ta hãy cập nhật phần deploy:multidev tập tin .gitlab-ci.ymlđể nó thành ra thế này:
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Run the multidev deploy script
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsChúng ta cần đảm bảo rằng các tác vụ của mình được thực hiện trong hình ảnh tùy chỉnh đã tạo, vì vậy hãy thêm một định nghĩa image từ URL đăng ký tới .gitlab-ci.yml. Kết quả là chúng tôi đã có được một tệp như thế này .gitlab-ci.yml:
image: registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest
stages:
- deploy
before_script:
# See https://docs.gitlab.com/ee/ci/ssh_keys/README.html
- eval $(ssh-agent -s)
- echo "$SSH_PRIVATE_KEY" | tr -d 'r' | ssh-add - > /dev/null
- mkdir -p $HOME/.ssh && echo "StrictHostKeyChecking no" >> "$HOME/.ssh/config"
- git config --global user.email "$GITLAB_USER_EMAIL"
- git config --global user.name "Gitlab CI"
deploy:dev:
stage: deploy
environment:
name: dev
url: https://dev-$PANTHEON_SITE.pantheonsite.io/
script:
- git remote add pantheon $PANTHEON_GIT_URL
- git push pantheon master --force
only:
- master
deploy:multidev:
stage: deploy
environment:
name: multidev/mr-$CI_MERGE_REQUEST_IID
url: https://mr-$CI_MERGE_REQUEST_IID-$PANTHEON_SITE.pantheonsite.io/
script:
# Run the multidev deploy script
- "/bin/bash ./private/multidev-deploy.sh"
only:
- merge_requestsThêm, cam kết và gửi private/multidev-deploy.sh и .gitlab-ci.yml. Bây giờ chúng ta quay lại GitLab và đợi tác vụ CI/CD hoàn thành. Hãy kiên nhẫn: multidev có thể mất vài phút để tạo.
Sau đó chúng ta xem danh sách multidev trên Pantheon. Ôi phép lạ! Môi trường đa nhà phát triển mr-2 đã ở đây rồi.
Kết luận
Nhóm của tôi vui hơn rất nhiều khi chúng tôi bắt đầu mở các yêu cầu hợp nhất và tạo môi trường một cách tự động.
Với các công cụ mạnh mẽ của GitLab và Pantheon, bạn có thể tự động kết nối GitLab với Pantheon.
Vì chúng tôi sử dụng GitLab CI/CD nên quy trình làm việc của chúng tôi sẽ có chỗ để phát triển. Dưới đây là một vài ý tưởng để giúp bạn bắt đầu:
- Thêm một bước xây dựng.
- Thêm thử nghiệm tự động.
- Thêm một nhiệm vụ để đảm bảo đáp ứng các tiêu chuẩn về mã.
- Thêm .
Hãy cho tôi biết suy nghĩ của bạn về GitLab, Pantheon và tự động hóa.
Tái bút Bạn có biết rằng Terminus, công cụ dòng lệnh của Pantheon, ?
Chúng tôi ở Pantheon đã làm rất tốt phiên bản 2 của chúng tôi. với sự hỗ trợ của GitLab. Nếu bạn không muốn bận tâm đến cài đặt cho từng dự án, hãy thử plugin này và giúp chúng tôi kiểm tra phiên bản beta v2. Dành cho nhóm Terminus build:project:create Bạn chỉ cần mã thông báo Pantheon và mã thông báo GitLab. Cô ấy sẽ triển khai một trong các dự án mẫu với Composer và thử nghiệm tự động, tạo một dự án mới trong GitLab, một trang Pantheon mới và kết nối chúng bằng cách sử dụng các biến môi trường và khóa SSH.
Thông tin về các Tác giả
Andrew Taylor tạo ra các công cụ dành cho nhà phát triển trong .
Nguồn: www.habr.com
