プラグむン、SMS、登録を䜿甚せずに、GKE でデプロむ タスクを䜜成したす。 ゞェンキンスのゞャケットの䞋を芗いおみたしょう

すべおは、開発チヌムの 20 ぀のチヌムリヌダヌが、前日にコンテナ化された新しいアプリケヌションをテストするように私たちに䟝頌したずきに始たりたした。 投皿したした。 XNUMX分ほど埌、非垞に必芁なものが远加されおいたため、アプリケヌションを曎新するように芁求されたした。 リニュヌアルしたした。 さらに数時間埌...たあ、次に䜕が起こり始めたかは想像できるでしょう...

正盎に蚀うず、私はかなり怠け者です (これを以前に認めたせんでしたか? いいえ?)。チヌム リヌダヌがすべおの CI/CD を持っおいる Jenkins にアクセスできるずいう事実を考慮しお、圌に次のようにデプロむさせようず思いたした。圌が望むだけ 私はゞョヌクを思い出したした。「人に魚を䞀匹䞎えれば、䞀日食べられるでしょう。」 ある人を「Fed」ず呌ぶず、その人は䞀生Fedされるこずになる。 そしお、行っおきたした 仕事䞭にいたずらをするこれにより、正垞に構築されたバヌゞョンのアプリケヌションを含むコンテナを Kuber にデプロむし、それに任意の倀を転送できるようになりたす。 ENV 私の祖父は文献孊者で、昔は英語の教垫でしたが、今ではこの文を読んだ埌、こめかみで指を回し、非垞に衚情豊かに私を芋぀めおいたした。

そこで、このメモでは、私がどのように孊んだかを説明したす。

  1. Jenkins でゞョブ自䜓たたは他のゞョブからゞョブを動的に曎新したす。
  2. Jenkins ゚ヌゞェントがむンストヌルされおいるノヌドからクラりド コン゜ヌル (Cloud Shell) に接続したす。
  3. ワヌクロヌドを Google Kubernetes Engine にデプロむしたす。


実際のずころ、もちろん私は倚少䞍誠実なずころもありたす。 むンフラストラクチャの少なくずも䞀郚が Google クラりドにあるこずを前提ずしおいたす。したがっお、あなたはそのナヌザヌであり、圓然 GCP アカりントを持っおいたす。 しかし、それはこのメモの内容ではありたせん。

これが次回のチヌトシヌトです。 私はそのようなメモをXNUMX぀のケヌスでのみ曞きたいず思いたす。問題に盎面したしたが、最初はそれを解決する方法がわかりたせんでした。解決策は既補のものではなく、Googleで怜玢したため、郚分的にGoogleで怜玢し、最終的に問題を解決したした。 そしお、将来、どのようにやったかを忘れたずきに、すべおをもう䞀床グヌグルで調べおたずめおたずめる必芁がなくなるように、そのようなカンニングペヌパヌを自分で曞きたす。

免責事項 1. そのメモは「自分のため」、圹のために曞かれた ベストプラクティス 適甚されたせん。 コメントで「こうしたほうがよかった」ずいう遞択肢を読んでうれしく思いたす。
2. ノヌトの適甚郚分が塩であるずみなされる堎合、これたでのすべおのノヌトず同様、これは匱い塩溶液です。

Jenkins でのゞョブ蚭定の動的曎新

あなたの質問は予想通りです: 動的ゞョブ曎新はそれずどのような関係があるのですか? 文字列パラメヌタの倀を手動で入力するず、䜜業が始たりたす。

私は答えたす私は本圓に怠け者です、圌らが文句を蚀うのは奜きではありたせんミヌシャ、デプロむメントがクラッシュしおいたす、すべおが消えおいたす 調べ始めるず、タスク起動パラメヌタの倀にタむプミスがありたした。 したがっお、私はすべおをできるだけ効率的に行うこずを奜みたす。 代わりに遞択できる倀のリストを提䟛するこずで、ナヌザヌがデヌタを盎接入力できないようにできる堎合は、遞択内容を敎理したす。

蚈画は次のずおりです。Jenkins でゞョブを䜜成したす。ゞョブを起動する前に、リストからバヌゞョンを遞択し、コンテナヌに枡されるパラメヌタヌの倀を指定したす。 ENV、次に、コンテナヌを収集し、それをコンテナヌ レゞストリにプッシュしたす。 次に、そこからコンテナが cuber で次のように起動されたす。 ワヌクロヌド ゞョブで指定されたパラメヌタを䜿甚したす。

Jenkins でゞョブを䜜成しお蚭定するプロセスに぀いおは考慮したせん。これは本題から倖れたす。 タスクの準備ができおいるず仮定したす。 バヌゞョンを含む曎新されたリストを実装するには、事前に有効なバヌゞョン番号を含む既存の゜ヌス リストず次のような倉数の XNUMX ぀が必芁です。 遞択パラメヌタ タスクの䞭で。 この䟋では、倉数に次の名前を付けたす。 ビルド_バヌゞョン、これに぀いおは詳しく説明したせん。 しかし、゜ヌスリストを詳しく芋おみたしょう。

遞択肢はそれほど倚くありたせん。 すぐに次の XNUMX ぀のこずが思い浮かびたした。

  • Jenkins がナヌザヌに提䟛するリモヌト アクセス API を䜿甚したす。
  • リモヌト リポゞトリ フォルダヌのコンテンツをリク゚ストしたす (この堎合、これは JFrog Artifactory ですが、これは重芁ではありたせん)。

Jenkins リモヌト アクセス API

確立された優れた䌝統に埓っお、長々ずした説明は避けたいず思いたす。
最初の段萜の䞀郚のみを自由に翻蚳するこずを蚱可したす API ドキュメントの最初のペヌゞ:

Jenkins は、その機胜ぞのリモヌトの機械読み取り可胜なアクセスのための API を提䟛したす。 <
> リモヌト アクセスは REST のようなスタむルで提䟛されたす。 これは、すべおの機胜ぞの単䞀の゚ントリ ポむントはなく、代わりに「」のような URL が存圚するこずを意味したす。.../api/"、 どこ "..." は、API 機胜が適甚されるオブゞェクトを意味したす。

蚀い換えれば、珟圚話しおいる展開タスクが次の堎所で利甚できる堎合、 http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_buildの堎合、このタスクの API ホむッスルは次の堎所から入手できたす。 http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/

次に、出力をどの圢匏で受け取るかを遞択したす。 この堎合、API ではフィルタリングのみが蚱可されるため、XML に焊点を圓おたしょう。

すべおのゞョブ実行のリストを取埗しおみたしょう。 アセンブリ名のみに関心がありたす (displayName) ずその結果 (結果):

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]

それは動䜜したしたか

次に、結果が埗られる実行のみをフィルタリングしたしょう 成功。 匕数を䜿っおみたしょう 陀倖(&X) そしおパラメヌタずしお、等しくない倀ぞのパスを枡したす。 成功。 はいはい。 二重吊定はステヌトメントです。 興味のないものはすべお陀倖したす。

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!='SUCCESS']

成功したリストのスクリヌンショット
プラグむン、SMS、登録を䜿甚せずに、GKE でデプロむ タスクを䜜成したす。 ゞェンキンスのゞャケットの䞋を芗いおみたしょう

そうですね、楜しみのために、フィルタヌが私たちを欺いおいないこずを確認しお (フィルタヌは決しお嘘を぀きたせん!)、「倱敗した」フィルタヌのリストを衚瀺しおみたしょう。

http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result='SUCCESS']

倱敗したもののリストのスクリヌンショット
プラグむン、SMS、登録を䜿甚せずに、GKE でデプロむ タスクを䜜成したす。 ゞェンキンスのゞャケットの䞋を芗いおみたしょう

リモヌトサヌバヌ䞊のフォルダヌからのバヌゞョンのリスト

バヌゞョンのリストを取埗する XNUMX 番目の方法がありたす。 私は Jenkins API にアクセスするよりもこの方法の方が奜きです。 アプリケヌションが正垞に構築されたずいうこずは、アプリケヌションがパッケヌゞ化され、適切なフォルダヌのリポゞトリに配眮されたこずを意味するためです。 同様に、リポゞトリはアプリケヌションの動䜜バヌゞョンのデフォルトのストレヌゞです。 のように。 では、ストレヌゞにどのバヌゞョンがあるのか​​聞いおみたしょう。 リモヌト フォルダヌに察しお、curl、grep、および awk を実行したす。 ワンラむナヌに興味がある人は、スポむラヌの䞋にありたす。

䞀行コマンド
XNUMX ぀のこずに泚意しおください。ヘッダヌで接続の詳现を枡したす。フォルダヌ内のすべおのバヌゞョンは必芁なく、XNUMX か月以内に䜜成されたバヌゞョンのみを遞択したす。 珟実ずニヌズに合わせおコマンドを線集したす。

curl -H "X-JFrog-Art-Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

Jenkins でのゞョブずゞョブ構成ファむルのセットアップ

バヌゞョンのリストの゜ヌスを特定したした。 結果のリストをタスクに組み蟌みたしょう。 私にずっお、明らかな解決策は、アプリケヌションのビルド タスクにステップを远加するこずでした。 結果が「成功」の堎合に実行されるステップ。

アセンブリ タスクの蚭定を開き、䞀番䞋たでスクロヌルしたす。 次のボタンをクリックしたす。 ビルドステップの远加 -> 条件付きステップ単䞀。 ステップ蚭定で条件を遞択したす 珟圚のビルドステヌタス、倀を蚭定したす 成功、成功した堎合に実行されるアクション シェルコマンドを実行する.

ここからが楜しいずころです。 Jenkins はゞョブ構成をファむルに保存したす。 XML 圢匏。 途䞭で http://путь-ЎП-заЎаМОя/config.xml したがっお、構成ファむルをダりンロヌドし、必芁に応じお線集し、入手した堎所に戻すこずができたす。

バヌゞョンのリストのパラメヌタを䜜成するこずに䞊蚘で同意したこずを思い出しおください。 ビルド_バヌゞョン?

構成ファむルをダりンロヌドしお、その䞭身を芋おみたしょう。 パラメヌタヌが適切に配眮され、目的のタむプであるこずを確認するためです。

スポむラヌの䞋のスクリヌンショット。

config.xml フラグメントは同じように芋えるはずです。 ただし、choices 芁玠の内容がただ欠萜しおいたす。
プラグむン、SMS、登録を䜿甚せずに、GKE でデプロむ タスクを䜜成したす。 ゞェンキンスのゞャケットの䞋を芗いおみたしょう

本気ですか これで、ビルドが成功した堎合に実行されるスクリプトを䜜成したしょう。
スクリプトはバヌゞョンのリストを受け取り、構成ファむルをダりンロヌドし、必芁な堎所にバヌゞョンのリストを曞き蟌み、それを元に戻したす。 はい。 それは正しい。 バヌゞョンのリストが既に存圚する堎所 (将来、スクリプトの最初の起動埌に远加されたす) に、XML でバヌゞョンのリストを曞き蟌みたす。 䞖界には正芏衚珟の熱烈なファンがただいるこずを私は知っおいたす。 私は圌らに属しおいたせん。 むンストヌルしおください xmlスタヌラヌ 構成を線集するマシンにコピヌしたす。 sed を䜿甚した XML の線集を避けるために支払う代償は、それほど倧きなものではないず思われたす。

スポむラヌの䞋に、䞊蚘のシヌケンス党䜓を実行するコヌドを瀺したす。

リモヌトサヌバヌ䞊のフォルダヌからバヌゞョンのリストを構成ファむルに曞き蟌みたす

#!/bin/bash
############## СкачОваеЌ кПМфОг
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## УЎаляеЌ О заМПвП сПзЎаеЌ xml-элеЌеМт Ўля спОска версОй
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## ЧОтаеЌ в ЌассОв спОсПк версОй Оз репПзОтПрОя
readarray -t vers < <( curl -H "X-JFrog-Art-Api:Api:VeryLongAPIKey" -s http://arts.myre.po/artifactory/awesomeapp/ | sed 's/a href=//' | grep "$(date +%b)-$(date +%Y)|$(date +%b --date='-1 month')-$(date +%Y)" | awk '{print $1}' | grep -oP '>K[^/]+' )

############## ПОшеЌ ЌассОв элеЌеМт за элеЌеМтПЌ в кПМфОг
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## КлаЎеЌ кПМфОг взаЎ
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## ПрОвПЎОЌ рабПчее ЌестП в пПряЎПк
rm -f appConfig.xml

Jenkins からバヌゞョンを取埗するオプションを奜み、私ず同じくらい怠け者である堎合は、スポむラヌの䞋に同じコヌドがありたすが、Jenkins からのリストが衚瀺されたす。

Jenkins からのバヌゞョンのリストを構成に曞き蟌みたす
この点に泚意しおください。アセンブリ名は、コロンで区切られたシヌケンス番号ずバヌゞョン番号で構成されたす。 したがっお、awk は䞍芁な郚分を切り捚おたす。 自分自身のニヌズに合わせおこの行を倉曎しおください。

#!/bin/bash
############## СкачОваеЌ кПМфОг
curl -X GET -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml -o appConfig.xml

############## УЎаляеЌ О заМПвП сПзЎаеЌ xml-элеЌеМт Ўля спОска версОй
xmlstarlet ed --inplace -d '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' appConfig.xml

xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]' --type elem -n a appConfig.xml

xmlstarlet ed --inplace --insert '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a' --type attr -n class -v string-array appConfig.xml

############## ПОшеЌ в файл спОсПк версОй Оз Jenkins
curl -g -X GET -u username:apiKey 'http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_build/api/xml?tree=allBuilds[displayName,result]&exclude=freeStyleProject/allBuild[result!=%22SUCCESS%22]&pretty=true' -o builds.xml

############## ЧОтаеЌ в ЌассОв спОсПк версОй Оз XML
readarray vers < <(xmlstarlet sel -t -v "freeStyleProject/allBuild/displayName" builds.xml | awk -F":" '{print $2}')

############## ПОшеЌ ЌассОв элеЌеМт за элеЌеМтПЌ в кПМфОг
printf '%sn' "${vers[@]}" | sort -r | 
                while IFS= read -r line
                do
                    xmlstarlet ed --inplace --subnode '/project/properties/hudson.model.ParametersDefinitionProperty/parameterDefinitions/hudson.model.ChoiceParameterDefinition[name="BUILD_VERSION"]/choices[@class="java.util.Arrays$ArrayList"]/a[@class="string-array"]' --type elem -n string -v "$line" appConfig.xml
                done

############## КлаЎеЌ кПМфОг взаЎ
curl -X POST -u username:apiKey http://jenkins.mybuild.er/view/AweSomeApp/job/AweSomeApp_k8s/config.xml --data-binary @appConfig.xml

############## ПрОвПЎОЌ рабПчее ЌестП в пПряЎПк
rm -f appConfig.xml

理論的には、䞊蚘の䟋に基づいお蚘述されたコヌドをテストした堎合、展開タスクにはバヌゞョンを含むドロップダりン リストがすでに存圚しおいるはずです。 スポむラヌの䞋のスクリヌンショットのような感じです。

正しく完成したバヌゞョンのリスト
プラグむン、SMS、登録を䜿甚せずに、GKE でデプロむ タスクを䜜成したす。 ゞェンキンスのゞャケットの䞋を芗いおみたしょう

すべおがうたくいった堎合は、スクリプトをコピヌしお貌り付けたす。 シェルコマンドを実行する そしお倉曎を保存したす。

クラりドシェルぞの接続

コンテナにコレクタヌがいたす。 圓瀟では、アプリケヌション配信ツヌルおよび構成マネヌゞャヌずしお Ansible を䜿甚しおいたす。 したがっお、コンテナヌを構築する堎合、Docker を Docker にむンストヌルする、Ansible を実行しおいるマシンに Docker をむンストヌルする、たたはクラりド コン゜ヌルでコンテナヌを構築するずいう XNUMX ぀のオプションが思い浮かびたす。 この蚘事では Jenkins のプラグむンに぀いおは沈黙するこずに同意したした。 芚えお

私は次のように刀断したした。「すぐに䜿える」コンテナヌはクラりド コン゜ヌルで収集できるのですから、わざわざ行う必芁はありたせん。 きれいにしおおいおくださいね クラりド コン゜ヌルで Jenkins コンテナを収集し、そこから cuber で起動したいず考えおいたす。 さらに、Google のむンフラストラクチャ内には非垞に豊富なチャネルがあり、展開の速床に有益な効果をもたらしたす。

クラりド コン゜ヌルに接続するには、次の XNUMX ぀のものが必芁です。 gクラりド およびアクセス暩 GoogleクラりドAPI これず同じ接続が確立される VM むンスタンスの堎合。

Google Cloud 以倖から接続する予定がある方ぞ
Google は、そのサヌビスで察話型認蚌を無効にする可胜性を蚱可しおいたす。 これにより、*nix を実行しおいおコン゜ヌル自䜓がある堎合は、コヌヒヌマシンからでもコン゜ヌルに接続できるようになりたす。

このメモの枠組みの䞭でこの問題をさらに詳しく説明する必芁がある堎合は、コメントに曞いおください。 十分な祚が集たったら、このトピックに぀いお最新情報を曞きたす。

暩利を付䞎する最も簡単な方法は、Web むンタヌフェむスを䜿甚するこずです。

  1. 埌でクラりド コン゜ヌルに接続する VM むンスタンスを停止したす。
  2. 「むンスタンスの詳现」を開き、「むンスタンスの詳现」をクリックしたす。 修正したす.
  3. ペヌゞの䞀番䞋で、むンスタンスのアクセス範囲を遞択したす すべおのクラりド API ぞのフルアクセス.

    スクリヌンショット
    プラグむン、SMS、登録を䜿甚せずに、GKE でデプロむ タスクを䜜成したす。 ゞェンキンスのゞャケットの䞋を芗いおみたしょう

  4. 倉曎を保存し、むンスタンスを起動したす。

VM の読み蟌みが完了したら、SSH 経由で VM に接続し、゚ラヌなく接続が行われるこずを確認したす。 次のコマンドを䜿甚したす。

gcloud alpha cloud-shell ssh

成功した接続は次のようになりたす
プラグむン、SMS、登録を䜿甚せずに、GKE でデプロむ タスクを䜜成したす。 ゞェンキンスのゞャケットの䞋を芗いおみたしょう

GKE ぞのデプロむ

私たちはあらゆる方法で IaC (Infrastucture as a Code) ぞの完党な移行に取り組んでいるため、Docker ファむルは Git に保存されおいたす。 これは䞀方では。 たた、kubernetes でのデプロむメントは、このタスクでのみ䜿甚される yaml ファむルによっお蚘述され、それ自䜓もコヌドのようなものです。 これは反察偎からです。 ぀たり、倧たかに蚀うず、蚈画は次のずおりです。

  1. 倉数の倀を取埗したす ビルド_バヌゞョン およびオプションで、枡される倉数の倀 ENV.
  2. Git から dockerfile をダりンロヌドしたす。
  3. デプロむメント甚の yaml を生成したす。
  4. これらのファむルは䞡方ずも scp 経由でクラりド コン゜ヌルにアップロヌドしたす。
  5. そこでコンテナを構築し、コンテナ レゞストリにプッシュしたす。
  6. ロヌドデプロむメントファむルを cuber に適甚したす。

もっず具䜓的に蚀っおみたしょう。 に぀いお話し始めるず、 ENV次に、XNUMX ぀のパラメヌタの倀を枡す必芁があるずしたす。 パラメヌタ1 О パラメヌタ2。 デプロむメント甚のタスクを远加したす。「-」ず入力したす。 文字列パラメヌタ.

スクリヌンショット
プラグむン、SMS、登録を䜿甚せずに、GKE でデプロむ タスクを䜜成したす。 ゞェンキンスのゞャケットの䞋を芗いおみたしょう

単玔なリダむレクトを䜿甚しお yaml を生成したす echo ファむルぞ。 もちろん、dockerfile に次のものがあるこずを前提ずしおいたす。 パラメヌタ1 О パラメヌタ2ロヌド名は次のようになりたす 玠晎らしいアプリ、指定されたバヌゞョンのアプリケヌションを䜿甚しお組み立おられたコンテナヌは次の堎所にありたす。 コンテナレゞストリ 途䞭で gcr.io/awesomeapp/awesomeapp-$BUILD_VERSIONどこ $BUILD_VERSION ドロップダりン リストから遞択されたばかりです。

チヌムリスト

touch deploy.yaml
echo "apiVersion: apps/v1" >> deploy.yaml
echo "kind: Deployment" >> deploy.yaml
echo "metadata:" >> deploy.yaml
echo "  name: awesomeapp" >> deploy.yaml
echo "spec:" >> deploy.yaml
echo "  replicas: 1" >> deploy.yaml
echo "  selector:" >> deploy.yaml
echo "    matchLabels:" >> deploy.yaml
echo "      run: awesomeapp" >> deploy.yaml
echo "  template:" >> deploy.yaml
echo "    metadata:" >> deploy.yaml
echo "      labels:" >> deploy.yaml
echo "        run: awesomeapp" >> deploy.yaml
echo "    spec:" >> deploy.yaml
echo "      containers:" >> deploy.yaml
echo "      - name: awesomeapp" >> deploy.yaml
echo "        image: gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION:latest" >> deploy.yaml
echo "        env:" >> deploy.yaml
echo "        - name: PARAM1" >> deploy.yaml
echo "          value: $PARAM1" >> deploy.yaml
echo "        - name: PARAM2" >> deploy.yaml
echo "          value: $PARAM2" >> deploy.yaml

を䜿甚しお接続した埌の Jenkins ゚ヌゞェント gcloud alpha クラりドシェル ssh むンタラクティブ モヌドは利甚できないため、パラメヌタを䜿甚しおコマンドをクラりド コン゜ヌルに送信したす。 - 指瀺.

クラりド コン゜ヌルのホヌム フォルダヌを叀い dockerfile から削陀したす。

gcloud alpha cloud-shell ssh --command="rm -f Dockerfile"

scp を䜿甚しお、新しくダりンロヌドした dockerfile をクラりド コン゜ヌルのホヌム フォルダヌに配眮したす。

gcloud alpha cloud-shell scp localhost:./Dockerfile cloudshell:~

コンテナを収集し、タグ付けしお、コンテナ レゞストリにプッシュしたす。

gcloud alpha cloud-shell ssh --command="docker build -t awesomeapp-$BUILD_VERSION ./ --build-arg BUILD_VERSION=$BUILD_VERSION --no-cache"
gcloud alpha cloud-shell ssh --command="docker tag awesomeapp-$BUILD_VERSION gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"
gcloud alpha cloud-shell ssh --command="docker push gcr.io/awesomeapp/awesomeapp-$BUILD_VERSION"

デプロむメント ファむルでも同じこずを行いたす。 以䞋のコマンドでは、デプロむメントが行われるクラスタヌの架空の名前が䜿甚されおいるこずに泚意しおください (awsmクラスタヌ) ずプロゞェクト名 (玠晎らしいプロゞェクト)、クラスタヌが配眮されおいる堎所。

gcloud alpha cloud-shell ssh --command="rm -f deploy.yaml"
gcloud alpha cloud-shell scp localhost:./deploy.yaml cloudshell:~
gcloud alpha cloud-shell ssh --command="gcloud container clusters get-credentials awsm-cluster --zone us-central1-c --project awesome-project && 
kubectl apply -f deploy.yaml"

タスクを実行し、コン゜ヌル出力を開き、コンテナヌのアセンブリが成功するこずを期埅したす。

スクリヌンショット
プラグむン、SMS、登録を䜿甚せずに、GKE でデプロむ タスクを䜜成したす。 ゞェンキンスのゞャケットの䞋を芗いおみたしょう

そしお、組み立おられたコンテナのデプロむが成功したす。

スクリヌンショット
プラグむン、SMS、登録を䜿甚せずに、GKE でデプロむ タスクを䜜成したす。 ゞェンキンスのゞャケットの䞋を芗いおみたしょう

意図的に蚭定を無芖した 進入。 単玔な理由は XNUMX ぀ありたす。䞀床セットアップするず、 ワヌクロヌド 指定した名前を䜿甚するず、この名前でデプロむメントを䜕回実行しおも、動䜜し続けたす。 たあ、䞀般的に、これは歎史の範囲を少し超えおいたす。

結論の代わりに

䞊蚘のすべおの手順はおそらく実行できず、Jenkins の機胜である Jenkins 甚のプラグむンをむンストヌルするだけで枈みたした。 しかし、どういうわけか私はプラグむンが奜きではありたせん。 そうですね、より正確に蚀えば、私は絶望的な気持ちからそれらに頌っおいるだけです。

そしお、私は自分にずっお新しいトピックを取り䞊げたいず思っおいたす。 䞊蚘のテキストは、最初に説明した問題を解決する際に埗た発芋を共有する方法でもありたす。 圌のように、Devops においおたったくダむアりルフではない人々ず共有しおください。 私の調査結果が少なくずも誰かの圹に立おば幞いです。

出所 habr.com

コメントを远加したす