ConcourseCIの玹介

コンコヌスCIロゎ


みなさんこんにちは Habréでは、 ConcourseCIなどのアセンブリサヌバヌに関する情報がほずんどないこずに気付きたした。 このギャップを埋めお簡単な玹介文を曞くこずにしたした。 このツヌルの猫の説明ず小さなチュヌトリアルの䞋。


したがっお、ConcourseCIはCI / CDビルドサヌバヌです。 Pivotalによっお開発されおおり、珟圚掻発に開発されおいたす。 䌚瀟自䜓にはこのプロゞェクトにフルタむムで取り組んでいる人が䜕人かいるため、珟圚、新しいバヌゞョンがかなり定期的にリリヌスされおおり、远加機胜が積極的に実装され、バグが迅速に修正されおいたす。 圓初、最も頻繁に起こるように、Pivo​​talはJenkinsに䞍満だったため、このツヌルを瀟内で䜿甚するために䜜成したしたが、埌にこのプロゞェクトをGithubに公開し、コミュニティが匕き継いだため、リリヌスはしばしばコミュニティのサヌドパヌティ開発者からの新しい機胜を思い付きたす。 完党にGoで曞かれおいたす。


この蚘事では



長所


この補品の䞻な利点をリストしたす。



コンコヌスCIメビンビュヌメむビンビュヌ


新しいデザむンは珟圚ベヌタモヌドですが、コミュニティによっお掻発に議論されおいるため、私のスクリヌンショットは近い将来に時代遅れになる可胜性がありたす。 新しいむンタヌフェむスは次のようになりたす。


ConcourseCI新しいベヌタデザン



蚭眮


前述したように、プロゞェクトはGoで蚘述されおいるため、このリリヌスには単䞀のバむナリファむルが付属しおおり、1぀のコマンドで実行できたす。 しかし、より良い方法がありたす。 ConcourseCIは公匏のdocker imageを提䟛するため、docker-composeを䜿甚しお、1぀のチヌムだけでプロゞェクトを開始できたす。


開始されたConcourseCIは、3぀の郚分で構成されおいたす。


  1. PostgreSQLデヌタベヌス
  2. コンコヌスWeb 。 これは䞀皮のマスタヌです。 グラフィカルWebむンタヌフェむスず、最も重芁なこずは、航空から借甚した ATC  「ATC」たたは「航空亀通管制」ずいう甚語これは、管制官がフラむトを監芖する滑走路近くの空枯にあるフラむトコントロヌルタワヌです。 ATCはリ゜ヌスを割り圓お、さたざたなタスクを実行し、クラスタヌを監芖したす。 実際のアセンブリはConcourse Webでは発生せず、アセンブリを管理するだけで、アクセス可胜なワヌカヌにタスクを委任するこずに泚意しおください。 メむンのConcourse Webシステムは1぀だけ存圚できたす。
  3. コンコヌスワヌカヌ -ここで実際の䜜業が行われたす。 ワヌカヌは、ATCからタスクを受け取り、それを実行しお、結果を報告したす。 システムには、十分な鉄があるのず同じ数のそのようなワヌカヌが存圚する可胜性がありたす。 1぀のサヌバヌ/むンスタンスで1぀のワヌカヌを実行するこずをお勧めしたす。

したがっお、完党に機胜するサヌバヌは、1぀のdocker-composeコマンドで起動できたす。 ただし、ATCは暗号化されたチャネルを介しおワヌカヌず通信し、開始する前に䞡偎でキヌをスリップする必芁があるため、最初の開始前にキヌを生成する必芁がありたす。 次のようなキヌを生成したす。


mkdir -p keys/web keys/worker ssh-keygen -t rsa -f ./keys/web/tsa_host_key -N '' ssh-keygen -t rsa -f ./keys/web/session_signing_key -N '' ssh-keygen -t rsa -f ./keys/worker/worker_key -N '' cp ./keys/worker/worker_key.pub ./keys/web/authorized_worker_keys cp ./keys/web/tsa_host_key.pub ./keys/worker 

その埌、このファむルを䜿甚しおシステム党䜓を起動できたす公匏ファむルはこちらを参照 。


 version: '3' services: concourse-db: image: postgres:9.6 environment: POSTGRES_DB: concourse POSTGRES_USER: concourse POSTGRES_PASSWORD: changeme PGDATA: /database concourse-web: image: concourse/concourse links: [concourse-db] command: web depends_on: [concourse-db] ports: ["8080:8080"] volumes: ["./keys/web:/concourse-keys"] restart: unless-stopped # required so that it retries until concourse-db comes up environment: CONCOURSE_BASIC_AUTH_USERNAME: concourse CONCOURSE_BASIC_AUTH_PASSWORD: changeme CONCOURSE_EXTERNAL_URL: "${CONCOURSE_EXTERNAL_URL}" CONCOURSE_POSTGRES_HOST: concourse-db CONCOURSE_POSTGRES_USER: concourse CONCOURSE_POSTGRES_PASSWORD: changeme CONCOURSE_POSTGRES_DATABASE: concourse concourse-worker: image: concourse/concourse privileged: true links: [concourse-web] depends_on: [concourse-web] command: worker volumes: ["./keys/worker:/concourse-keys"] environment: - CONCOURSE_TSA_HOST=concourse-web:2222 

Webむンタヌフェむスを䜿甚できるWebアドレスの実際の倀を倉数CONCOURSE_EXTERNAL_URLに゚クスポヌトするこずを忘れないでください。


 export CONCOURSE_EXTERNAL_URL=http://192.168.99.100:8080 

ご芧のずおり、この䟋ではすべおを1台のマシンで実行しおいたすが、誰もこれに制限するものではなく、ニヌズに応じお分散クラスタヌを安党に䜜成できたす。


起動埌、ブラりザでサヌバヌアドレスを開くこずができ䞊蚘の䟋-http://192.168.99.100:8080 、ただ空のConcourse Webが衚瀺されたす。


むンストヌルの詳现に぀いおは、 こちらをご芧ください 。


3぀のコンセプト


ですから、ビゞネスに取りかかる前に、お互いを理解するために甚語を芋おみたしょう。 ConcourseCIは3぀の基本抂念で動䜜したす。


  1. リ゜ヌス -アセンブリの材料を提䟛できるリ゜ヌス、たたはアセンブリの結果によっお曎新できるリ゜ヌス。 兞型的な䟋git / hgリポゞトリ、docker-register、FTP、S3、チャット、電子メヌル、電報ボットなど。 完党なリストはこちらです 。さらに、Githubの広倧さでい぀でも䜕かを芋぀けるこずができ、極端な堎合は自分で曞くこずができたす 。 リ゜ヌスは特定の䜜業を行わず、さらなるアクションのために資料を「提䟛する」だけであるこずを理解するこずが重芁です。


  2. タスクは、ビルドの䞀郚ずしお実行できる䜜業単䜍です。 タスクは、遞択したdockerコンテナヌで起動されたす。


  3. ゞョブ -タスク。 リ゜ヌスずタスクを1぀に結合したす。 ぀たり、割り圓お内でリ゜ヌスを取埗し、䜕らかの圢でタスクで凊理し、リ゜ヌスを収集しお結果を曎新したす。 1぀のタスクは完党に分離されおおり、䜕床でも別々に実行できたす。

Webむンタヌフェむスの倖芳


そしお、ブラりザヌではConcourseCIは次のようになりたす。


ConcourseCIの単玔なパニプレンの䟋


これはパむプラむンの非垞に単玔な䟋ですが、ここではGitリポゞトリから゜ヌスを取埗しおプロゞェクトの構築を開始し、ドッカヌむメヌゞを䜜成し、適切なリ゜ヌスを䜿甚しお電報チャネルの党員に通知する方法を芋るこずができたす。


このスクリヌンショットでは、リ゜ヌスずタスクのみが衚瀺されたすが、タスクは衚瀺されたせん。 ただし、タスクの1぀この䟋では1぀をクリックするず、緑色の四角酞塩の内郚で䜕が起こっおいるかを確認できたす。


コンコヌスCIオヌプンチンチ


この図では、数字にマヌクが付けられおいたす。


  1. 手動でタスクを開始するボタン。 い぀でも再実行できたす
  2. 以前のすべおのビルドは、履歎の圢匏で芋出しの䞋に長いチェヌンで配眮されたす
  3. ゜ヌスを取埗するリ゜ヌス。 䞋矢印は「取埗」を意味したす。぀たり、リ゜ヌスから玠材を「取埗」したす。
  4. 1぀のタスクの䜜業の終了。 このリンクを開いお、プロゞェクトのアセンブリ䞭に発生したコンテナのstdoutログを確認できたす。
  5. リ゜ヌスdockerむメヌゞを収集し、プラむベヌトレゞスタにドロップしたす。 䞊矢印はプットを意味したす。぀たり、リ゜ヌスを曎新しおいたす
  6. 最埌に、私達は私甚電報チャネルでメッセヌゞを投げたす

このむンタヌフェむスでは、すべおのパむプラむンずタスクを衚瀺し、結果を監芖できたす。


コンベダヌの完党に「高床な」バヌゞョンの䟋ずしお、 ConcourseCI自䜓のコンベダヌを匕甚できたす はい、驚くべきこずに、圌自身がそれを自分で組み立おる぀もりです:)


しかし、前述したように、ここのWebは読み取り専甚です。 合理的な疑問が生じたす。新しいコンベアをプロゞェクトに远加する方法は 飛ぶこずを玹介する時です。


飛ぶ


Flyは、タヌミナルからConcourseCIクラスタヌ党䜓を管理できるコマンドラむンナヌティリティです。 皌働䞭のコンピュヌタヌにむンストヌルされ、サヌバヌを管理したす。 これにより、必芁なすべおの操䜜を実行し、クラスタヌを維持できたす。


このコマンドのヘルプ出力小さな郚分


 $ fly help Usage: fly [OPTIONS] <command> Application Options: -t, --target= Concourse target name -v, --version Print the version of Fly and exit --verbose Print API requests and responses --print-table-headers Print table headers even for redirected output Help Options: -h, --help Show this help message Available commands: abort-build Abort a build (aliases: ab) builds List builds data (aliases: bs) check-resource Check a resource (aliases: cr) checklist Print a Checkfile of the given pipeline (aliases: cl) containers Print the active containers (aliases: cs) destroy-pipeline Destroy a pipeline (aliases: dp) destroy-team Destroy a team and delete all of its data (aliases: dt) execute Execute a one-off build using local bits (aliases: e) .....  .. 

チヌムはGoで蚘述された1぀のバむナリでもありたす。 githubからダりンロヌドできたすが、Webむンタヌフェヌスの䞋郚にあるリンクを䜿甚しおダりンロヌドする方が䟿利です。
ダりンロヌドフラむ
/usr/bin/flyにドロップしお実行したす。


これで、flyがむンストヌルされたした。 ConcourseCIを開始するには、サヌバヌに察しお認蚌する必芁がありたす。 これは非垞に簡単に行われたす


$ fly --target office login --concourse-url=http://ci.your.concouce.server.com


どこで



コマンドを入力するず、ナヌザヌ名ずパスワヌドの入力を求められたす。 むンストヌル䞭にdocker-compose.ymlファむルで指定したデヌタを入力したす CONCOURSE_BASIC_AUTH_USERNAMEおよびCONCOURSE_BASIC_AUTH_PASSWORD 、䞊蚘を参照


$ fly helpたたはドキュメントペヌゞで入力するず、䜿甚可胜なすべおのコマンドのリストを芋぀けるこずができたす 。


ログむンに成功するず、すでに䜜業を開始できたす。 このコマンドで最初のパむプラむンを䜜成できるずしたしょう


$ fly -t office sp -c pipeline.yml -p my-pipeline-name


ここで



このコマンドを実行した埌、ブラりザヌでConcourseCIを開き、新しいパむプラむンを確認できたす。 最初は䞀時停止されたす。 新しいパむプラむンをアクティブにするには、ブラりザの青い「▞」ボタンをクリックしたす


ConcourseCIは䞀時的に停止したしたパプリアンを䜜成したした


たたはチヌムを䜿甚する


$ fly -t office unpause-pipeline -p my-pipeline-name


パむプラむン構成


パむプラむンの蚘述がどのように進行しおいるかを怜蚎する時が来たした。 ファむルはYAML圢匏で蚘述され、プロゞェクトの゜ヌスず同じリポゞトリに、぀たりコヌドに「近い」ように保存できたす。 蚀い換えれば、各プロゞェクトは「自分自身を組み立おる方法を知っおいる」ず蚀うこずができたす。これは、構成がその䞭にあるためです。 これは非垞に䟿利です。各プログラマヌは完党なアセンブリの詳现ず埮劙さを確認できるため、開発に圹立぀こずは間違いありたせん。


ファむルは、リ゜ヌスの宣蚀リ゜ヌスずタスクの説明ゞョブのいく぀かの郚分に分割できたす。 たずえば、Javaプロゞェクトの単玔なパむプラむンを䜜成したしょう。 この堎合、Gitリポゞトリから゜ヌスを取埗し、Gradleを䜿甚しおテストを実行しおプロゞェクトをビルドし、ビルド結果をAmazon S3クラりドにドロップしたす。


リ゜ヌスから始めたしょう。 それらはリ゜ヌスのセクションで説明されおいたす。 この堎合、GitリポゞトリずAWS S3の2぀のリ゜ヌスを宣蚀する必芁がありたす。


 resources: - name: source-code type: git source: uri: git@your-project.git branch: master private_key: | ......... - name: aws-s3-release type: s3 source: bucket: releases regexp: directory_on_s3/release-(.*).tgz access_key_id: ........ secret_access_key: ........ 

任意の名前-nameを付けたす。これにより、これらのリ゜ヌスにアクセスし、同じ名前でブラりザヌにリ゜ヌスが衚瀺されたす。


次に、3぀のこずを行う1぀のゞョブを䜜成したす。


  1. 宣蚀されたsource-codeリ゜ヌスからsource-code
  2. プロゞェクトを集める
  3. aws-s3-releaseデプロむする

タスクに぀いおは、 jobsセクションで説明しおいたす。奜きなだけ䜜成できたす。 簡単な䟋では、「プロゞェクトのビルド」ずいう名前のタスクを1぀だけ実行しおいたす。


 jobs: - name: "Build project" plan: #   - get: source-code trigger: true #   ,    #    - task: "Build gradle project" config: platform: linux image_resource: type: docker-image source: {repository: "chickenzord/alpine-gradle", tag: "latest" } inputs: - name: source-code outputs: - name: result-jar run: path: sh args: - -exc - | cd source-code gradle test gradle build #    output, #       cp build/libs/app.jar ../result-jar #    S3 - put: aws-s3-release params: file: result-jar/app.jar acl: public-read 

この䟋をさらに詳しく芋おいきたしょう。


リ゜ヌスのすべおは明確です。それを-getずしお宣蚀し- get 。これは、デヌタを取埗するこずを意味したす。 trigger: trueパラメヌタヌは、リ゜ヌスが曎新されるたびにタスク自䜓が起動されるこずを意味したすこの堎合、誰かがコミットし、コミットを開始したこずを意味したす。 必芁に応じお、より具䜓的なパラメヌタヌを指定できたす。これは、正しいリ゜ヌスのドキュメントに蚘茉されおいたす 。


タスクタスク。 ご存知のように、ここで実際のアクションが行われたす。 タスクには、留意すべき2぀のプロパティがありたす。


  1. 受信および送信デヌタ 入力および出力 を持぀こずができたす
  2. Dockerコンテナヌで開始したす実際には、すべおがコンテナヌで開始されたすが、タスクでは明瀺的にむメヌゞを指定する必芁がありたす。

この䟋では、1぀の入力゜ヌスのみを指定したした。


  inputs: - name: source-code 

受信゜ヌスは、リ゜ヌスたたは以前に起動された別のタスクのいずれかですたずえば、チェヌンでタスクを実行し、䞭間結果を次のタスクに枡すこずができたす。 実際には、これはコンテナヌ内に同じ名前のフォルダヌがあり、ConcourseCIがこのフォルダヌ内にリ゜ヌスのコンテンツこの堎合はgitリポゞトリヌのコンテンツをきちんず配眮するこずを意味したす。 そのため、タスクの本文で最初に行ったこずは、このフォルダヌ cd source-code に移動するこずでした。ここで、Javaプロゞェクトの゜ヌスコヌドを取埗したす。


たた、アセンブリに䜿甚するdockerむメヌゞを指定する必芁がありたす。 ここでのロゞックは非垞に単玔です。特定のプロゞェクト甚のすべおのビルドツヌルがあるコンテナが必芁です。 私の堎合、Javaのプロゞェクトはgreadによっおアセンブルされるため、コンテナヌ内には必芁なバヌゞョンのJavaずgread自䜓が必芁だず蚀えたす。 たずえば、 この画像は機胜し、私のタスクに最適です。 このむメヌゞを次のように構成で指定したす。


 config: platform: linux image_resource: type: docker-image source: {repository: "chickenzord/alpine-gradle", tag: "latest" } 

このコンテナ内で、Gredlのタスクを起動できたす。これはデモずしお行いたす。


  cd source-code gradle test gradle build 

はい、ビルド環境に非垞に特定の芁件がある堎合、独自のドッカヌむメヌゞを収集しおプラむベヌトレゞスタに保存するこずは難しくありたせん。ConcourseCIはどこからでも簡単にむメヌゞをアップロヌドできたす。


この䟋では、1぀のYAMLファむルで可胜な限り明確になるようにすべおを十分に詳现に説明したこずにも泚意しおください。 ただし、タスクは別のYAMLファむルに移動できたす 。 異なるプロゞェクトでタスクを再利甚するのはずおも䟿利です。 この堎合、タスクは2行のみで宣蚀されたすが、その「本文」は個別に保存されたす。


  - task: hello-world file: path/to/my_task.yml 

runコマンドにも同じこずが圓おはたりたす。その内容はシェルスクリプトに入れお1぀のコマンドで参照できるため、コヌドが短くなりたす。 たずえば、スクリプトをロヌカルでテストしたり、 単䜓テストでカバヌしたい堎合に䟿利です。 この堎合、タスクは次のようになりたす。


 - task: "Run altogether" config: platform: linux image_resource: type: docker-image source: repository: somedocker/image tag: latest run: path: path/to/script.sh 

スクリプトが暙準のUNIX 出力結果を返すこずを忘れないでください0-すべおが正垞であり、他の数倀ぱラヌです。 この方法でのみ、ConcourseCIはあなたのチヌムが成功したかどうかを知るこずができたす。


最埌に、2番目のリ゜ヌスに぀いお簡単に説明したす。これを-putず宣蚀したす。これは、゜ヌスコヌドの堎合のように、それからデヌタを取埗しないこずを意味したす。


蚭定ファむルの準備ができたら、任意の名前たずえば、 pipeline.ymlでファむルに保存し、次のコマンドでリモヌトConcourseCIサヌバヌ䞊でパむプラむンを䜜成/曎新する必芁がありたす。


$ fly -t office sp -c pipeline.yml -p my-pipeline-name


その埌、ブラりザを開いお、䜜成たたは曎新されたパむプラむンを確認したす。 gitリポゞトリにコミットするず、自動的に開始されたす


ConcourseCIパレヌドの最初の起動


この倧きな正方圢「プロゞェクトのビルド」ゞョブをクリックするず、詳现が衚瀺されたす。 画面䞊のこれらのステップはすべお「展開」しお、コン゜ヌルの出力を衚瀺できたす。


ConcourseCIはタックス、詳现、タックスを開封したす


秘密


私の䟋では、コヌド内で盎接秘密パスワヌド、キヌを保護しおいるこずがわかりたした。 もちろん、実際のプロゞェクトでは、セキュリティ䞊の考慮事項を考慮する䟡倀はありたせん。YAMLファむルは䞀般的なリポゞトリにあるからです。 すべおの秘密は別々に保管する必芁がありたす。 コンコヌスでは、パむプラむンの曎新時にのみ実際の倀に眮き換えられる特別な゚むリアスを䜿甚できたす。 パスワヌドず秘密鍵を二重角括匧で囲たれたプレヌスホルダヌに眮き換えたずしたしょう


 - name: source-code type: git source: uri: git@your-project.git branch: master private_key: ((git-pivate-key)) - name: aws-s3-release type: s3 source: bucket: releases regexp: directory_on_s3/release-(.*).tgz access_key_id: ((aws-access-key)) secret_access_key: ((aws-secret-key)) 

そしお、すべおの倀を含むYAML圢匏のパスワヌドずキヌたずえば、 credentials-ci.yml を䜿甚しお、ロヌカルファむルコンピュヌタヌたたは他の安党なストレヌゞにのみ安党に保存されたすを䜜成したす。


 aws-access-key: "myawsaccesskey" aws-secret-key: "myawssecretkey" ftp-password: "my-secure-password" git-pivate-key: | -----BEGIN RSA PRIVATE KEY----- ............ 

そしお、今床は--load-vars-fromオプションを䜿甚しお、 --load-vars-from実際の倀に眮き換える必芁がありたす。 したがっお、完党なパむプラむンの䜜成/曎新コマンドは次のようになりたす。


fly -t office sp -c pipeline.yml -p my-pipeline-name --load-vars-from ~/credentials-ci.yml


これで、パむプラむンは共通のリポゞトリに保存され、パスワヌドは安党な堎所にある管理者のコンピュヌタヌにのみ保存されたす。 これで、少なくずもパブリックgithubにビルドコンフィギュレヌタヌを安党に残すこずができたす。


たたは、 暙準のVaultツヌルのリ゜ヌスを䜿甚できたす 。


なぜタスクが必芁なのですか


おそらく、私の䟋を芋るず、なぜゞョブずタスクが必芁で、なぜそれらを単䞀の党䜓に結合できないのか疑問に思っおいたすたずえば、これはGitLabCIで行われたす 。 1぀のタスクを小さなステップに分割する必芁があるのはなぜですか 良い質問です。䟋を挙げお説明したす。


蚭蚈䞊、 ゞョブは分離されたタスクであり、コンベアの他の郚分に䟝存したせん。 これは、い぀でも起動できるこずを意味し、事前のアクションは必芁ありたせん。 すべおの䞭間および最終操䜜は内郚で行われ、倖郚ではすべおが単䞀のステップのように芋えたす。 したがっお、アセンブリ内に個別に存圚できない操䜜がある堎合、すべおの䟝存ステップを1぀のタスクに結合する必芁がありたす。 これは、䞀方では困難になりたす。1぀のタスクに集䞭しすぎるゞェスチャが倚すぎるため、もう䞀方には、プロセスを論理的なステップに分割する優れたツヌルがありたす。タスクです。 さらに、各タスクは異なるツヌルを䜿甚できたす。


より明確にするために、より耇雑な䟋を考えおみたしょう。 前の段萜で、たった1぀のチヌム gradle build組み立おられた単玔なプロゞェクトの䟋を挙げたした。 しかし、これは垞に起こるずは限りたせん。 叀兞的なモノリスの䟋を芋おみたしょう。フロント゚ンド、バック゚ンド、すべおすべおが同じリポゞトリにある単䞀のプロゞェクトです。 そのようなプロゞェクトの組み立おはどうですか すべおの仮想ステップをリストしたす。



それで、私たちは䜕を数えたすかフルビルドを行うには、システムにnpm、gulp、gitsshに䟝存する、go、govendorが必芁です。芚えおいるように、ConcourseCIのアセンブリはdockerコンテナで実行されるため、ロゞックは、カスタムdockerむメヌゞを構築し、䞊蚘のすべおをそこに入れお、プラむベヌトレゞスタに配眮するのが良いこずを瀺しおいたす。このむメヌゞには必芁なものがすべお含たれおおり、その䞭に必芁なコマンドを実行できたす-git、npm、およびgo はい、この方法は機胜したすが、もちろんそうする䟡倀はありたせん。そしお、ここでは、1぀のタスクゞョブをさたざたな小さなドッカヌコンテナヌで起動される倚くのサブタスクに分割するず䟿利です。そのため、次のようなタスクがありたす。


  1. NPM䟝存関係をロヌドし、クラむアント偎を構築したす。
  2. Git
  3. Go

, , . (job), -, .


, , . — NPM, Gulp , — git ssh , — go-vendor . , , , !


, , ? ! ConcourseCI aggregate , , , . , , , , , :


  ╭  NPM ,   Gulp build 1. ┹ Git version ╰  Go  2.   go build 

, ( source-code docker-example-image ):


 ... jobs: - name: "Build monolith example" plan: - get: source-code trigger: true #     aggregate, #     - aggregate: # Build the frontend (SASS and Javascript) - task: "Build frontend, compile SASS, download dependencies" config: platform: linux image_resource: type: docker-image source: repository: 'monostream/nodejs-gulp-bower' inputs: - name: source-code outputs: - name: compiled-assets run: path: sh args: - -ec - | cd source-code/ #   npm install #   gulp build #     outputs, #       cp -r dist/* ../compiled-assets/ - task: "Download GO dependencies" config: platform: linux image_resource: type: docker-image source: repository: "electrotumbao/go-govendor" inputs: - name: source-code #    Go:    #     #      #     #   path path: src/authorName/repoName outputs: - name: vendor-output run: path: sh args: - -ec - | export GOPATH GOPATH="$(pwd)" cd src/authorName/repoName/ || exit #       output, #       govendor fetch -v +out cp -r vendor/* "$GOPATH"/vendor-output - task: "Update GIT commit details" config: platform: linux image_resource: type: docker-image source: { repository: 'alpine/git', tag: "latest"} inputs: - name: source-code outputs: - name: versioned-file run: path: sh args: - -ec - | #        cd source-code GITSHA=$(git rev-parse HEAD) GITAUTHOR=$(git log --format='%an %ae' -1) GITDATE=$(git log --format='%aD' -1) TODAY=$(date) #    -   , #     sed sed ... #       output, #       cp version.config ../versioned-file/ #  ,     #   ,     - task: "Build Source Code" config: platform: linux image_resource: type: docker-image source: {repository: "golang", tag: "alpine" } #  inputs    #       inputs: - name: source-code path: src/authorName/repoName - name: versioned-file - name: compiled-assets - name: vendor-output outputs: - name: output-for-docker run: path: sh args: - -ec - | set -e export GOPATH GOPATH="$(pwd)" cd src/daxi.re/cyprus-tours/ || exit #          cp -r "$GOPATH"/compiled-assets/* ./assets/ cp -r "$GOPATH"/vendor-output/* ./vendor #    go test # ,   CGO_ENABLED=0 GOOS=linux go build -a -o app . #   -    #           . #   ,     -. #       # docker-example-image (. )      #        output cp app "$GOPATH"/output-for-docker/ cp Dockerfile "$GOPATH"/output-for-docker/ #  ,   , #  -    #   , #       #  Dockerfile # (     ) - put: docker-example-image params: { build: output-for-docker } get_params: {rootfs: true} 

, .


ConcourseCIコンベダヌ


, , (job). , . , : NPM , — Go ( ). .


ConcourseCIでのコンカレントアセンブリプロセス


, , :


ConcourseCIはタスクを正垞にアセンブルしたした


出来䞊がり , ! . , -.


, . . , ! !


:



UPD 15.3.2018: , , .



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


All Articles