GitHub meluncurkan tentakelnya dalam CI / CD dan manajemen artefak

Pada bulan Mei 2019, GitHub mengumumkan rilis layanan Package Registry. Setelah ini, sudah pada bulan Agustus, dukungan untuk CI / CD dalam Tindakan diumumkan .


Dalam artikel itu, saya akan memberi tahu Anda layanan apa dan bagaimana ini dapat digunakan pada contoh proyek hewan peliharaan kecil di GitHub.



Jenis layanan apa ini?


Tindakan GitHub adalah platform yang memungkinkan Anda untuk mengelola siklus hidup perangkat lunak, yang kode sumbernya di-host di GitHub. Faktanya, TravisCI, CircleCI dan banyak platform CI / CD gratis lainnya menerima pesaing baru sebagai persona dari Actions.


Registri Paket GitHub adalah gudang pusat artefak, saat ini ada lima jenis artefak yang didukung.


Jenis Artefak yang Didukung dalam Tindakan


Dukungan dalam TindakanAnalogiBahasa
Paket NPMhttps://www.npmjs.com/Javascript
Gambar Dockerhttps://hub.docker.com/-
Artefak Mavenhttps://mvnrepository.com/Jawa
Paket nugethttps://www.nuget.org/.NET
Permata Rubyhttps://rubygems.org/Ruby

Ini adalah kesempatan yang nyaman untuk memiliki semua artefak di satu tempat, karena tidak selalu disarankan untuk menggunakan Nexus atau server Artifactory Anda.


GitHub menjadi semakin mirip dengan GitLab, dan di suatu tempat ia telah melampaui lawan, misalnya, GitLab belum mendukung paket NuGet dan permata Ruby. Bahkan, jika sebelumnya untuk proyek open source Anda harus menghubungkan integrasi eksternal ke GitHub, sekarang semua telur berada dalam satu keranjang. Di sini biarkan semua orang memutuskan apakah itu baik atau buruk, tetapi setidaknya itu nyaman.


Bagaimana cara mencoba?


Kedua layanan saat ini dalam mode beta, Anda dapat mendaftar untuk tes beta di halaman ini .


Migrasi dari layanan lain sangat sederhana, saya memigrasikan beberapa proyek kesayangan saya dari TravisCI dan DockerHub ke Actions dan Package Registry.


Saya akan menunjukkan kepada Anda bagaimana tampilannya dalam satu contoh. Proyek ini adalah yang paling umum, saya menulis tentang itu di artikel ini . Tidak ada yang rumit, LaTeX-code biasa, dengan bantuan artefak dikumpulkan (2 file PDF), mereka diterbitkan dalam rilis GitHub. Agar tidak mengunduh banyak paket LaTeX, saya menulis Dockerfile sehingga Anda dapat bekerja dengan nyaman di bawah OS apa pun.


Paket pendaftaran


Untuk mulai bekerja dengan Package Registry alih-alih DockerHub, Anda hanya perlu mengambil dua langkah sederhana.
Kami membuat token di pengaturan GitHub (token harus memiliki hak untuk menulis dan membaca artefak).



Halaman Pembuatan Token


Dan kemudian kita dapat mengautentikasi dengan token yang dibuat dan mendorong artefak, begitulah sederhananya:


docker login docker.pkg.github.com --username amet13 docker tag docker-latex:0.0.1 docker.pkg.github.com/amet13/master-thesis/docker-latex:0.0.1 docker push docker.pkg.github.com/amet13/master-thesis/docker-latex:0.0.1 

Harap dicatat, saya secara khusus menunjukkan nama panggilan saya di GitHub dalam huruf kecil, jika tidak, Anda akan mendapatkan kesalahan dari Docker:


 Error parsing reference: "docker.pkg.github.com/Amet13/master-thesis/docker-latex:0.0.1" is not a valid repository/tag: invalid reference format: repository name must be lowercase 

Begini tampilannya di antarmuka web GitHub:



Paket Halaman Pendaftaran untuk Gambar Docker


Selain instruksi untuk mengunduh gambar terbaru, statistik unduhan tersedia, kemampuan untuk mengunduh lapisan Docker terpisah melalui antarmuka web, riwayat unduhan gambar tersedia.


Tindakan


Tindakannya sedikit lebih rumit, tetapi bagi mereka yang pernah bekerja dengan sistem CI / CD lainnya, itu tidak akan sulit untuk dipahami. Konfigurasi dalam Tindakan dijelaskan oleh YAML deklaratif, meskipun HCL digunakan sebelumnya.


Beberapa konsep dasar (saya tidak akan sengaja menerjemahkan definisi, saya pikir semuanya jelas di sini):


  • Workflow - suatu proses yang mengatur siklus hidup perangkat lunak (build, test, package, release, deploy) untuk repositori
  • File Workflow - file di mana Workflow dijelaskan, ia terletak di root repositori di direktori .github/workflows/
  • Pekerjaan adalah setiap menjalankan Workflow, Job dipicu, pada satu titik waktu banyak Pekerjaan dapat dimulai
  • Langkah - setiap Pekerjaan memiliki Langkah, di setiap Langkah Anda dapat menjalankan perintah atau Tindakan
  • Action - โ€œplug-inโ€ yang ditulis oleh seseorang, daftar banyak Tindakan dapat ditemukan di repositori aksi-mengagumkan
  • Lingkungan virtual - lingkungan tempat Ayub dijalankan (sebenarnya itu adalah mesin virtual pada Windows, macOS atau Linux)
  • Runner adalah lingkungan yang digunakan untuk meluncurkan Ayub, hanya satu Ayub dapat berjalan pada Runner pada suatu waktu
  • Peristiwa - peristiwa yang memicu Alur Kerja, misalnya, Push, Tarik Permintaan, Webhook, Pekerjaan Cron, dll.
  • Artefak - artefak (binari, gambar, log, dll.)


Inilah tampilan halaman Daftar Pekerjaan di Alur Kerja.


Keterbatasan dan Larangan:


  • 20 Alur kerja per repositori
  • 1000 permintaan API per jam untuk semua Tindakan di repositori
  • waktu kerja maksimum - 6 jam
  • 20 Pekerjaan dapat bekerja secara paralel di repositori (untuk semua Alur Kerja)
  • dilarang untuk menggunakan Tindakan untuk penambangan cryptocurrency dan komputasi tanpa server

Dokumentasi terbaru tersedia di tautan ini .



Dan di sini adalah log dari salah satu Ayub


Contoh


Mari kita kembali ke contoh, di sini seperti apa konfigurasi saya, kami akan menganalisisnya secara lebih rinci di beberapa bagian.


Tentukan nama untuk Alur kerja dan jelaskan pemicu mana yang harus dipicu (daftar semua pemicu dijelaskan dalam dokumentasi ):


 name: master-thesis on: [push] 

Di mana Virtual Environment menjalankan Pekerjaan:


 jobs: build: # ubuntu-latest, ubuntu-18.04, or ubuntu-16.04 # windows-latest, windows-2019, or windows-2016 # macOS-latest or macOS-10.14 runs-on: ubuntu-latest 

Langkah pertama, dalam name: tentukan nama Langkah (opsional), dan dalam uses: Tindakan mana yang ingin kita gunakan, dalam hal ini, kloning repositori:


  steps: - name: Checkout repo uses: actions/checkout@v1 

Pada langkah berikutnya, kita tidak menggunakan Action, tetapi hanya satu set perintah kita di mana kita masuk ke Package Registry, mengumpulkan gambar Docker dan mendorongnya ke repositori gambar. Di blok env: menetapkan variabel lingkungan, kami mengambil salah satunya dari rahasia:


  - name: Build docker image and push it to the registry env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} DOCKER_IMAGE_ORIGIN: "docker.pkg.github.com/amet13/master-thesis/docker-latex" run: | # Pull submodules git submodule init git submodule update --remote # Login to GitHub Packages and build Docker image docker login docker.pkg.github.com -u amet13 -p ${GITHUB_TOKEN} docker pull ${DOCKER_IMAGE_ORIGIN}:latest docker build -t ${DOCKER_IMAGE_ORIGIN}:${GITHUB_SHA} . # Generate PDF artifacts docker run --rm -i \ -v ${PWD}:/master-thesis:Z ${DOCKER_IMAGE_ORIGIN}:${GITHUB_SHA} \ bash -c "latexmk -xelatex -synctex=1 -jobname=master-thesis main.tex" docker run --rm -i \ -v ${PWD}:/master-thesis:Z ${DOCKER_IMAGE_ORIGIN}:${GITHUB_SHA} \ bash -c "cd presentation/ && latexmk -xelatex -synctex=1 -jobname=presentation main.tex" # Publish Docker image to GitHub Packages (with latest tag) docker tag ${DOCKER_IMAGE_ORIGIN}:${GITHUB_SHA} ${DOCKER_IMAGE_ORIGIN}:latest docker push ${DOCKER_IMAGE_ORIGIN}:${GITHUB_SHA} docker push ${DOCKER_IMAGE_ORIGIN}:latest 

Saya yakin bahwa dalam waktu dekat akan muncul Tindakan yang akan secara otomatis menandai dan mendorong gambar alih-alih menulis perintah Docker secara manual.



Menambahkan rahasia yang mengandung token github


Langkah selanjutnya setelah membuat PDF adalah membuat rilis di GitHub dan memasukkan artefak yang dikumpulkan dalam rilis ini. Untuk secara otomatis membuat rilis, kami menggunakan Aksi pihak ketiga , di mana di blok if: Anda dapat menentukan kondisi untuk meluncurkan langkah - hanya saat membuat tag:


  - name: Create GitHub release with artifacts uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/') with: files: | master-thesis.pdf presentation/presentation.pdf name: "Build ${GITHUB_SHA}" env: GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} 

Ringkasan


Terlepas dari status beta, kedua layanan berfungsi dengan baik, saya yakin banyak hal akan selesai.
Pada beberapa titik itu bisa merepotkan, tidak ada variabel global, tetapi ini bisa dilakukan dengan kruk .


Saya menyukai pendekatan GitHub untuk meninggalkan HCL demi YAML. Saya juga menyukai dukungan untuk banyak jenis host, yang sangat hemat (untuk saat ini), mari kita lihat bagaimana kelanjutannya. Secara umum, untuk saluran pipa sederhana di repositori publik di GitHub, sekelompok seperti itu akan bekerja dengan sangat baik.


Terjemahan artikel ini sudah dalam format medium .

Source: https://habr.com/ru/post/id468345/


All Articles