Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress
Pembuat alat pengembang tamu kami di Pantheon berbicara tentang cara mengotomatiskan penerapan WordPress menggunakan GitLab CI/CD.

Π’ Panteon Saya bekerja di bagian hubungan pengembang, jadi saya selalu mencari cara baru untuk membantu pengembang WordPress dan Drupal memecahkan masalah otomatisasi dalam alur kerja mereka. Untuk melakukan ini, saya suka bereksperimen dengan alat-alat baru dan menggabungkannya satu sama lain agar bekerja secara efektif.

Saya sering melihat pengembang kesulitan dengan satu server pementasan.

Sungguh menyenangkan menunggu giliran Anda untuk menggunakan server perantara atau mengirimkan URL kepada klien dengan catatan: β€œLihat di sini, tapi jangan lihat di sini dulu.”

Lingkungan multi-perangkat - salah satu alat Pantheon yang keren - memecahkan masalah ini, karena dengan alat tersebut Anda dapat membuat lingkungan untuk cabang Git sesuai permintaan. Setiap lingkungan multidev memiliki URL dan databasenya sendiri, sehingga pengembang dapat bekerja dengan tenang, memeriksa kualitas, dan mendapatkan persetujuan tanpa saling mengganggu.

Namun Pantheon tidak memiliki alat untuk kontrol versi atau integrasi dan penerapan berkelanjutan (CI/CD). Namun ini adalah platform fleksibel yang dapat digunakan untuk mengintegrasikan alat apa pun.

Saya juga memperhatikan bahwa tim menggunakan alat tertentu untuk pengembangan, dan alat yang berbeda untuk perakitan dan penerapan.

Misalnya, mereka memiliki alat berbeda untuk kontrol versi dan CI/CD. Anda harus bermain-main dan beralih antar alat untuk mengedit kode dan mendiagnosis masalah.

Pada GitLab ada seperangkat alat pengembangan yang lengkap: untuk kontrol versi, tiket, permintaan penggabungan, pipeline CI/CD terbaik di kelasnya, registri kontainer, dan sebagainya. Saya belum menemukan aplikasi yang menawarkan begitu banyak hal untuk mengelola alur kerja pengembangan Anda.

Saya menyukai otomatisasi, jadi saya mempelajari cara menghubungkan Pantheon ke GitLab sehingga komitmen ke cabang utama di GitLab diterapkan ke lingkungan pengembangan utama di Pantheon. Dan permintaan penggabungan di GitLab dapat membuat dan menerapkan kode ke lingkungan multidev di Pantheon.

Dalam tutorial ini, saya akan memandu Anda tentang cara mengatur koneksi antara GitLab dan Pantheon dan mengoptimalkan alur kerja WordPress dan Drupal Anda.

Tentu saja mungkin, mencerminkan repositori GitLab, tapi kami akan melakukan segalanya dengan tangan kami untuk menyelidikinya GitLab CI dan di masa depan gunakan alat ini tidak hanya untuk penerapan.

pengenalan

Untuk postingan ini, Anda perlu memahami bahwa Pantheon membagi setiap situs menjadi tiga elemen: kode, database, dan file.

Kode tersebut mencakup file CMS seperti inti WordPress, plugin, dan tema. File-file ini dikelola di Repositori Git, dihosting oleh Pantheon, artinya kita dapat menerapkan kode dari GitLab ke Pantheon dengan Git.
File di Pantheon adalah file media, yaitu gambar untuk situs. Biasanya mereka diunggah oleh pengguna dan Git mengabaikannya.

Buat Akun gratis, cari tahu lebih lanjut tentang Alur kerja Pantheon ΠΈΠ»ΠΈ mendaftar untuk demo di pantheon.io.

Asumsi

Proyek saya di Pantheon dan GitLab disebut pantheon-gitlab-blog-demo. Nama proyek harus unik. Di sini kita akan bekerja dengan situs WordPress. Anda dapat menggunakan Drupal, tetapi Anda perlu mengubah beberapa hal.

saya akan gunakan Baris perintah Gitdan kamu bisa bekerja di dalamnya antarmuka grafis, jika Anda menghendaki.

Buat proyek

Pertama, mari kita berkreasi proyek GitLab (kita akan membahasnya lagi nanti).

Sekarang membuat situs WordPress di Pantheon. Kemudian kita install WordPress untuk dashboard situs.

Jika tangan Anda gatal untuk mengubah sesuatu, misalnya menghapus atau menambah plugin, bersabarlah. Situs ini belum terhubung ke GitLab, dan kami ingin semua perubahan kode dilakukan melalui GitLab.

Setelah kami menginstal WordPress, kembali ke dashboard situs Pantheon dan ubah mode pengembangan ke Git.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Komit awal di GitLab

Sekarang Anda perlu mentransfer kode awal WordPress dari situs Pantheon ke GitLab. Untuk melakukan ini, kami mengkloning kode dari repositori Git situs Pantheon secara lokal, lalu mengirimkannya ke repositori GitLab.

Agar lebih mudah dan aman, tambahkan kunci SSH ke Pantheon dan kita tidak perlu memasukkan kata sandi setiap kali mengkloning repositori Pantheon Git. Pada saat yang sama sudah tambahkan kunci SSH ke GitLab.

Untuk melakukan ini, kloning situs Pantheon secara lokal dengan menyalin perintah dari bidang Clone with Git di dasbor situs.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress
Jika Anda memerlukan bantuan, baca dokumentasinya memulai dengan Git untuk Pantheon.

Sekarang mari kita berubah git remote originuntuk menunjuk ke GitLab, bukan Pantheon. Itu bisa dilakukan ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ git remote.

Mari pergi ke proyek GitLab dan salin URL repositori dari dropdown Clone di halaman detail proyek. Mari kita pilih opsi Clone with SSH, karena kita sudah mengkonfigurasi SSH key.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ git remote untuk salinan lokal dari repositori kode - origin. Hal ini dapat diubah c git remote set-url origin [URL рСпозитория GitLab], dimana alih-alih tanda kurung kita memasukkan URL sebenarnya.

Akhirnya, kami meluncurkannya git push origin master --forceuntuk mendorong kode WordPress dari Pantheon ke GitLab.

Opsi –force hanya diperlukan satu kali. Kemudian secara tim git push itu tidak akan ada di GitLab.

Menyiapkan kredensial dan variabel

Ingat bagaimana kami menambahkan kunci SSH secara lokal untuk masuk ke Pantheon dan GitLab? Token SSH dapat digunakan untuk mengotorisasi GitLab dan Pantheon.

GitLab memiliki dokumentasi yang sangat bagus. Mari kita lihat bagian tentang kunci SSH saat menggunakan pelaksana Docker dalam dokumen tentang penggunaan kunci SSH dengan GitLab CI/CD.

Kami sekarang akan menyelesaikan dua langkah pertama: Mari buat pasangan kunci SSH baru secara lokal dengan ssh-keygen dan tambahkan kunci pribadi sebagai variabel ke proyek.

Lalu kita akan bertanya SSH_PRIVATE_KEY sebagai Variabel lingkungan GitLab CI/CD dalam pengaturan proyek.
Pada langkah ketiga dan keempat kita akan membuat file .gitlab-ci.yml dengan konten seperti ini:

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"

Mari kita tidak mengkomit filenya dulu .gitlab-ci.yml, maka Anda perlu menambahkan sesuatu yang lain ke dalamnya.

Sekarang kita melakukan langkah kelima dan tambahkan kunci publik yang Anda buat pada langkah pertama ke layanan yang Anda perlukan aksesnya di lingkungan build.

Dalam kasus kami, kami ingin mengakses Pantheon dari GitLab. Kami mengikuti instruksi dalam dokumen Pantheon di menambahkan kunci SSH ke Pantheon dan lakukan langkah ini.

Ingat: SSH pribadi ada di GitLab, SSH terbuka ada di Pantheon.

Mari siapkan beberapa variabel lingkungan lagi. Yang pertama disebut PANTHEON_SITE. Nilainya adalah nama situs Pantheon di mesin Anda.

Nama pada mesin tercantum di akhir perintah Clone with Git. Anda telah mengkloning situs tersebut secara lokal, jadi ini akan menjadi nama direktori repositori lokal.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Selanjutnya, mari kita siapkan variabel lingkungan PANTHEON_GIT_URL. Ini adalah URL repositori Git untuk situs Pantheon yang telah kami gunakan.

Masukkan hanya URL repositori SSH saja, tanpa git clone dan nama situs pada mesin di bagian akhir.

Fiuh. Selesai, sekarang kita bisa menyelesaikan file kita .gitlab-ci.yml.

Buat tugas penerapan

Apa yang awalnya kami lakukan dengan GitLab CI sangat mirip dengan apa yang kami lakukan dengan repositori Git di masa lalu. Namun kali ini, mari tambahkan repositori Pantheon sebagai sumber Git jarak jauh kedua, lalu dorong kode dari GitLab ke Pantheon.

Untuk melakukan ini, mari konfigurasikan tahap deploy ΠΈ tugas deploy:dev, karena kami akan menyebarkannya ke lingkungan pengembangan di Pantheon. File yang dihasilkan .gitlab-ci.yml akan terlihat seperti ini:

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

Variabel SSH_PRIVATE_KEY, PANTHEON_SITE ΠΈ PANTHEON_GIT_URL seharusnya terlihat familier - kita menyiapkan variabel lingkungan ini sebelumnya. Dengan variabel-variabel ini kita akan dapat menggunakan nilai-nilai yang ada di dalam file .gitlab-ci.yml berkali-kali, dan hanya perlu diperbarui di satu tempat.

Terakhir, tambahkan, komit, dan kirim file .gitlab-ci.yml di GitLab.

Memeriksa penerapan

Jika kita melakukan semuanya dengan benar, tugasnya deploy:dev akan berjalan dengan sukses di GitLab CI/CD dan mengirimkan komit .gitlab-ci.yml di Pantheon. Mari kita lihat.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Mengirim utas permintaan penggabungan ke Pantheon

Di sini kita akan menggunakan fitur Pantheon favorit saya - multidev, tempat Anda dapat membuat lingkungan Pantheon tambahan untuk cabang Git sesuai permintaan.

Akses ke multidev terbatas, jadi bagian ini bisa dilewati. Namun jika Anda memiliki akses, Anda dapat meningkatkan produktivitas secara serius dengan menyiapkan pembuatan otomatis lingkungan multidev di Pantheon dari permintaan penggabungan GitLab.

Pertama mari kita buat cabang Git baru menggunakan git checkout -b multidev-support. Sekarang mari kita ubah sesuatu lagi .gitlab-ci.yml.

Saya ingin memasukkan nomor permintaan penggabungan dalam nama lingkungan Pantheon. Misalnya, permintaan penggabungan pertama adalah mr-1, Kedua - mr-2 dll.

Permintaan penggabungan berubah, jadi kita perlu menentukan nama cabang Pantheon secara dinamis. Sangat mudah di GitLab - Anda hanya perlu menggunakannya variabel lingkungan yang telah ditentukan sebelumnya.

Kita bisa mengambil $CI_MERGE_REQUEST_IIDuntuk menentukan nomor permintaan penggabungan. Mari kita terapkan semua ini bersama dengan variabel lingkungan global yang kita tentukan sebelumnya dan tambahkan tugas deploy:multidev baru di akhir file .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_requests

Ini akan serupa dengan tugas kita deploy:dev, hanya cabangnya yang dikirim ke Pantheon, bukan ke master.

Kami telah menambahkan dan mengkomit file yang diperbarui .gitlab-ci.yml, dan sekarang mari kita dorong cabang baru ke GitLab dengan git push -u origin multidev-support.

Sekarang mari buat permintaan penggabungan baru dari cabang multidev-supportdengan mengklik Buat permintaan penggabungan.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Setelah membuat permintaan penggabungan, kami melihat bagaimana tugas CI/CD dijalankan deploy:multidev.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Lihat, thread baru telah dikirim ke Pantheon. Namun jika kita masuk ke bagian multidev di dashboard situs Pantheon, kita tidak akan melihat lingkungan baru di sana

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Mari kita lihat bagian Git Branches.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Hasilnya, thread kami mr-1 sampai di Pantheon. Mari ciptakan lingkungan dari cabang mr-1.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Kita telah membuat lingkungan multidev, sekarang mari kembali ke GitLab dan melihat bagiannya Operasi > Lingkungan. Kami akan melihat entri untuk dev ΠΈ mr-1.

Ini karena kami menambahkan entri environment Dengan nama name ΠΈ url ke dalam tugas CI/CD. Jika kita mengklik ikon lingkungan terbuka, kita akan dibawa ke URL lingkungan multidev di Pantheon.

Otomatiskan pembuatan multidev

Pada prinsipnya, Anda dapat berhenti di sini dan ingat untuk membuat lingkungan multidev untuk setiap permintaan penggabungan, namun proses ini dapat diotomatisasi.

Pantheon memiliki alat baris perintah Ujung penghabisan, tempat Anda dapat bekerja dengan platform secara otomatis. Terminus memungkinkan Anda membuat lingkungan multidev dari baris perintah - ideal untuk GitLab CI.

Kami memerlukan permintaan penggabungan baru untuk mengujinya. Mari buat cabang baru menggunakan git checkout -b auto-multidev-creation.

Untuk menggunakan Terminus dalam tugas GitLab CI/CD, Anda memerlukan token mesin untuk autentikasi dengan Terminus dan gambar kontainer dengan Terminus.

Membuat Token Mesin Pantheon, simpan di tempat yang aman dan tambahkan sebagai variabel lingkungan global di GitLab dengan nama PANTHEON_MACHINE_TOKEN.

Jika Anda lupa cara menambahkan variabel lingkungan GitLab, kembali ke tempat yang telah kita tentukan PANTHEON_SITE.

Membuat Dockerfile dengan Terminus

Jika Anda tidak menggunakan Docker atau tidak menyukai file Dockerfile, ambil gambarku registry.gitlab.com/ataylorme/pantheon-gitlab-blog-demo:latest dan lewati bagian ini.

GitLab memiliki registri kontainer, tempat kita dapat membangun dan menempatkan Dockerfile untuk proyek kita. Mari buat Dockerfile dengan Terminus untuk bekerja dengan Pantheon.

Terminus adalah alat baris perintah PHP, jadi mari kita mulai dengan gambar PHP. Saya menginstal Terminus melalui Komposer, jadi saya akan menggunakannya gambar Komposer Docker resmi. Kami menciptakan Dockerfile di direktori repositori lokal dengan konten berikut:

# 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"

Ikuti instruksi untuk merakit dan mengirim gambar dari bagian tersebut Bangun dan dorong gambar Π² dokumentasi registri kontaineruntuk mengumpulkan gambar dari Dockerfile dan dorong ke GitLab.

Membuka bagian pendaftaran dalam proyek GitLab. Jika semuanya berjalan sesuai rencana, citra kita akan tetap ada. Tuliskan tautan ke tag gambar - kita memerlukannya untuk file .gitlab-ci.yml.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Bagian script dalam masalahnya deploy:multidev mulai berkembang, jadi mari kita pindahkan ke file terpisah. Buat file baru 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..."
fi

Script ada di direktori pribadi dan tidak mengizinkan akses web ke Pantheon. Kami memiliki skrip untuk logika multidev kami. Sekarang mari perbarui bagian tersebut deploy:multidev mengajukan .gitlab-ci.ymlsehingga menjadi seperti ini:

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_requests

Kita perlu memastikan bahwa tugas kita dilakukan pada gambar kustom yang dibuat, jadi mari tambahkan definisi image dari URL registri ke .gitlab-ci.yml. Hasilnya, kami mendapatkan file seperti ini .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_requests

Tambahkan, komit, dan kirim private/multidev-deploy.sh ΠΈ .gitlab-ci.yml. Sekarang kita kembali ke GitLab dan menunggu tugas CI/CD selesai. Bersabarlah: pembuatan multidev memerlukan waktu beberapa menit.

Lalu kita lihat daftar multidev di Pantheon. Oh keajaiban! Lingkungan multi-perangkat mr-2 sudah disini.

Cara Menghubungkan GitLab dan Pantheon serta Mengoptimalkan Alur Kerja Drupal dan WordPress

Kesimpulan

Tim saya menjadi lebih bersenang-senang ketika kami mulai membuka permintaan penggabungan dan membuat lingkungan secara otomatis.

Dengan alat canggih GitLab dan Pantheon, Anda dapat menghubungkan GitLab ke Pantheon secara otomatis.

Karena kami menggunakan GitLab CI/CD, alur kerja kami akan memiliki ruang untuk berkembang. Berikut beberapa ide untuk Anda mulai:

Beri tahu kami pendapat Anda tentang GitLab, Pantheon, dan otomatisasi.

PS Tahukah Anda bahwa Terminus, alat baris perintah Pantheon, dapat diperluas melalui plugin?

Kami di Pantheon telah melakukan pekerjaan dengan baik pada versi 2 kami plugin untuk alat pembuatan Terminus dengan dukungan GitLab. Jika Anda tidak ingin repot dengan pengaturan setiap proyek, coba plugin ini dan bantu kami menguji v2 beta. Untuk tim Terminus build:project:create Anda hanya memerlukan token Pantheon dan token GitLab. Dia akan menerapkan salah satu proyek sampel dengan Komposer dan pengujian otomatis, membuat proyek baru di GitLab, situs Pantheon baru, dan menghubungkannya menggunakan variabel lingkungan dan kunci SSH.

Tentang penulis

Andrew Taylor menciptakan alat untuk pengembang di Panteon.

Sumber: www.habr.com

Tambah komentar