DevOps

自動テスト、継続的デリバリー、サービス統合と監視、およびSDLCインフラストラクチャーの構築に取り組んでいるソフトウェアエンジニアのためのQ&A

1
Ansibleで増加するポート番号を確定的かつ再現可能に割り当てる方法は?
Ansibleは初めてですが、特定の環境でセットアップするサービスに対応する一連のプレイブックを維持する必要があります。それらにはポート、証明書などを割り当てる必要があります。これにより、本質的に常に同じ名前のリストとそれらへの割り当てを含む多くのファイルが作成されます。 多くの場合、service_nameを変数として簡単に再利用できると思いますが、IP、ポート、またはその他の数値識別子にマッピングするとき、再現可能な方法でそれらに異なる番号を決定論的に割り当てる方法をまだ理解していません。新しいサービスが追加されても同じです。SQLiteデータベースを使用してサービスを保存し、IDから値を生成することを検討しましたが、Ansibleと統合する方法がわかりません。 増加するポート番号を割り当てることは、まったく新しいことではないと思います。これは、日常的に多くのシステム管理者が行うことなので、そのための方法がいくつか必要です。 編集:次のgroup_vars/all.ymlようにポート番号などを直接追加します。 ports: service1:1024 service2:1025 service3:1026 追加の刑務所(BSD)を作成し、実行されるロールに依存するため、インベントリは自動的に生成されます。
12 ansible  ports 

3
Ansibleでwith_itemsループを並行して実行する方法はありますか?
Ansible 2.2を実行していますが、問題がなければアップグレードできます。 私はこれを見て、とても興奮していましたが、このバージョン(または任意のバージョン)のAnsibleドキュメントには含まれていないようです。 私が解決しようとしている問題は、Centosボックスで管理する必要があるユーザーが1000人いることです。 このタスクを連続して実行するにはかなり時間がかかります。さらに厄介なことに、ユーザーモジュールの「expires」コマンドは常に変更されたものとしてマークを付けるため、すべてが変更されたように見えます。 これも有望に見えましたが、with_itemsループで各コマンドを実行するのに同じ時間を要し、それ以上速くなりませんでした(最後に到達するのに十分な時間待機することを気にしませんでした)。 タスクのスキップが高速になりました(Ansible 2.0の場合よりもはるかに高速です)。これを並行して実行する方法がわからない場合は、戻って無意味なタスクをスキップする方法を考えてみます。それ以外の場合は失敗します。独自のモジュールを作成します。しかし、私はこれすべてをAnsibleでもっと速くできるように思えます。 これは私が並行して実行したいもの host_authorizationsで、ユーザー名と他のデータのリストです。 - name: Create/modify OS user accounts user: name={{ item.username }} group=sshusers shell=/bin/bash home="/home/selinux-modules/{{ item.username }}" state=present expires={{item.expiredate|default(omit)}} with_items: "{{ host_authorizations }}" tags: full_maintenance
12 ansible 

4
Google Cloud Load Balancerでポートを開く
デフォルトでは、Google Cloudロードバランサーは多くのポートを不必要に公開しているようです。80/443のみを公開する方法が見つかりませんでした。ロードバランサーの1つを作成するたびに、nmapに次のポートが表示されます。 PORT STATE SERVICE 25/tcp open smtp 80/tcp open http 110/tcp open pop3 143/tcp open imap 443/tcp open https 465/tcp open smtps 587/tcp open submission 993/tcp open imaps 995/tcp open pop3s 1720/tcp open H.323/Q.931 8080/tcp open http-proxy 25、465、587、993、995をブロックする方法はありますか? この質問は、ファイアウォールではなくGCPロードバランサに関するものであることに注意してください。

3
ジェンキンスvs Azure DevOpsパイプライン
Microsoftが最近発表したAzure DevOpsソリューションについていくつかの調査を行っています。 いくつかの背景、私はJenkinsを何年も使用しており、最近、コンテナー化のウサギの穴(Docker、Kubernetesなど)の調査を開始しました。 Azure DevOps Pipelinesのいくつかの側面についてはよくわかりません。フィードバックや明確さを得るのは素晴らしいことです。 TL; DR Azure DevOpsは、以前Jenkinsのオープンソースプラグインを介してJenkinsコミュニティをサポートしていたJenkinsと競合していますか? エージェントだけでなく、Azure DevOps Pipelinesを完全にオンプレミスでホストすることは可能ですか? Azure DevOpsパイプラインでセルフホストgitソリューション(GitLabオンプレミスなど)を使用することは可能ですか? 長いバージョン マイクロソフトは、Azure App ServiceのJenkinsプラグインなど、Jenkins用のさまざまなオープンソースプラグインを開発しました。多くの例があります。私には、Azure DevOps(具体的にはパイプライン)ソリューションがJenkinsと直接競合しているように見えますか、それとも何か不足していますか? 私には、Azure Pipelinesソリューションをオンプレミスで、または私の選択したクラウドプロバイダーでホストする方法はないようです。はい、自分のエージェントをホストして作業の大部分を実行できますが、パイプラインロジックの実際の実行はMicrosoftのサーバーで行われます。そして、私は並列の仕事にお金を払わなければなりません。これを、オンプレミス(または選択したクラウドプロバイダー)がホストするJenkinsインスタンスと比較します。この場合、支払いは不要で、パイプラインが実行されていることをサードパーティも認識していません。何か不足していますか? 私の知る限りでは、Azure Pipelinesは自己ホスト型リポジトリをサポートしていないため、コードをGitHubまたはAzure reposに配置します。したがって、プライベートにホストされているGitLabインスタンスがある場合、このパイプラインソリューションを使用することもできませんか? ご意見をお寄せいただきありがとうございます。

4
Jenkinsを使用したマルチ環境展開のベストプラクティス
私には3つの環境があり、それぞれ独自の構成を持つ独自の仮想ネットワーク上にあります。各環境で継続的デプロイメントを行う場合、Jenkinsの3つの個別のインスタンスが必要ですか?マルチ環境アーキテクチャーへの展開をグレードアップするいくつかのベストプラクティスは何ですか?
12 jenkins 

2
Jenkinsのsudoを使用するのは悪いことですか?
Publish Over SSHプラグインを使用して、アプリJenkinsをさまざまな環境にデプロイします。一部のデプロイジョブは、環境の準備や、アプリサーバーシステムサービスの停止や再起動などを行います。これらのコマンドの一部にはが必要ですsudo。 リモートのパブリッシュおよび実行のJenkinsジョブ内でsudoを要求することがセキュリティ上の悪い習慣になる可能性があるかどうか、私は興味があります。ターゲットホストのセキュリティポリシーを変更して、sudoなしで必要な機能を実行できるようにする必要がありますか?
11 jenkins  security 

4
コードおよびTDDとしてのインフラストラクチャ
コードとしてのインフラストラクチャは、ビルドを自動化するツールを使用するように指示します。すごい。ansible、chef、puppet、salt stackなどのツールは、違いを解決しながら、インフラストラクチャがどのように見えるかを書くように私たちを促しています。 ソルトスタックでは、これらのビットは状態と呼ばれます。状態が現実と一致しない場合、ツールはそれを解決します。つまり、インフラストラクチャのテストを作成しており、テストが失敗した場合は、ツールが独自に修正します。少なくともそれは考えです。 XPはTDDの使用を教えてくれますが、問題はそれがインフラストラクチャに適用可能かどうかです。ツールはそれを示唆しています。 非常に役立つテストの種類はほとんど想像できません。 デプロイされたサービスにバンドルされているスモークテストを記述して、デプロイされたサービスが期待どおりに機能し、実行されることを確認します。これは、API呼び出しまたは/およびsystemctlチェックで、デプロイしたばかりのものが機能することを確認します。ansibleのようなツールには、サービスが実行されていることを確認するための状態があるため、この機能の多くは同じ状態でカバーできます。 dockerまたは別の一時的な仮想化エンジンに対して(ansibleがその状態を呼び出すときに)個々のロールを実行できるプロジェクトMoleculeがあります。これにより、役割の分離が強制され、作業中にプレイブックから分離して実行することができます。テストでは、ほとんどの場合、ロールが機能するはずの変数をモックできます。他の例は、ansibleエンジンの複製のように見えます(ファイルがユーザーに属していることをアサートします...)。 ThoughtWorksのハイテクレーダーは、今のようなツール賞賛INSPEC、serverspecやゴスをサーバーが仕様を満たしていることを検証するため。しかし、私たちはスペックを書いていますね? インフラストラクチャを州/役割で説明している場合、インフラストラクチャをさらにテストすることに意味がありますか?これは、1つのチームが仕様を提供し、他のチームが従う大規模な組織でより必要になるか、または役割の大きなセットがある場合、それらのサブセットを実行してテストから速度のメリットを得たいと思うかもしれません。同じ質問に対する役割/状態が考えられるのに、なぜテストを書くのかを理解するのに苦労しています。

3
Jenkins:ビルド環境としてDockerを使用する権限の問題
JenkinsをUbuntu 16.04マシンにインストールしました。Jenkins自体はコンテナーでは実行されません。yarn installノードイメージを使用して呼び出すだけです。これが私のJenkinsfileです: pipeline { agent any stages { stage('install node modules...') { agent { docker 'node' } steps { sh 'cd /path/to/package.json; yarn install' } } } } かなり簡単ですよね? jenkinsユーザー/グループは112:116であり、ノードコンテナーのuidは1000であるため、yarnプロセス(ノードユーザー1000として実行される)はのようなことはできませんmkdir /.config。 引数を渡してノードコンテナをスピンアップ-u 1000しようとしましたが、永続ディレクトリを作成しようとしたときに権限の問題にぶつかりました。 どちらかの問題のようですが、どうすれば回避できますか? ジェンキンスのログ: 以下は、ビルドが開始して失敗する場所です。 [Pipeline] sh [Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script + docker inspect -f . node . …

4
コンテナ内からchocolatey.orgやその他のインターネットサイトに接続できない
https://forums.docker.com/t/cannot-connect-to-chocolatey-org/38745からのxpost 予想される行動 Windows Server 2016 Datacenter(MSDNダウンロード)64ビットを実行しています-バージョン1607-ビルド14393.1715 私はDocker For Windowsを使用しており、Windowsコンテナーを実行しています。 これが世界で最も簡単なことだと思います。 reboot my host machine docker run -it microsoft/windowsservercore powershell iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1')); 期待はこれがチョコレートにチョコレートをインストールすることです。 私は実際にこれをdockerfileで行うつもりですが、今すぐヘルプを得るために最小限の作業例を探します。 これは失敗する実際のdockerファイルです(悲しいことにそれほど創造的ではありません)。 FROM microsoft/windowsservercore SHELL ["Powershell"] ENV ChocolateyUseWindowsCompression false; RUN iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1')); 実際の行動 まず最初に、これをVirtualbox VMで実行しています。これに限定されないが、内部ネットワーク接続とテスト、SQLサーバーの実行、Docker構成環境に対して実行されるWCFサービス、データが正しく返されることなど、私が作業したいすべてのものが機能します。システムが実行することを期待していることはすべて機能しています。これが最後のステップです。指を交差させました:D。Hyper-Vが機能していて、すべてのマシンが期待どおりに機能しているので、これをVirtualBoxで実行しているという事実は問題になりません。言及する価値があると思います。 docker run -it microsoft/windowsservercore powershell PS C:\> iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1')) Exception …
11 docker  windows 

1
ジェンキンスパイプラインの仕事; slackSendステップの適切な引用
これはおそらく100%のユーザーエラーですが、slackSendステップでチャネル名として変数を使用するパイプラインジョブを取得できません。 これはSlackプラグインとBuild User Varsプラグインの両方を使用します。私はBUILD_USER_FIRST_NAMESlackに戻るチャネルを特定するために使用しようとしています(つまり、ビルドを開始するチャネルがメッセージを取得するチャネルでなければなりません)。 パイプラインジョブでビルドユーザープラグインを使用する方法に関するこの記事の途中まで来ましたが、変数を置き換えると問題が発生します。 ジョブの関連部分は次のようになります。 stage ('message') { wrap([$class: 'BuildUser']) { sh "printf '%s' ${BUILD_USER_FIRST_NAME} > name.txt" } archiveArtifacts artifacts: 'name.txt' name = readFile('name.txt') echo "name is $name" //works fine, I get Alex if ( "$output" != null ) { slackSend (channel: '@$name', color: '#36A64F', message: "Job succeeded") } …

2
RDSインスタンスの名前を変更できますか?
ランダムな(役に立たない)DBインスタンス名を持つRDS MySQLインスタンスのコレクションを継承しました。 私は頻繁に掘るする必要がタグそれらが属するプロジェクトを見つけるためにセクション。 RDSで変更できる設定の1つはDB Instance Identifierです。 これを変更すると、名前の変更以外にどうなりますか?誰かのコードに影響しますか?それとも無害な変更ですか? これらは私がダウンさせるわけにはいかないライブシステムです。
11 amazon-rds 

7
開発者がDockerを気にする必要があるのはなぜですか?
一般に、開発者はビジネス要件を満たすことに関心があります。彼/彼女は特定のスタックまたはフレームワークの専門知識を持っているかもしれません。しかし、彼/彼女はdockerとそれがさまざまな配備方法(swarm、kube、mesosなど)を学ぶように努力すべきでしょうか? 簡単に言えば、開発者がdockerを気にする必要があるのはなぜですか? PS:この投稿の親の質問は、開発チームにdockerを導入することの影響です

3
VagrantマルチマシンセットアップでSSHキーを設定するにはどうすればよいですか?
Vagrantfileに4つのVMがあり、3つのアプリケーションサーバーと1つのAnsible制御ホストがあります。 まだansibleスクリプトを作成/編集しているため、Anagible制御ホストから手動でプロビジョニングするため、VMの作成にはVagrantのみを使用しています。 私が行うことができますvagrant ssh ansibleし、vagrant ssh app1/2/3などが、私が何をしようとするとansible-playbook oracle.ymlAnsible制御ホストから、SSHはで失敗します fatal: [192.168.60.10]: UNREACHABLE! => {"changed": false, "msg": "SSH encountered an unknown error during the connection. We recommend you re-run the command using -vvvv, which will enable SSH debugging output to help diagnose the issue", "unreachable": true} ユーザーvagrantとパスワードvagrantを使用して、Ansible VMからOracle VMに正常にsshできます。 私のVagrantfileの重要な部分は次のとおりです。 config.ssh.insert_key = …
11 ansible  vagrant 

2
環境構成ごとに保存するためのツール
ツールで環境ごとに構成情報を保存する必要があります。 これは、構成値(接続文字列など)を追加/更新するためのGUIを備えたツールです。これにはデフォルト値があり、異なる環境に基づいてこれを変更できる必要があります。 アプリケーションに追加する特定の環境へのデプロイメント中にこれらの構成値を取得するAPIが必要です。 私はしばらく探しましたが、この法案に合うツールは見つかりませんでした。何か提案はありますか? 注:現在、設定はTeamCity変数にあり、展開はPowerShellスクリプトを介して行われます。

3
パブリックCIおよびBitBucketなどのソース管理リポジトリでAnsible Vaultを使用するためのベストプラクティスは何ですか?
前書き プライベートCIとGitlab-ceのようなソース管理リポジトリでは、〜/ .vault_pass.txtをサーバーにコピーして、CIがAnsibleを使用してファイルを復号化できるようにすることができます。 問題 パブリックCIとBitbucketなどのソース管理リポジトリでは、〜/ .vault_pass.txtをCIサーバー自体にコピーすることはできません。 討論 Bitbucketでは暗号化された変数を定義することができますが、このファイルがチェックされるとき、VAULT関連の変数は次のとおりです。 ANSIBLE_ASK_VAULT_PASS ANSIBLE_VAULT_PASSWORD_FILE ANSIBLE_ASK_VAULT_PASSが設定されている場合ansible-vaultでもプロンプトが表示されるため、これらの変数は問題を解決するためのオプションではありません。 user@host $ Vault password: 同じパスワードを入力すると、暗号化されたファイルを開くことができますが、ファイルを必要とせずに、またはプロンプトにパスワードを入力せずにファイルを開くことが目的です。 問題を解決するための別の試みが実行されてexport ANSIBLE_ASK_VAULT_PASS=<ansible-vault-password>いましたが、インタラクティブモードが持続します。 別のオプションはexport ANSIBLE_VAULT_PASSWORD_FILE=~/.vault_pass.txtですが、このファイルをリポジトリにプッシュする必要がありますが、ソース管理リポジトリにはパスワードを含めないでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.