GNU/Linux >> Linux の 問題 >  >> Linux

release-botを使用したアップストリームリリースの自動化

GitHubリポジトリを所有または維持していて、パッケージをPyPIやFedoraにプッシュしたことがある場合は、Fedoraインフラストラクチャを使用して追加の作業が必要になることをご存知でしょう。

朗報:プロセスを自動化するrelease-botと呼ばれるツールを開発しました。あなたがする必要があるのはあなたのアップストリームリポジトリに問題を提出することだけであり、release-botが残りを処理します。しかし、自分より先に進まないようにしましょう。まず、この自動化を実現するために何を設定する必要があるかを見てみましょう。 メタテストファミリーを選択しました 例としてアップストリームリポジトリ。

release-botの構成ファイル

release-botには2つの構成ファイルがあります: conf.yaml およびrelease-conf.yaml

conf.yaml

conf.yaml ボットの初期化中にアクセス可能である必要があります。 GitHubリポジトリにアクセスする方法を指定します。これを示すために、 mtf-release-botという名前の新しいgitリポジトリを作成しました 、 conf.yamlが含まれています およびその他の秘密のファイル。

repository_name: name
repository_owner: owner
# https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/
github_token: xxxxxxxxxxxxxxxxxxxxxxxxx
# time in seconds during checks for new releases
refresh_interval: 180

meta-test-familyの場合、構成ファイルは次のようになります。

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

release-conf.yaml

release-conf.yaml リポジトリ自体に保存する必要があります。 GitHub / PyPI/Fedoraリリースの実行方法を指定します。

# list of major python versions that bot will build separate wheels for
python_versions:
 - 2
  - 3
# optional:
changelog:
 - Example changelog entry
  - Another changelog entry
# this is info for the authorship of the changelog
# if this is not set, person who merged the release PR will be used as an author
author_name: John Doe
author_email: [email protected]
# whether to release on fedora. False by default
fedora: false
# list of fedora branches bot should release on. Master is always implied
fedora_branches:
 - f27

meta-test-familyの場合、構成ファイルは次のようになります。

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

PyPI構成ファイル

ファイル.pypirc mtf-release-botに保存されています プライベートリポジトリは、新しいパッケージバージョンをPyPIにアップロードするために必要です:

[pypi]
username = phracek
password = xxxxxxxx

プライベートSSHキー、 id_rsa 、FASで構成したもの。

conf.yamlを使用したgitリポジトリの最終構造 その他、次のようになります:

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

要件

その他のPythonリソース

  • IDEとは何ですか?
  • チートシート:初心者向けのPython 3.7
  • 上位のPythonGUIフレームワーク
  • ダウンロード:7つの重要なPyPIライブラリ
  • RedHat開発者
  • 最新のPythonコンテンツ

PyPIにリリースするには、Python2とPython3の両方のホイールパッケージが必要なので、 requirements.txtをインストールしてください 両方のバージョンのpipで。また、 $ HOME / .pypircでPyPIログインの詳細を設定する必要があります 、PyPIドキュメントで説明されているように。 Fedoraにリリースする場合は、ボットの実行中にアクティブなKerberosチケットが必要です。または、-k/–keytabを使用してKerberoskeytabファイルへのパスを指定する必要があります。 。また、 fedpkg FASにアップロードしたキーリングにSSHキーが含まれている必要があります。

release-botをデプロイする方法

release-botを使用するには、DockerイメージまたはOpenShiftテンプレートとして2つの方法があります。

Dockerイメージ

s2iを使用してイメージを作成しましょう コマンド:

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

ここで、$CONFIGURATION_REPOSITORY_URL https:// /mtf-release-confのようなGitHubリポジトリへの参照です。

Dockerイメージを見てみましょう:


リポジトリタグ画像のID CREATED SIZE
MTF-リリースボット最新08897871e65e 6分MB 705前
docker.io/usercont/release-bot最新5b34aa670639 9日前$ドッカ画像
$ docker images
REPOSITORY                                      TAG                     IMAGE ID                CREATED                 SIZE
mtf-release-bot                         latest                  08897871e65e            6 minutes ago           705 MB
docker.io/usercont/release-bot                  latest                  5b34aa670639            9 days ago              705 MB

それでは、 mtf-release-botを実行してみましょう。 このコマンドを使用した画像:

$ docker run mtf-release-bot
---> Setting up ssh key...
Agent pid 12
Identity added: ./.ssh/id_rsa (./.ssh/id_rsa)
12:21:18.982 configuration.py  DEBUG  Loaded configuration for fedora-modularity/meta-test-family
12:21:18.982 releasebot.py      INFO   release-bot v0.4.1 reporting for duty!
12:21:18.982 github.py          DEBUG  Fetching release-conf.yaml
12:21:37.611 releasebot.py      DEBUG  No merged release PR found
12:21:38.282 releasebot.py      INFO   Found new release issue with version: 0.8.5
12:21:42.565 releasebot.py      DEBUG  No more open issues found
12:21:43.190 releasebot.py      INFO   Making a new PR for release of version 0.8.5 based on an issue.
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":"Branch not found","documentation_url":"https://developer.github.com/v3/repos/branches/#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  No version files found. Aborting version update.
12:21:48.014 utils.py           WARNING No CHANGELOG.md present in repository
[Errno 2] No such file or directory: '/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 release

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

12:21:51.905 github.py          DEBUG  No open PR's found
12:21:51.905 github.py          DEBUG  Attempting a PR for 0.8.5-release branch
12:21:53.215 github.py          INFO   Created PR: https://github.com/fedora-modularity/meta-test-family/pull/243
12:21:53.216 releasebot.py      INFO   I just made a PR request for a release version 0.8.5
12:21:54.154 github.py          DEBUG  Comment added to PR: I just made a PR request for a release version 0.8.5
 Here's a [link to the PR](https://github.com/fedora-modularity/meta-test-family/pull/243)
12:21:54.154 github.py          DEBUG  Attempting to close issue #242
12:21:54.992 github.py          DEBUG  Closed issue #242

ご覧のとおり、release-botは次の問題を自動的にクローズし、meta-test-familyの新しいアップストリームリリースをリクエストしました:https://github.com/fedora-modularity/meta-test-family/issues/243。

さらに、release-botはchangelogを使用して新しいPRを作成しました。 PR(スカッシュチェンジログなど)を更新できます。PRをマージすると、自動的にGitHubにリリースされ、PyPIとFedoraが起動します。

これで、パッケージのアップストリームバージョンをPyPiとFedoraに簡単にリリースするための実用的なソリューションができました。

OpenShiftテンプレート

release-botを使用して自動リリースを配信する別のオプションは、OpenShiftにデプロイすることです。

OpenShiftテンプレートは次のようになります:

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
  role: 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 : latest
          from :
            kind : DockerImage
            name : usercont/release-bot:latest
         #importPolicy:
         #  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}
        sourceSecret :
          name : release-bot-secret
      strategy :
        type : Source
        sourceStrategy :
          from :
            kind : ImageStreamTag
            name : ${APP_NAME}-s2i:latest
      output :
        to :
          kind : ImageStreamTag
          name : ${APP_NAME}:latest
  - kind : DeploymentConfig
    apiVersion : v1
    metadata :
      name: ${APP_NAME}
      labels :
        appid : release-bot-${APP_NAME}
    spec :
      strategy :
        type : Rolling
      triggers :
         - type : ConfigChange
         - type : ImageChange
           imageChangeParams :
             automatic : true
             containerNames :
              - ${APP_NAME}
             from :
               kind : ImageStreamTag
               name : ${APP_NAME}:latest
      replicas : 1
      selector :
        deploymentconfig : ${APP_NAME}
      template :
        metadata :
          labels :
            appid: release-bot-${APP_NAME}
            deploymentconfig : ${APP_NAME}
        spec :
          containers :
            - name : ${APP_NAME}
              image : ${APP_NAME}:latest
              resources:
                requests:
                  memory: "64Mi"
                  cpu: "50m"
                limits:
                  memory: "128Mi"
                  cpu: "100m"

parameters :
  - name : APP_NAME
    description : Name of application
    value :
    required : true
  - name : CONFIGURATION_REPOSITORY
    description : Git repository with configuration
    value :
    required : true

mtf-release-botをデプロイする最も簡単な方法 OpenShiftへのシークレットファイルを含むリポジトリーは、次の2つのコマンドを使用します。

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

OpenShiftインスタンスで、次のコマンドを実行してテンプレートをデプロイします。

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

概要

メタテストファミリーのアップストリームリポジトリにあるプルリクエストの例を参照してください。ここには、リリースボットがリリースしたものに関する情報があります。この時点に到達すると、release-botがユーザーの多大な介入なしに新しいアップストリームバージョンをGitHub、PyPI、およびFedoraにプッシュできることがわかります。すべての手順が自動化されるため、パッケージの新しいアップストリームバージョンを手動でアップロードしてビルドする必要はありません。


Linux
  1. trace-cmdを使用したカーネルトレース

  2. 例を含むNohupコマンド

  3. LinuxでのJQコマンドと例

  1. 私のお気に入りの3つのLinuxリリース

  2. Ddでバイナリにパッチを適用しますか?

  3. すべてのカーネル リリースと互換性があるように Linux カーネル モジュールをビルドするにはどうすればよいですか?

  1. LVMを使用してLinuxをインストールする

  2. Linuxでduをdustに置き換えます

  3. 例を含むwcLinuxコマンド