
Pantheon'daki konuk geliştirici araçları yaratıcımız, GitLab CI/CD'yi kullanarak WordPress dağıtımlarının nasıl otomatikleştirileceğini anlatıyor.
В Geliştirici ilişkilerinde çalışıyorum, bu nedenle her zaman WordPress ve Drupal geliştiricilerinin iş akışlarındaki otomasyon sorunlarını çözmelerine yardımcı olacak yeni yollar arıyorum. Bunu yapmak için yeni araçlar denemeyi ve bunları etkili bir şekilde çalışacak şekilde birleştirmeyi seviyorum.
Geliştiricilerin sıklıkla tek bir hazırlama sunucusuyla uğraştığını görüyorum.
Bir ara sunucu kullanmak veya istemcilere şu notu içeren bir URL göndermek için sıranızın size gelmesini beklemek büyük bir zevk: "Buraya bakın, ancak henüz buraya bakmayın."
- harika Pantheon araçlarından biri - bu sorunu çözüyor çünkü onlarla isteğe bağlı olarak Git şubeleri için ortamlar oluşturabilirsiniz. Her çoklu geliştirme ortamının kendi URL'si ve veritabanı vardır; böylece geliştiriciler sessizce çalışabilir, kaliteyi kontrol edebilir ve birbirlerinin ayağına basmadan onay alabilirler.
Ancak Pantheon'un sürüm kontrolü veya sürekli entegrasyon ve dağıtım (CI/CD) için araçları yoktur. Ancak herhangi bir aracı entegre edebileceğiniz esnek bir platformdur.
Ayrıca ekiplerin geliştirme için belirli araçları, montaj ve dağıtım için ise farklı araçları kullandığını fark ettim.
Örneğin sürüm kontrolü ve CI/CD için farklı araçlara sahipler. Kodu düzenlemek ve sorunları teşhis etmek için etrafta dolaşmanız ve araçlar arasında geçiş yapmanız gerekir.
Üzerinde tam bir geliştirme araçları seti mevcuttur: sürüm kontrolü, biletler, birleştirme istekleri, sınıfının en iyisi CI/CD hattı, konteyner kayıt defteri ve bunun gibi her şey için. Geliştirme iş akışınızı yönetmek için bu kadar çok şey sunan bir uygulamaya henüz rastlamadım.
Otomasyonu seviyorum, bu yüzden Pantheon'u GitLab'a nasıl bağlayacağımı öğrendim, böylece GitLab'daki ana şubeye yapılan taahhütler Pantheon'daki ana geliştirme ortamına dağıtılacak. GitLab'daki birleştirme istekleri, Pantheon'daki çoklu geliştirme ortamlarına kod oluşturup dağıtabilir.
Bu eğitimde GitLab ile Pantheon arasında nasıl bağlantı kuracağınızı ve WordPress ile Drupal iş akışınızı nasıl optimize edeceğinizi anlatacağım.
Tabii ki mümkün , ama derinlemesine araştırmak için her şeyi ellerimizle yapacağız ve gelecekte bu aracı yalnızca dağıtım için kullanmayın.
Giriş
Bu yazı için Pantheon'un her siteyi üç öğeye ayırdığını anlamalısınız: kod, veritabanı ve dosyalar.
Kod, WordPress çekirdeği, eklentiler ve temalar gibi CMS dosyalarını içerir. Bu dosyalar şurada yönetiliyor: , Pantheon tarafından barındırılıyor; bu, Git ile kodu GitLab'dan Pantheon'a dağıtabileceğimiz anlamına geliyor.
Pantheon'daki dosyalar medya dosyalarıdır, yani siteye ait görsellerdir. Genellikle kullanıcılar tarafından yüklenirler ve Git bunları yok sayar.
, hakkında daha fazla bilgi edinin veya pantheon.io'da.
Varsayımlar
Pantheon ve GitLab'daki projemin adı pantheon-gitlab-blog-demo. Proje adı benzersiz olmalıdır. Burada bir WordPress sitesiyle çalışacağız. Drupal'ı alabilirsin ama bazı şeyleri değiştirmen gerekecek.
kullanacağım ve burada çalışabilirsin , isterseniz.
Proje oluştur
İlk önce oluşturalım (bu konuya daha sonra tekrar döneceğiz).
şimdi . Daha sonra site kontrol paneli için WordPress'i yüklüyoruz.
Elleriniz bir şeyi değiştirmek, örneğin eklentileri kaldırmak veya eklemek için can atıyorsa sabırlı olun. Site henüz GitLab'a bağlı değil ve tüm kod değişikliklerinin GitLab üzerinden yapılmasını istiyoruz.
WordPress'i yükledikten sonra Pantheon web sitesi kontrol paneline geri dönün ve geliştirme modunu Git olarak değiştirin.
GitLab'da ilk taahhüt
Şimdi ilk WordPress kodunu Pantheon sitesinden GitLab'a aktarmanız gerekiyor. Bunu yapmak için Pantheon sitesinin Git deposundaki kodu yerel olarak klonlayıp ardından GitLab deposuna gönderiyoruz.
Bunu daha kolay ve daha güvenli hale getirmek için, ve Pantheon Git deposunu her klonladığımızda şifre girmek zorunda kalmayacağız. Aynı zamanda zaten .
Bunu yapmak için site kontrol panelindeki Git ile Klonla alanından komutu kopyalayarak Pantheon sitesini yerel olarak klonlayın.
Yardıma ihtiyacınız varsa belgeleri okuyun .
Şimdi değişelim git remote originPantheon yerine GitLab'ı işaret etmek için. Yapılabilir .
GitLab projesine gidelim ve proje ayrıntıları sayfasındaki Klon açılır menüsünden depo URL'sini kopyalayalım. SSH anahtarını zaten yapılandırdığımız için SSH ile Klonla seçeneğini seçelim.
Varsayılan olarak git remote kod deposunun yerel bir kopyası için - origin. Bu değiştirilebilir c git remote set-url origin [URL репозитория GitLab]burada parantez yerine gerçek URL'yi giriyoruz.
Sonunda başlatıyoruz git push origin master --forceWordPress kodunu Pantheon'dan GitLab'a aktarmak için.
–force seçeneğine yalnızca bir kez ihtiyaç duyulur. Daha sonra takımlar halinde
git pushGitLab'da olmayacak.
Kimlik bilgilerini ve değişkenleri ayarlama
Pantheon ve GitLab'a giriş yapmak için yerel olarak nasıl bir SSH anahtarı eklediğimizi hatırlıyor musunuz? SSH belirteci GitLab ve Pantheon'u yetkilendirmek için kullanılabilir.
GitLab'ın mükemmel belgeleri var. Görelim .
Şimdi ilk iki adımı tamamlayacağız: Yerel olarak ssh-keygen ile yeni bir SSH anahtar çifti oluşturalım ve özel anahtarı değişken olarak projeye ekleyelim.
O zaman soracağız SSH_PRIVATE_KEY gibi proje ayarlarında.
Üçüncü ve dördüncü adımlarda bir dosya oluşturacağız .gitlab-ci.yml bunun gibi içerikle:
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"Henüz dosyayı commit etmeyelim .gitlab-ci.yml, o zaman ona başka bir şey eklemeniz gerekecek.
Şimdi beşinci adımı gerçekleştiriyoruz ve ilk adımda oluşturduğunuz ortak anahtarı yapı ortamında erişmeniz gereken hizmetlere ekleyin.
Bizim durumumuzda Pantheon'a GitLab'dan erişmek istiyoruz. Pantheon belgesindeki talimatları takip ediyoruz. ve bu adımı gerçekleştirin.
Unutmayın: özel SSH GitLab'da, açık SSH ise Pantheon'da.
Birkaç ortam değişkeni daha ayarlayalım. İlkinin adı PANTHEON_SITE. Değeri, makinenizdeki Pantheon sitesinin adıdır.
Makinedeki ad Git ile Klonla komutunun sonunda listelenir. Siteyi zaten yerel olarak klonladınız, dolayısıyla bu, yerel depo dizininin adı olacaktır.
Sonra ortam değişkenini ayarlayalım PANTHEON_GIT_URL. Bu, Pantheon sitesinin halihazırda kullandığımız Git deposu URL'sidir.
Yalnızca SSH deposu URL'sini girin;
git cloneve sonunda makinedeki sitenin adı.
Vay be. Bu kadar oldu, artık dosyamızı bitirebiliriz .gitlab-ci.yml.
Dağıtım görevi oluşturma
Başlangıçta GitLab CI ile yapacağımız şey, geçmişte Git depolarıyla yaptıklarımıza çok benzer. Ancak bu sefer Pantheon deposunu ikinci bir uzak Git kaynağı olarak ekleyelim ve ardından kodu GitLab'dan Pantheon'a aktaralım.
Bunu yapmak için yapılandıralım deploy и deploy:dev, çünkü Pantheon'daki geliştirme ortamına konuşlandıracağız. Ortaya çıkan dosya .gitlab-ci.yml Bu gibi görünecektir:
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:
- masterDeğişkenler SSH_PRIVATE_KEY, PANTHEON_SITE и PANTHEON_GIT_URL tanıdık gelmeli; bu ortam değişkenlerini daha önce ayarladık. Bu değişkenler sayesinde dosyadaki değerleri kullanabileceğiz .gitlab-ci.yml birçok kez ve yalnızca tek bir yerde güncellenmeleri gerekecek.
Son olarak dosyayı ekleyin, kaydedin ve gönderin .gitlab-ci.yml GitLab'da.
Dağıtımı kontrol etme
Her şeyi doğru yaptıysak görev deploy:dev GitLab CI/CD'de başarıyla çalışacak ve bir taahhüt gönderecek .gitlab-ci.yml Pantheon'da. Hadi bir göz atalım.
Birleştirme isteği konularını Pantheon'a gönderme
Burada en sevdiğim Pantheon özelliğini kullanacağız – Talep üzerine Git şubeleri için ek Pantheon ortamları oluşturabileceğiniz yer.
olduğundan bu bölüm atlanabilir. Ancak erişiminiz varsa GitLab birleştirme isteklerinden Pantheon'da çoklu geliştirme ortamlarının otomatik oluşturulmasını ayarlayarak verimliliği ciddi şekilde artırabilirsiniz.
Öncelikle şunu kullanarak yerel olarak yeni bir Git şubesi oluşturalım: git checkout -b multidev-support. Şimdi yine bir şeyi değiştirelim .gitlab-ci.yml.
Birleştirme isteği numarasını Pantheon ortam adına eklemeyi seviyorum. Örneğin, ilk birleştirme isteği mr-1, ikinci - mr-2 vb.
Birleştirme isteği değiştiği için Pantheon şube adlarını dinamik olarak belirlememiz gerekiyor. GitLab'da bu kolaydır; yalnızca kullanmanız gerekir .
Alabiliriz $CI_MERGE_REQUEST_IIDBirleştirme isteği numarasını belirtmek için. Tüm bunları daha önce belirttiğimiz global ortam değişkenleriyle birlikte uygulayalım ve dosyanın sonuna yeni bir konuşlandırma:multidev görevi ekleyelim. .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_requestsBizim görevimize benzer olacak deploy:dev, yalnızca şube Pantheon'a gönderilir, Pantheon'a değil master.
Güncellenen dosyayı ekledik ve commit ettik .gitlab-ci.ymlve şimdi GitLab'a yeni bir şube gönderelim git push -u origin multidev-support.
Şimdi şubeden yeni bir birleştirme isteği oluşturalım multidev-supportbasarak Birleştirme isteği oluştur.
Birleştirme isteği oluşturduktan sonra CI/CD görevinin nasıl yürütüldüğüne bakıyoruz deploy:multidev.
Bakın, Pantheon'a yeni bir konu gönderildi. Ancak Pantheon sitesinin kontrol panelindeki multidev bölümüne gidersek orada yeni ortamı göremeyiz.
Git Branches kısmına bakalım.
Sonuç olarak konumuz mr-1 Pantheon'a vardım. Bir daldan ortam oluşturalım mr-1.
Multidev ortamı oluşturduk, şimdi GitLab'a dönüp bölüme bakalım Operasyonlar > Ortamlar. Girişleri göreceğiz dev и mr-1.
Bunun nedeni bir giriş eklememizdir environment Adı ile name и url CI/CD görevlerine. Açık ortam simgesine tıklarsak Pantheon'daki multidev ortamının URL'sine yönlendirileceğiz.
Multidev oluşturulmasını otomatikleştirin
Prensip olarak burada durabilir ve her birleştirme isteği için çok geliştiricili bir ortam oluşturmayı unutmayın, ancak bu süreç otomatikleştirilebilir.
Pantheon'un bir komut satırı aracı var , platformla otomatik olarak çalışabileceğiniz yer. Terminus, komut satırından çoklu geliştirme ortamları oluşturmanıza olanak tanır; .
Bunu test etmek için yeni bir birleştirme isteğine ihtiyacımız var. Kullanarak yeni bir şube oluşturalım git checkout -b auto-multidev-creation.
GitLab CI/CD görevlerinde Terminus'u kullanmak için, Terminus ile kimlik doğrulamaya yönelik bir makine belirtecine ve Terminus ile bir kapsayıcı görüntüsüne ihtiyacınız vardır.
, güvenli bir yere kaydedin ve GitLab'da şu adla global ortam değişkeni olarak ekleyin: PANTHEON_MACHINE_TOKEN.
GitLab ortam değişkenlerini nasıl ekleyeceğinizi unuttuysanız tanımladığımız yere geri dönün
PANTHEON_SITE.
Terminus ile Docker dosyası oluşturma
Docker kullanmıyorsanız veya dosyalardan hoşlanmıyorsanız Dockerfile, resmimi al registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest ve bu bölümü atlayın.
Projemiz için Docker dosyasını oluşturup yerleştirebileceğimiz yer. Pantheon ile çalışmak için Terminus ile bir Dockerfile oluşturalım.
Terminus bir PHP komut satırı aracıdır, bu yüzden PHP görüntüsüyle başlayalım. Terminus'u Composer aracılığıyla kuruyorum, bu yüzden kullanacağım . Biz yaratırız Dockerfile aşağıdaki içeriğe sahip yerel depo dizininde:
# 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"Bu bölümdeki görselleri birleştirme ve gönderme talimatlarını izleyin Görselleri oluşturun ve aktarın в bir resim toplamak için Dockerfile ve onu GitLab'a aktarın.
Bölümü aç Kayıt (uzun süredir Amerika'da belgesi olmadan ikamet eden kişiler için) GitLab projesinde. Her şey planlandığı gibi giderse imajımız orada olacaktır. Resim etiketine bir bağlantı yazın - dosya için buna ihtiyacımız var .gitlab-ci.yml.
Bölüm script problemde deploy:multidev büyümeye başlıyor, o yüzden onu ayrı bir dosyaya taşıyalım. Yeni bir dosya oluştur 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..."
fiKomut dosyası özel bir dizindedir ve . Multidev mantığımız için bir betiğimiz var. Şimdi bölümü güncelleyelim deploy:multidev dosya .gitlab-ci.ymlböylece şu şekilde ortaya çıkıyor:
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_requestsOluşturulan özel imajda görevlerimizin yerine getirildiğinden emin olmamız gerekiyor, bu yüzden bir tanım ekleyelim image kayıt defteri URL'sinden .gitlab-ci.yml. Sonuç olarak böyle bir dosyayla karşılaştık. .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_requestsEkle, kaydet ve gönder private/multidev-deploy.sh и .gitlab-ci.yml. Şimdi GitLab'a dönüyoruz ve CI/CD görevinin tamamlanmasını bekliyoruz. Sabırlı olun: multidev'in oluşturulması birkaç dakika sürebilir.
Daha sonra Pantheon'daki multidev listesine bakıyoruz. Ah mucize! Çoklu geliştirme ortamı mr-2 zaten burada.
Sonuç
Birleştirme isteklerini açmaya ve ortamları otomatik olarak oluşturmaya başladığımızda ekibim çok daha fazla eğlendi.
GitLab ve Pantheon'un güçlü araçlarıyla GitLab'ı Pantheon'a otomatik olarak bağlayabilirsiniz.
GitLab CI/CD'yi kullandığımız için iş akışımızın büyüme şansı olacak. İşte başlamanıza yardımcı olacak birkaç fikir:
- Bir oluşturma adımı ekleyin.
- Otomatik test ekleyin.
- Kod standartlarının karşılandığından emin olmak için bir görev ekleyin.
- Ekle .
GitLab, Pantheon ve otomasyon hakkında ne düşündüğünüzü bana bildirin.
PS Pantheon'un komut satırı aracı Terminus'un, ?
Biz Pantheon olarak projemizin 2. versiyonunda iyi bir iş çıkardık. GitLab desteğiyle. Her proje için ayarlarla uğraşmak istemiyorsanız bu eklentiyi deneyin ve v2 beta sürümünü test etmemize yardımcı olun. Terminus ekibi için build:project:create Yalnızca bir Pantheon belirtecine ve bir GitLab belirtecine ihtiyacınız var. Örnek projelerden birini Composer ve otomatik test ile dağıtacak, yeni bir Pantheon sitesi olan GitLab'da yeni bir proje oluşturacak ve bunları ortam değişkenleri ve SSH anahtarlarını kullanarak bağlayacak.
Yazar Hakkında
Andrew Taylor geliştiriciler için araçlar yaratıyor .
Kaynak: habr.com
