#artifact #build #manager #reproducible #storage #commit #cacheable

app タネリーアー

ビルドアートフィクトのストレージサービス

1 不安定リリース

0.1.0 2022年8月28日

#14 in #reproducible

AGPL-3.0-only

75KB
2K SLoC

タネリーアー

タネリーアーはキャッシュ可能で再現可能なビルドを作成するためのアートフィクト管理ツール

現在は本格的な開発中であり、安定性の保証はありません。

目標

  • アトミックにアートフィクトをコミットし、いかなる修正も禁止
  • ローカルファイルシステムとHTTPおよび他のプロトコルを使用してアクセスを許可
  • アートフィクトとしてDockerコンテナを使用
  • ビルド時間に関するメタデータを付属し、すべてのソースをリスト
  • "このアートフィクトのこのコミットから最新のビルドを取得してください"

使用方法

  1. ビルドジョブを作成します(例:マルチブランチパイプラインJenkins)
node { 
    def results
    stage('Checkout') { 
        results = checkout scm
    }

    def artifact_uuid
    def artifact_url
    stage('Reserve') { 
        sh "printenv | sort"
        def res = sh(returnStdout: true, script: "tcli artifact reserve rust_builder --src main,git,${results.GIT_URL},${results.GIT_COMMIT} --tag builder:jenkins --tag branch:${env.BRANCH_NAME} --tag build_id:${env.BUILD_ID}").trim().split('\n')
        artifact_uuid = res[0]
        artifact_url = res[1]
    }

    stage('Build') { 
        sh "docker build -t ${artifact_url} rust_builder"
    }

    stage('Push') { 
        sh "docker push ${artifact_url}"
    }

    stage('Commit') { 
        sh "tcli artifact commit ${artifact_uuid}"
    }
}

  1. 他のジョブで最後のアートフィクトを取得したりビルドをリクエスト
node { 
    def results
    stage('Checkout') { 
        results = checkout scm
    }

    def artifact_uuid
    def artifact_url
    def commit = 'fbedbd91c89194519b857ea12d691753bab515f9'
    def repo = '/Users/snarpix/Documents/rust_builder'
    stage('Get') { 
        sh "printenv | sort"
        try {
            def res = sh(returnStdout: true, script: "tcli artifact last rust_builder --src main,git,$repo,$commit").trim().split('\n')
            reserve_uuid = res[0]
            artifact_uuid = res[1]
            artifact_url = res[2]
        } catch (e) {
            // Use bitbucket or gihub api to add a tag
            // If no API - use clone filter
            // Or just clone whole repo to add a tag
            sh "git clone $repo"
            dir('rust_builder') {
                sh "git co $commit"
                sh "git tag -a tag_123 -m 'tag_123'"
                sh "git push origin tag_123"
            }
            build(job: "rust_builder", wait: false)
            // No way to wait for multibranch pipeline scan to finish
            // Poll
            for (int i=0; i < 13; i++) {
                try {
                    build(job: "rust_builder/tag_123")
                    break;
                } catch(hudson.AbortException nested_e) {
                    if (nested_e.getMessage() != "No item named rust_builder/tag_123 found") {
                        throw nested_e;
                    }
                    sleep(10);
                }
            }
            // Now build is finished and we can use new artifact
            def res = sh(returnStdout: true, script: "tcli artifact last rust_builder --src main,git,$repo,$commit").trim().split('\n')
            reserve_uuid = res[0]
            artifact_uuid = res[1]
            artifact_url = res[2]
        }
        sh "echo $reserve_uuid $artifact_uuid $artifact_url"
    }
}

貢献

このプロジェクトに対する貢献を提出することで、あなたの貢献はAGPL-3.0ライセンスの下で許可されること、およびメインテナーに対して、あなたの貢献を他のライセンスの下で再ライセンスする権利を認めることになります。

これはプロジェクトの将来の確保のために必要です。私がGPL 2.0ライブラリを使用する必要がある場合、私はプロジェクト全体をGPL 2.0ライセンスの下で再ライセンスすることができますが、各貢献者個々に尋ねる必要はありません。

形式言語で言えば

メインテナーはStanislav Shmarov [email protected]です。貢献は、このプロジェクトに含めるために提出されたコード、ドキュメント、または他のオリジナル作品です。貢献者は、貢献を提出する個人または会社です。このプロジェクトに貢献を提出することで、貢献者はメインテナーに対して、以下のライセンス条項の下で貢献およびその派生物の複製、変換、翻訳、変更、派生物の作成、公開表示、公開演奏、サブライセンス、利用可能にし、配布するための不可変更、永続的、全世界、非独占的、無料で完全支払われた著作権および商業秘密ライセンスを許可します。メインテナーが選択するライセンス条項、包括的でオープンソースソフトウェアライセンスまたは商用ライセンスを含みます。

ライセンス

AGPL-3.0

依存関係

~54MB
~1M SLoC