🙄

Jenkinsのパイプラインの中でAWSCLIを実行する方法とは?

2023/10/10に公開

はじめに

Jenkinsのパイプラインの中でAWSCLIを実行する方法について記載したいと思います。
現在、私が参画している現場で使用している方法になります。

環境

  • CentOS 7.9
OSバージョン
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
$
  • Jenkinsのバージョン

  • 使用するAWSのIAMユーザーは、検証用のためAdministratorAccessを付与

対応方法

AWSCLIのインストール

  • Jenkinsが導入されているサーバにAWSCLIをインストールする。
コマンド
sudo yum install awscli
バージョン確認
# aws --version
aws-cli/1.23.2 Python/2.7.5 Linux/3.10.0-1160.95.1.el7.x86_64 botocore/1.23.46
#

AWSCLIの初期設定

  • jenkinsユーザーにスイッチする。
コマンド
su - jenkins

※Jenkinsユーザーは、Jenkinsインストール時にサーバ内に作成されます。

  • ~/.aws/credentialsを作成し、IAMユーザーの情報を記載する。
記載内容
[default]
aws_access_key_id = <AWSのアクセスキー>
aws_secret_access_key = <AWSのシークレットキー>

パイプラインにて確認

  • Jenkinsのジョブに以下のようなPipeline Scriptを仕込む
pipeline {

  agent {
    label "master"
  }

  options {
    skipDefaultCheckout()
    disableConcurrentBuilds()
    timestamps()
  }

  stages {
    stage("AWS接続確認"){
      steps {
        echo "# AWS接続確認 開始 #"
        script {
          sh "aws s3 ls"
        }
        echo "# AWS接続確認 終了 #"
      }
    }
  }

  post {
    always {
      echo "# AWS接続チェック 終了 #"
    }
    success {
      echo "# AWS接続チェック 正常終了 #"
    }
    failure {
      echo "# AWS接続チェック 異常終了 #"
    }
  }

}
  • ジョブを実行すると、以下のような出力結果になる。
ユーザーjenkinsが実行
Resume disabled by user, switching to high-performance, low-durability mode.
[Pipeline] Start of Pipeline
[Pipeline] node
Running on Jenkins in /var/lib/jenkins/workspace/test
[Pipeline] {
[Pipeline] timestamps
[Pipeline] {
[Pipeline] stage
[Pipeline] { (AWS接続確認)
[Pipeline] echo
17:54:17  # AWS接続確認 開始 #
[Pipeline] script
[Pipeline] {
[Pipeline] sh
17:54:17  + aws s3 ls
17:54:22  2020-05-18 07:23:54 infra-backet01
17:54:22  2022-11-03 18:31:36 terraform-backend1103
17:54:22  2022-12-17 16:14:31 testoffice.work
17:54:22  2022-12-17 16:17:38 testoffice.work-log
[Pipeline] }
[Pipeline] // script
[Pipeline] echo
17:54:22  # AWS接続確認 終了 #
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Declarative: Post Actions)
[Pipeline] echo
17:54:23  # AWS接続チェック 終了 #
[Pipeline] echo
17:54:23  # AWS接続チェック 正常終了 #
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // timestamps
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
Finished: SUCCESS

Discussion