ansible roles integration with jenkins devops
Ansible Roles、Jenkinsとの統合、AnsibleS3およびEC2モジュールの詳細:
パート2 の Ansibleチュートリアルのシリーズ 、 Ans1ibleプレイブックを使用して複数のタスクを実行し、すべてのターゲットマシンまたはサーバーを特定の目的の状態にする方法を学びました。
推奨読書=> 指数関数的なDevOpsトレーニングシリーズ
Ansible Playbookは、主にYAMLファイルであり、モジュール化されていない再利用可能な1つの巨大なファイルに複数のタスクが含まれています。ただし、構成全体を分割し、よりモジュール化して再利用可能にする必要がある場合は、Ansibleの役割が大いに役立ちます。
このAnsibleチュートリアルでは 、Ansibleの役割、DevOpsの観点から継続的デリバリーのためのAnsibleとJenkinsの統合、そして最も重要なのはAWS EC2インスタンスを管理するためのAnsible S3およびEC2モジュール(EC2インスタンスの作成と終了)について説明します。
学習内容:
- Ansibleの役割
- JenkinsとAnsibleの統合
- AnsibleでAWSS3オブジェクトを管理する
- Ansibleを使用してAWSEC2インスタンスをプロビジョニングします
- EC2インスタンスの終了
- 概要
- 推奨読書
Ansibleの役割
Ansibleロールを使用すると、変数、タスク、ハンドラーなどをグループ化できます。これにより、再利用性が向上し、構文エラーが確実に減少します。コード全体を整理するのに役立ちます。
Ansibleの役割は、PuppetのモジュールやChefのクックブックに似ています。
役割を作成するには、 ansible-銀河 それを作成するためのすべてのテンプレートを含むコマンド。
シナリオ例
私は人生のほとんどでDevOpsスペシャリストであり、CIとCDでのみ作業しています。
したがって、J2EEアプリケーションの新しいビルド(WARファイル)をTomcatにデプロイする継続的デリバリーの例では、次のようになります。
- アプリケーションを停止します
- アプリケーションをアンインストールします
- アプリケーションの新しいビルドをデプロイします
- アプリケーションを起動します
したがって、少なくとも4つのタスクとそれを呼び出す1つのメインファイルを持つロールを作成します。このようにして、コードをよりモジュール化して再利用できるようにしています。それでは、この役割を次のように呼びましょう Tomcat そしてそれを作成します。
$ cd /etc/ansible/roles $ sudo ansible-galaxy init tomcat --offline
ロールが作成されると、作成されたディレクトリ構造を確認できます。
このセクションで使用する主なコンポーネントは次のとおりです。
- タスク/main.yml –これは、ロール用に作成されたタスクの開始点です。 main.ymlファイルを使用して、他のタスクファイルを指すことができます。
- その –これは、使用される変数を定義するためのものです。
- メタ –これはあなた自身または作者に関する情報を定義するためのものです。
ステップ1:すべてのタスクのメインリストを作成する
編集する タスク/main.yml ファイルを作成し、以下のコードを追加します。上記のシナリオ例に従って、4つの異なるタスクを定義しています。ほとんどの場合、デプロイアプリケーションもアプリケーションを起動するため、起動アプリケーションの最後のものは必要ない場合があります。
--- # tasks file for tomcat - import_tasks: stop_app.yml - import_tasks: uninstall_app.yml - import_tasks: deploy_app.yml - import_tasks: start_app.yml
ステップ2:シナリオに従って4つのファイルすべてを作成します
以下のタスクで アクション:ec2_facts リモートEC2インスタンスからファクトを取得し、プレイ/タスクでそれらを呼び出すために使用されます
タスク/stop_app.ymlファイル
--- - name: Gather EC2 instance metadata action: ec2_facts - name: Stop application on {{ansible_hostname}} command: wget 'http://{{tomcat_user}}:{{tomcat_pwd}}@{{ansible_ec2_public_ipv4}}:8080/manager/text/ stop ?path=/HelloWorld-Maven' -O - -q
タスク/uninstall_app.yml
--- - name: Gather EC2 instance metadata action: ec2_facts - name: Undeploy application on {{ansible_hostname}} command: wget 'http://{{tomcat_user}}:{{tomcat_pwd}}@{{ansible_ec2_public_ipv4}}:8080/manager/text/undeploy?path=/HelloWorld-Maven' -O - -q
タスク/deploy_app.yml
--- - name: Deploy the new WAR file to target servers copy: src=/var/lib/jenkins/workspace/Demo-Maven-Project/target/HelloWorld-Maven.war dest=/home/ansible/tomcat/webapps
デプロイコードで、JENKINSを使用してWARファイルをビルドする場合は、WARファイルのソースディレクトリを コピー モジュールと宛先は、Tomcatのターゲットサーバーwebappsの場所です。
タスク/start_app.yml
--- - name: Gather EC2 instance metadata action: ec2_facts - name: Start application on {{ansible_hostname}} command: wget 'http://{{tomcat_user}}:{{tomcat_pwd}}@{{ansible_ec2_public_ipv4}}:8080/manager/text/start?path=/HelloWorld-Maven' -O - -q
ステップ3:変数を定義する
編集する vars / main.yml ファイルを作成し、以下に示すようにコードを追加します。
--- # vars file for tomcat tomcat_user: tomcat tomcat_pwd: tomcat
ステップ4:メタフォルダーに情報を定義する
meta / main.ymlファイルを編集し、作成者、説明、会社などの情報を追加します。
UNIXでのgrepコマンドの使用
galaxy_info: author: V Niranjan description: Devops specialist company:
ステップ5:メインのsite.ymlファイルを作成する
最後に、メインのsite.ymlファイルを作成して、作成されたロールを呼び出します。これにより、インベントリファイルに従って、サーバーまたはホストのリストにアプリケーションをデプロイできます。次のようにファイルを作成します /etc/ansible/site.yml
--- - hosts: webservers become: true roles: - apache
ステップ6:プレイブックファイルsite.ymlを実行します
$ ansible-playbook site.yml
Tomcat URLを起動して、アプリケーションがデプロイおよび開始されているかどうかを確認します。
HTTP://:portno / manager
JenkinsとAnsibleの統合
このセクションでは、JenkinsをAnsibleと統合する方法を説明します。ビルドプロセスを使用してビルドされたWARファイルは、Ansibleを使用してターゲットマシン上のTomcatにデプロイするために使用されます。 Ansibleプラグインを使用して、Jenkinsの前のセクションで作成したAnsibleロールを呼び出します。
したがって、ビルドが完了すると、WARファイルのデプロイはAnsibleを使用して自動的にトリガーされます。
私はこれを単純に保ち、継続的インテグレーションアクティビティ中にSonar、Artifactory、またはJunitを構成していません。これも実行できます。
ステップ1:Jenkinsジョブを作成し、GitHubのコードを使用してSCMリポジトリを構成します
ステップ2:ビルドを構成する
ステップ3:Jenkinsワークスペース内にロールディレクトリを作成する
ステップ4:以下に示すコマンドを使用して、Jenkinsワークスペースの場所にTomcatロールを作成します
$ sudo ansible-galaxy init tomcat –オフライン
前のセクションの手順に従って、次のすべてのファイルを作成します。 タスク、変数、メタ、メインのsite.yml。
最高のCPUおよびGPU監視ソフトウェア
メイン site.yml ファイルはで作成されます / var / lib / Jenkins / workspace / ディレクトリ。
ステップ5:Ansibleプレイブックを呼び出してsite.ymlファイルを呼び出すようにJenkinsビルド後のステップを構成します。ジョブを保存します。
手順6:ビルドジョブをトリガーし、Tomcat URLを起動して、アプリケーションが正しくデプロイされているかどうかを確認します。
AnsibleでAWSS3オブジェクトを管理する
Ansible S3モジュールを使用して、S3バケットとの間でファイルを取得または配置できます。このモジュールを使用するには、インストールして構成する必要があります 投票 AWSにアクセスするためのAPI(アプリケーションプログラムインターフェイス)として機能するPythonのモジュール。これはにインストールする必要があります Ansibleコントロールマシン。
RedhatLinuxの場合
$ sudo yum install -y python python-dev python-pip
Ubuntuの場合
$ apt-get install -y python python-dev python-pip
上記が完了したら、botoをインストールします
$ sudo pip install boto boto3
インストールできない場合は、EPELリポジトリを有効にする必要があります。手順は、記事シリーズのパート1のAnsibleのインストールセクションに記載されています。
上記が完了したら、AWSユーザー認証情報も提供する必要があります。 AWSAccessおよびSecretKey環境変数をエクスポートできます
export AWS_ACCESS_KEY_ID='AK123' export AWS_SECRET_ACCESS_KEY='abc123'
上記の環境変数を設定した後でも、資格情報が見つからないためにエラーが発生した場合は、プレイブックで同じものを指定することもできます。
次に、S3バケットでAnsibleを使用し、後でインスタンスを作成および終了する方法の例をいくつか見てみましょう。
例1:フォルダを使用して空のバケットを作成します
--- - hosts: localhost become: true tasks: - name: Create an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket object=/development mode=create permission=public-read region=ap-south-1
注意: ここでは、バケットを作成するためのモードが作成され、権限はpublic-readまたはpublic-read-writeにすることができます
プレイブックを実行し、その中の開発フォルダーで作成されたバケットを表示します。
例2:ファイルをS3バケットにコピー(アップロード)するには
--- - hosts: localhost become: true tasks: - name: Copy file to S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansibleniru object=/niru.txt src=/home/ansible/niru.txt mode=put
ここで、オブジェクトはバケット内に作成されたファイルです。ファイルまたはフォルダーにすることができます。この場合、それはファイルです。ソースは、Ansibleコントロールマシンであるローカルマシンから取得されたファイルです。
注意:ここでは、オブジェクトをアップロードするためのモードが設定されています
プレイブックを実行し、S3バケットを確認します。
例3:S3バケットからファイルを取得(ダウンロード)します
--- - hosts: localhost become: true tasks: - name: Download file from S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansibleniru object=/niru.txt dest=/home/ansible/niranjan.txt mode=get
注意:ここで、モードはダウンロードオブジェクトを取得します
例4:S3バケットからオブジェクトまたはファイルを削除します
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket aws_s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket object=/development/niranjan.txt mode=delobj
注意:ここでのモードは、オブジェクトを削除するためのdelobjです。
例5:バケットとすべてのコンテンツを削除します
--- - hosts: localhost become: true tasks: - name: Delete an S3 bucket s3: aws_access_key= aws_secret_key= bucket=ansiblevnbucket mode=delete
注意:ここでのモードは、削除バケットの削除です。
Ansibleを使用してAWSEC2インスタンスをプロビジョニングします
最後に、Ansibleの最も重要な機能の1つである、AWS EC2インスタンスを作成または起動する方法と、インスタンスを終了する方法について説明します。もちろん、インストールすることを忘れないでください 投票 これは前提条件であり、ユーザー「AWS_ACCESS_KEY_ID」と「AWS_SECRET_ACCESS_KEY」も必ずエクスポートしてください。
エクスポートが機能しない場合は、以下に示すようにコードに同じものを追加してください。
レジストリエラーを修正するための最良のプログラム
以下のコードは、セキュリティグループとキーペアを作成するとともに、EC2インスタンスを作成する方法を示しています。
- セキュリティグループを作成する
- キーペアとPEMファイルを作成します
- EC2インスタンスを作成する
- EC2インスタンスのIPアドレスをAnsibleインベントリファイルに保存します
この演習を行うユーザーは、AWSEC2の概念に精通していると思います。
以下のコードをファイルに追加し、同じコードを実行して、AWSコンソールでEC2インスタンスが作成されたことを確認します。 コードが大きいため、2ページに分割されますが、すべてを1つのymlファイルに保存するようにしてください。
--- - hosts: localhost become: true gather_facts: False vars: region: ap-south-1 instance_type: t2.micro ami: ami-5b673c34 # RedHat Linux 7.5 hosts_file: /etc/ansible/hosts tasks: - name: Create security group ec2_group: aws_access_key: aws_secret_key: name: 'vniranjan' description: 'V Niranjan Security Group' region: '{{ region }}' rules: - proto: tcp from_port: 22 to_port: 22 cidr_ip: 0.0.0.0/0 - name: Create an EC2 key ec2_key: aws_access_key: aws_secret_key: name: 'vniranjan' region: '{{ region }}' register: ec2_key - name: Save private key (PEM file) copy: content='{{ec2_key.key.private_key}}' dest=/home/ansible/vniranjan.pem mode=0600 when: ec2_key.changed - name: Create an ec2 instance ec2: aws_access_key: aws_secret_key: key_name: vniranjan group: vniranjan # security group name instance_type: '{{ instance_type}}' image: '{{ ami }}' wait: true region: '{{ region }}' count: 1 # default count_tag: Name: Demo instance_tags: Name: Demo register: ec2 - name: Save IP to inventory file lineinfile: dest: '{{hosts_file}}' insertafter: '(webservers)' line: '{{item.private_ip}}' with_items: '{{ec2.instances}}'
プレイブックを実行する
/ etc / ansible / hostsインベントリファイルがプライベートIPで更新されました
インスタンスにログインします
ssh -i“ vniranjan.pem” ec2-user@ec2-13-126-30-207.ap-south-1.compute.amazonaws.com
((注意:下の画像をクリックすると拡大表示されます)
作成されたセキュリティグループ
作成されたキーペア
EC2インスタンスの終了
このセクションでは、EC2インスタンスの終了について詳しく説明します。
次の画面では、2つのインスタンスが実行されており、終了する手順は次の順序であることがわかります。
- インスタンスIDを使用してEC2インスタンスを終了します
- セキュリティグループを削除する
- キーペアを削除します
両方のEC2インスタンスを終了するためのプレイブック
--- - hosts: localhost gather_facts: false connection: local vars: instance_ids: - 'i-05945003313d20603' # Replace these with your EC2 instance id’s - 'i-0ce5ce5820bddf610' region: ap-south-1 keypair_name: vniranjan securitygroup_name: vniranjan tasks: - name: Terminate EC2 instance ec2: aws_access_key: aws_secret_key: instance_ids: '{{instance_ids}}' region: '{{region}}' state: absent wait: true - name: Remove EC2 Key ec2_key: aws_access_key: aws_secret_key: name: '{{keypair_name}}' state: absent region: '{{region}}' - name: Remove Security Group ec2_group: aws_access_key: aws_secret_key: name: '{{securitygroup_name}}' state: absent region: '{{region}}'
概要
今日、ほとんどのIT組織は、ビジネスを勝ち取り、同じことをクライアントに紹介するために、ある種の差別化要因を検討しています。自動化は間違いなく重要な差別化要因の1つだと思います。
Ansibleのようなツールを使用すると、反復的な手動タスクのほとんどを自動化できるはずだと思います。
したがって、これから学んだこと 3部構成のAnsibleチュートリアルシリーズ Ansibleは、タスクの自動化、アプリケーションのデプロイ、クラウドプロビジョニングなど、さまざまな自動化領域で役立つ非常に人気のある強力な構成管理ツールとして紹介されています。そのため、私たちは主にITオーケストレーションについて話します。
さまざまなAnsibleチュートリアルを楽しんでいただければ幸いです。この概念については、これまでに膨大な知識を身に付けていたと思います。
次に、DevOpsトレーニングシリーズの一部でもあるSeleniumとJenkinsを統合する方法を学習します。