Goでのプログラムの配布。 パート1

最近、Goでのプログラムのインストールに関するかなり良い記事を読みました。 「任意の」(UNIXに対応した)オペレーティングシステムでバイナリのインストールを実装する方法の簡単な例を示しました。 このトピックについて、より詳細なシリーズの記事を書くことにしました。



画像





小さな目次





githubリリースでアプリケーションをビルドおよびデプロイします。 パート1



CI / CD



この例では、TinyJPGプロジェクトを使用し、 Travis-ciで収集します。



.travis.ymlファイルをプロジェクトに追加して、アセンブリのシーケンスを記述します



.travis.yml
language: go go: - tip # The latest version of Go. install: true env: global: - MYAPP=tinyjpg - MYEMAIL=youmail@example.com - secure: ${GH_TOKEN} before_install: - sudo apt-get -qq update install: - go get -u github.com/OrlovEvgeny/$MYAPP - cd $GOPATH/src/github.com/OrlovEvgeny/$MYAPP - go install # build the app,build the package before_deploy: - mkdir -p build/{386,amd64} - GOOS=linux GOARCH=386 go build --ldflags "-X main.version=${TRAVIS_TAG} -X main.build=${TRAVIS_BUILD_NUMBER} -X main.commit=${TRAVIS_COMMIT}" -o build/386/${MYAPP}-386 *.go - GOOS=linux GOARCH=amd64 go build --ldflags "-X main.version=${TRAVIS_TAG} -X main.build=${TRAVIS_BUILD_NUMBER} -X main.commit=${TRAVIS_COMMIT}" -o build/amd64/${MYAPP}-amd64 *.go deploy: provider: releases email: ${MYEMAIL} api_key: secure: ${GH_TOKEN} file: - build/386/${MYAPP}-386 - build/amd64/${MYAPP}-amd64 skip_cleanup: true on: tags: true all_branches: true
      
      







次に、サブカテゴリの最も重要なものについてさらに説明します。

- $ {GH_TOKEN} :パーソナルアクセストークンにすぎません。GitHubの [開発者設定]セクションのアカウントの設定で生成できます。 クリアテキストでtravis.ymlに渡さないでください 。 travis-ci設定を使用して、このキーを環境変数として追加できます。



-before_deploy



  - mkdir -p build/{386,amd64} - GOOS=linux GOARCH=386 go build --ldflags "-X main.version=${TRAVIS_TAG} -X main.build=${TRAVIS_BUILD_NUMBER} -X main.commit=${TRAVIS_COMMIT}" -o build/386/${MYAPP}-386 *.go - GOOS=linux GOARCH=amd64 go build --ldflags "-X main.version=${TRAVIS_TAG} -X main.build=${TRAVIS_BUILD_NUMBER} -X main.commit=${TRAVIS_COMMIT}" -o build/amd64/${MYAPP}-amd64 *.go
      
      





GOOS = linux-プロジェクトをビルドするOS、GOARCH = 386 / GOARCH = amd64-プロセッサアーキテクチャ、x86、およびx86-64。 --ldflagsフラグは、グローバルパッケージバージョンに値を割り当て、ビルド、メインパッケージで宣言されている場合はコミットします。この場合、プロジェクトのバージョンとしてTRAVIS_TAGを割り当て、ビルド番号はTRAVIS_BUILD_NUMBERであり、プロジェクトが組み立てられたTRAVIS_COMMITコミットのハッシュです。 このアプローチは非常に便利であり、各ビルドで使用する必要があると思います。



- デプロイ

そして最後に、githubリリースでのバイナリの公開、おそらく最も重要なことは、プロバイダーです:リリース、少し上に書いた安全なトークン:$ {GH_TOKEN}、およびタグ:trueトリガー、これはデプロイのみを意味しますタグがgitに表示される場合、tags:trueは、アセンブリの便利なバージョン管理を維持するために必要です。



そのため、ビルドが完了すると、ビルドの成功/失敗に関する電子メール通知を受け取ります。すべてが正常であれば、 github.com / OrlovEvgeny / TinyJPG / releasesにAssetsが表示され、2つのバイナリがi386およびamd64アーキテクチャ用にコンパイルされます。 そして、ビルド後にパックされたソースコードと共に、ソースコードがアーカイブされます。



この例では、記事を同じ情報で膨らませないように、具体的には.travis.ymlでOSXとWindowsのアセンブリを作成しませんでした。



可能なGOOS値:





可能なGOARCH値:





一般に、Linux、Windows、およびfreebsdを使用すると、すべてが明確になります。 ダーウィンはMacOSです。 Android向けにコンパイルする場合(はい、それも可能です:)、GOOS = LinuxおよびGOARCH = armを選択する必要があります。



インストールする



アセンブリは終了しました、次は何ですか? この記事のインストール例を使用できます



またはスクリプトで少しきれいにする



install.sh
 VERSION="$1" PATH="$PATH:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" TARGET_DIR=/usr/local/bin/tinyjpg CONF_DIR=/etc/tinyjpg LOG_DIR=/var/log/tinyjpg PERM="chmod +x /usr/local/bin/tinyjpg" if [ `getconf LONG_BIT` = "32" ]; then ARCH="386" else ARCH="amd64" fi URL="https://github.com/OrlovEvgeny/TinyJPG/releases/download/$VERSION/tinyjpg-$ARCH" CONF_URL="https://raw.githubusercontent.com/OrlovEvgeny/TinyJPG/master/config.yml" if [ -n "`which curl`" ]; then download_cmd="curl -L $URL --output $TARGET_DIR" conf_download_cmd="curl -L $CONF_URL --output $CONF_DIR/config.yml" else die "Failed to download TinyJPG: curl not found, plz install curl" fi mkdir -p $CONF_DIR $LOG_DIR echo -n "Fetching TinyJPG from $URL: " $download_cmd || die "Error when downloading TinyJPG from $URL" $conf_download_cmd || die "Error when downloading config file TinyJPG from $CONF_URL" /bin/echo -e "Install TinyJPG: \x1B[32m done \x1B[0m" echo -n "Set permission execute TinyJPG: " $PERM || die "Error permission execut TinyJPG from $TARGET_DIR" /bin/echo -e "\x1B[32m done \x1B[0m" tinyjpg -v /bin/echo -e "\x1B[32m Finished \x1B[0m"
      
      







スクリプトをプロジェクトにコミットし、任意のOS(Unixで読む)でインストールを実行することができます。引数に1つの簡単なコマンドを使用します。



 curl -L https://raw.githubusercontent.com/OrlovEvgeny/TinyJPG/master/tinyjpg_install.sh | sh -s - v0.0.8
      
      





またはansibleを介して



 tasks: - name: TinyJPG installed sudo: yes shell: "curl -L https://raw.githubusercontent.com/OrlovEvgeny/TinyJPG/master/tinyjpg_install.sh | sh -s - v0.0.8"
      
      





これについては、Goでのプログラムの配布の最初のシリーズを完了すると思います。 次の記事では、golangアプリケーションからdeb / rpmパッケージをビルドする方法について説明します。 この記事に関するご意見やご提案をお待ちしております。



トピックについて:



Go言語でのインストールがより簡単に

トラビスが囲goプロジェクトを構築

Goでのクロスコンパイル



All Articles