その過程で、Powershellスクリプトの配信を自動化し、システム管理者間のチーム作業を異なるサーバーで実行されているスクリプトと同期させるというアイデアが生まれました。 この記事は、git、gitlab、ci / cd、およびその他のdevopsのトラブルに精通していない単純なwin管理者向けに設計されています。
作業中に発生した問題から始めましょう
- バージョン管理の欠如;
- スクリプトをファイナライズする際の同僚間の矛盾。
- 同僚が去るときの有用なスクリプトの損失。
- 実行場所へのスクリプトの手動配信。
- 平凡な混乱。
これらの問題はすべて、孤立したケースでは実際には小さなものですが、これがすべてチームおよびスクリプトのヒープの規模に既に達している場合は、整理しておきたいと思います。
私の人生を簡素化するために、私たちはすでに私たちと一緒に展開し、エンコーダーによって使用されている素晴らしいGitlab製品を使用しました。 gitlabとgitlab-runner のインストールプロセスについては考慮しません。 ドメイン認証を使用して既にgitlabを構成し、展開タスクを実行するpowershell executorを備えた別のWindowsランナーがあることを明確にします。 優れたVisual Studioコードを使用してスクリプトを記述します。
gitlabで作業を整理します
まず、gitlabでグループを作成する必要があります。これにはシステム管理者全員が含まれます。
次に、開発者権限を持つメンバーに同僚を追加すると、プロジェクトの作成を開始できます。 グループでプロジェクトを作成し、同僚が自動的にアクセスできるようにします。
プロジェクトを作成した後、最初のページには、「次に何をすべきか」というトピックに関するすべてのヒントがあります。 この場合、gitlabのワークステーションから既存のファイルを起動する必要があります。 たとえば、これはすべてディレクトリ「E:\ scripts \ powershellmegaproject」にあります。 適切なプロンプトを使用して、コンピューターで実行します。
cd E:\scripts\powershellmegaproject git init git remote add origin http://gitlab.domain.net/sysadminsdev/powershellmegaproject.git git add . git commit -m "Initial commit" git push -u origin master
ビンゴ! 「E:\ scripts \ powershellmegaproject」ディレクトリからのすべてのファイルは、現在プロジェクトにあります。
次は? VSCodeを開き、このディレクトリにあるpowershellスクリプトに変更を加えます。 ファイルを保存すると、ソース管理セクションに通知が表示され、そこで変更を確認してコミットすることができます。 次に、サーバーにプッシュします。
gitlabのプロジェクトWebサイトで確認してみましょう。ファイルの実際の内容がそこにあり、コミットの履歴で変更を追跡できます。
CI / CDセットアップ
サーバーへのスクリプトの配信を設定します。 CI / CDが機能するためには、プロジェクトにランナーが必要です。 admin gitlab-ランナーで割り当てるか、共有ランナーを使用できます。
そして今プロジェクトに。 CI / CDを機能させるには、プロジェクトのディレクトリに.gitlab-ci.ymlファイルを作成し、アクションの説明を追加する必要があります(gitlab-CI / CD-Pipelinesメニューに移動すると、ヒントとヘルプも表示できます)。 ファイルをrsyncまたはgit pullにコピーするだけでなく、目的のサーバーにファイルを配信するためのさまざまな方法を選択できます。 最も単純なシナリオを検討しているため、単にpowershellをコピーします。 これを行うには、スクリプトでターゲットサーバー上のフォルダーをネットワーク上で公開し、gitlab-runnerサービスを実行しているユーザーに変更アクセスを提供します。
.gitlab-ci.ymlに単純なコンテンツを入力します。
deploy_stage: variables: DEST_DIR: \\srv-megaserver\scripts\powershellmegaproject script: - remove-item -path $DEST_DIR\* -recurse - gci -Recurse | Copy-Item -Destination $DEST_DIR
ここで、変数へのディレクトリへのパスを記述し(他のプロジェクトでは、このファイルをコピーしてターゲットディレクトリを変更するだけです)、単純なPowerShellコマンドを使用して、まずディレクトリの内容全体を削除し、プロジェクトからすべてをこのフォルダーにコピーします。
コミット、変更のプッシュ、チェック。 サーバー上のフォルダーで、すべてのファイルを更新する必要があります。 Pipelineのステータスと実行は、gitlab-ci / cd-pipelinesの同じセクションで確認できます。実行の成功例:
Running with gitlab-runner 11.3.1~beta.4.g0aa5179e (0aa5179e) on gl-runner2-windows a24eda81 Using Shell executor... Running on SRV-GL-RUNNER2... Fetching changes... HEAD is now at e6e9a2c update ci file From http://gitlab.domain.net/sysadminsdev/powershellmegaproject e6e9a2c..5f5cfce master -> origin/master Checking out 5f5cfceb as master... Skipping Git submodules setup $ remove-item -path $DEST_DIR\* -recurse $ gci -Recurse | Copy-Item -Destination $DEST_DIR Job succeeded
このサーバーでは、スケジューラでプロジェクトからこのスクリプトを実行するようにタスクが既に構成されていると仮定します。その結果、常に実際のプロジェクトファイルの実行を取得します。
同僚はどうしたの?
簡単です。プロジェクト用のフォルダーを作成し、ps / cmdでそのフォルダーに移動して、プロジェクトを自分自身に複製します。
cd e:\projects git clone http://gitlab.domain.net/sysadminsdev/powershellmegaproject.git
すべて、フォルダを開いてコミットしてプッシュすることで、VSCodeで動作します。
結果として何を達成したか
- すべてのスクリプトはリポジトリに保存されます。
- 管理グループ全体がスクリプトを操作できます。
- すべての変更はストーリーに表示されます。
- 新しく作成された管理者はすべての開発をすぐに見ることができ、サーバーをあちこち走らせて「どこで何が行われているのか」を知る必要はありません。
- 生産的な変更はすべて「生産的な職場」に自動的に配信されます。
すべての問題を排除し、チームとしての生活を大幅に簡素化しました。
ボーナス
README.mdファイルをプロジェクトディレクトリに追加して、これらのスクリプトで何が起こるかを説明します。
変更を説明する変更ログファイルを追加します。
PS:他に何ができますか? Dockerでランナーをツイストでき、ansibleでスケジューラーを構成できますが、さらに多くのことをさらに複雑にすることができますが、この記事の目的は初心者のためにこのツールキットの理解を単純化することでした。