GNU/Linux >> Belajar Linux >  >> Linux

Mengotomatiskan rilis upstream dengan rilis-bot

Jika Anda memiliki atau memelihara repo GitHub dan pernah mendorong paket darinya ke PyPI dan/atau Fedora, Anda tahu itu memerlukan beberapa pekerjaan tambahan menggunakan infrastruktur Fedora.

Kabar baik:Kami telah mengembangkan alat bernama release-bot yang mengotomatiskan proses. Yang perlu Anda lakukan adalah mengajukan masalah ke repositori upstream Anda dan release-bot menangani sisanya. Tapi mari kita tidak mendahului diri kita sendiri. Pertama, mari kita lihat apa yang perlu disiapkan agar otomatisasi ini terjadi. Saya telah memilih meta-test-family repositori hulu sebagai contoh.

File konfigurasi untuk rilis-bot

Ada dua file konfigurasi untuk release-bot:conf.yaml dan release-conf.yaml .

conf.yaml

conf.yaml harus dapat diakses selama inisialisasi bot; itu menentukan cara mengakses repositori GitHub. Untuk menunjukkan itu, saya telah membuat repositori git baru bernama mtf-release-bot , yang berisi conf.yaml dan file rahasia lainnya.

nama_repositori:nama
pemilik_repositori:pemilik
# https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
github_token:xxxxxxxxxxxxxxxxxxxxxxxxx
# waktu dalam detik selama pemeriksaan untuk rilis baru
refresh_interval:180

Untuk kasus meta-test-family, file konfigurasi terlihat seperti ini:

repository_name:meta-test-family
repository_owner:fedora-modularity
github_token:xxxxxxxxxxxxxxxxxxxxx
refresh_interval:180

release-conf.yaml

release-conf.yaml harus disimpan dalam repositori itu sendiri; itu menentukan bagaimana melakukan rilis GitHub/PyPI/Fedora.

# daftar versi python utama yang bot akan membuat roda terpisah untuk
python_versions:
 - 2
  - 3
# opsional:
changelog:
 - Contoh entri changelog
  - Entri changelog lain
# ini adalah info untuk pembuatan changelog
# jika ini tidak disetel, orang yang menggabungkan PR rilis akan digunakan sebagai penulis
author_name:John Doe
author_email:[email protected]
# apakah akan dirilis di fedora. False secara default
fedora:false
# daftar bot cabang fedora harus dirilis. Guru selalu tersirat
fedora_branches:
 - f27

Untuk kasus meta-test-family, file konfigurasi terlihat seperti ini:

python_versions:
-       2
fedora:true
fedora_branches:
-       f29
-       f28
trigger_on_issue:true

File konfigurasi PyPI

Berkas .pypirc , disimpan di mtf-release-bot . Anda repositori pribadi, diperlukan untuk mengunggah versi paket baru ke PyPI:

[pypi]
nama pengguna =phracek
sandi =xxxxxxxxx

Kunci SSH pribadi, id_rsa , yang Anda konfigurasikan di FAS.

Struktur akhir dari repositori git, dengan conf.yaml dan yang lainnya, tampilannya seperti ini:

$ ls -la
total 24
drwxrwxr-x   3 phracek phracek 4096 24 Sep 12:38 .
drwxrwxr-x. 20 phracek phracek 4096 24 Sep 12:37 ..
-rw-rw-r--   1 phracek phracek  199 24 Sep 12:26 conf.yaml
drwxrwxr-x   8 phracek phracek 4096 24 Sep 12:38 .git
-rw-rw-r--   1 phracek phracek 3243 24 Sep 12:38 id_rsa
-rw-------   1 phracek phracek   78 24 Sep 12:28 .pypirc

Persyaratan

Lebih Banyak Sumber Daya Python

  • Apa itu IDE?
  • Lembar cheat:Python 3.7 untuk pemula
  • Kerangka kerja GUI Python teratas
  • Unduh:7 pustaka PyPI penting
  • Pengembang Topi Merah
  • Konten Python terbaru

Merilis ke PyPI memerlukan paket wheel untuk Python 2 dan Python 3, jadi instal requirements.txt dengan kedua versi pip. Anda juga harus menyiapkan detail login PyPI Anda di $HOME/.pypirc , seperti yang dijelaskan dalam dokumentasi PyPI. Jika Anda merilis ke Fedora, Anda harus memiliki tiket Kerberos aktif saat bot berjalan, atau tentukan jalur ke file tab kunci Kerberos dengan -k/–keytab . Juga, fedpkg mengharuskan Anda memiliki kunci SSH di gantungan kunci yang Anda unggah ke FAS.

Cara menerapkan rilis-bot

Ada dua cara untuk menggunakan release-bot:sebagai image Docker atau sebagai template OpenShift.

Gambar buruh pelabuhan

Mari buat gambar menggunakan s2i perintah:

$ s2i build $CONFIGURATION_REPOSITORY_URL usercont/release-bot app-name 

di mana $CONFIGURATION_REPOSITORY_URL adalah referensi ke repositori GitHub, seperti https:///mtf-release-conf.

Mari kita lihat gambar Docker:

 $ gambar docker 
repositori ID gambar ID yang dibuat ukuran
mtf-rilis-bot Latest 08897871E65E 6 menit yang lalu 705 MB
docker.io/usercont/release-bot Terbaru 5B34AA670639 9 hari yang lalu 705 MB

Sekarang mari kita coba menjalankan mtf-release-bot gambar dengan perintah ini:

$ docker run mtf-release-bot
---> Menyiapkan kunci ssh...
Agent pid 12
Identitas ditambahkan:./.ssh/id_rsa (./. ssh/id_rsa)
12:21:18.982 configuration.py  DEBUG  Konfigurasi yang dimuat untuk fedora-modularity/meta-test-family
12:21:18.982 releasebot.py      INFO   release-bot v0.4.1 pelaporan untuk duty!
12:21:18.982 github.py          DEBUG  Mengambil release-conf.yaml
12:21:37.611 releasebot.py      DEBUG  Tidak ditemukan PR rilis gabungan
12:21:38.282 releasebot. py      INFO   Menemukan masalah rilis baru dengan versi:0.8.5
12:21:42.565 releasebot.py      DEBUG  Tidak ada lagi masalah terbuka yang ditemukan
12:21:43.190 releasebot.py      INFO   Membuat PR baru untuk rilis versi 0.8.5 berdasarkan masalah.
12:21:46.709 utils.py           DEBUG  ['git', 'clone', 'https://github.com/fedora-modularity/meta-test-family. git', '.']

12:21:47.401 github.py          DEBUG  {"message":"Cabang tidak ditemukan","documentation_url":"https://developer.github.com/ v3/repos/cabang hes/#get-branch"}
12:21:47.994 utils.py           DEBUG  ['git', 'config', 'user.email', '[email protected]']

12:21:47.996 utils.py           DEBUG  ['git', 'config', 'user.name', 'Release bot']

12:21:48.009 utils. py           DEBUG  ['git', 'checkout', '-b', '0.8.5-release']

12:21:48.014 utils.py           ERROR  File versi tidak ditemukan. Membatalkan pembaruan versi.
12:21:48.014 utils.py           PERINGATAN Tidak ada CHANGELOG.md dalam repositori
[Errno 2] Tidak ada file atau direktori seperti itu:'/tmp/tmpmbvb05jq/CHANGELOG.md'
12:21:48.020 utils.py           DEBUG  ['git', 'commit', '--allow-empty', '-m', '0.8.5 release']
[0.8.5-release 7ee62c6] 0.8.5 rilis

12:21:51.342 utils.py           DEBUG  ['git', 'push', 'origin', '0.8.5-release']

12:21:51.905 github.py          DEBUG  Tidak ditemukan PR terbuka
12:21:51.905 github.py          DEBUG  Mencoba PR untuk cabang rilis 0.8.5
12:21:53.215 github.py INFO   Membuat PR:https://github.com/fedora-modularity/meta-test-family/pull/243
12:21:53.216 releasebot.py      INFO   Saya baru saja membuat permintaan PR untuk rilis versi 0.8. 5
12:21:54.154 github.py          DEBUG  Komentar ditambahkan ke PR:Saya baru saja membuat permintaan PR untuk rilis versi 0.8.5
 Berikut adalah [link ke PR](https://github .com/fedora-modularity/meta-test-family/pull/2 43)
12:21:54.154 github.py          DEBUG  Mencoba menutup masalah #242
12:21:54.992 github.py          DEBUG  Menutup masalah #242

Seperti yang Anda lihat, release-bot secara otomatis menutup masalah berikut, meminta rilis upstream baru dari meta-test-family:https://github.com/fedora-modularity/meta-test-family/issues/243.

Selain itu, release-bot membuat PR baru dengan changelog. Anda dapat memperbarui PR—misalnya, squash changelog—dan setelah Anda menggabungkannya, PR akan dirilis secara otomatis ke GitHub, dan PyPI serta Fedora akan dimulai.

Anda sekarang memiliki solusi yang berfungsi untuk merilis versi upstream paket Anda ke PyPi dan Fedora dengan mudah.

Template OpenShift

Opsi lain untuk mengirimkan rilis otomatis menggunakan release-bot adalah dengan menerapkannya di OpenShift.

Template OpenShift terlihat sebagai berikut:

kind:Template
apiVersion:v1
metadata:
  name:release-bot
  annotations:
    description:S2I Relase-bot image builder
tags:release-bot s2i
    iconClass:icon-python
labels:
  template:release-bot
  peran:releasebot_application_builder
objects:
  - kind :ImageStream
    apiVersion :v1
    metadata :
        name :${APP_NAME}
        labels :
          appid :release-bot-${APP_NAME}
  - kind :ImageStream
    apiVersion :v1
    metadata :
      name :${APP_NAME}-s2i
      labels :
        appid :release-bot-${APP_NAME}
    spec :
      tags :
        - name :recent
          from :
            kind :DockerImage
            name :usercont/release-bot:latest  

         #  scheduled:true
  - kind :BuildConfig
    apiVersion :v1
    metadata :
      name :${APP_NAME}
      labels :
        appid :release-bot-${APP_NAME}
    spec :
      triggers :
        - type :ConfigChange
        - type :ImageChange
source :
        type :Git
        git :
          uri :${CONFIGURATION_REPOSITORY}
          contextDir :${CONFIGURATION_REPOSITORY } 
-secret
      strategi :
        type :Source
        sourceStrategy :
          from :
            kind :ImageStreamTag
       {   _nama} />      output :
        to :
          kind :ImageStreamTag
          name :${APP_NAME}:latest
  - kind :DeploymentConfig
    apiVersion   

      name:${APP_NAME}
      labels :
        appid :release-bot-${APP_NAME}
    spec :
      strategi :
        type :Rolling
      pemicu :
         - type :ConfigC Hange
- Tipe:ImageChange
Imagechangeparams:
Otomatis:Benar
Conesername:
- $ {app_name}
Dari:
Kind:ImageStreamtag
               name :${APP_NAME}:latest
      replicas :1
      selector :
        deploymentconfig :${APP_NAME}
      template :
   >          labels :
            appid:release-bot-${APP_NAME}
            deploymentconfig :${APP_NAME}
        spec :
                    name     _
              gambar :${APP_NAME}:latest
              sumber daya:
                permintaan:
                  memori:"64 Mi" />                  memory:"128Mi"
                  cpu:"100m"

parameter :
  - name :APP_NAME
    description :Nama ap plication
    nilai :
    diperlukan :true
  - nama :CONFIGURATION_REPOSITORY
    description :Repositori Git dengan konfigurasi
    nilai :
    diperlukan :true

Cara termudah untuk menerapkan mtf-release-bot repositori dengan file rahasia ke dalam OpenShift adalah dengan menggunakan dua perintah berikut:

$ curl -sLO https://github.com/user-cont/release-bot/raw/master/openshift-template.yml 

Dalam instance OpenShift Anda, terapkan template dengan menjalankan perintah berikut:

oc process -p APP_NAME="mtf-release-bot" -p CONFIGURATION_REPOSITORY="git@<git_lab_path>/mtf-release-conf.git" -f openshift-template.yml | oc apply 

Ringkasan

Lihat contoh permintaan tarik di repositori upstream meta-test-family, di mana Anda akan menemukan informasi tentang rilis-bot apa yang dirilis. Setelah Anda mencapai titik ini, Anda dapat melihat bahwa release-bot mampu mendorong versi upstream baru ke GitHub, PyPI, dan Fedora tanpa campur tangan pengguna yang berat. Ini mengotomatiskan semua langkah sehingga Anda tidak perlu mengunggah dan membuat versi upstream baru dari paket Anda secara manual.


Linux
  1. Pelacakan kernel dengan trace-cmd

  2. 3 rilis Linux favorit saya

  3. Bagaimana cara membangun modul kernel Linux agar kompatibel dengan semua rilis kernel?

  1. Perintah Nohup dengan Contoh

  2. Perintah JQ di Linux dengan Contoh

  3. Menambal Biner Dengan Dd?

  1. Instal Linux dengan LVM

  2. Ganti du dengan debu di Linux

  3. Perintah wc Linux dengan Contoh