ローカルスキャナーを使用したJenkinsのPRゲーティング
最終更新
役に立ちましたか?
役に立ちましたか?
pipeline {
agent any
environment {
// https://help.aikido.dev/code-scanning/local-code-scanning/jenkins-setup-for-local-code-scanning#id-1-get-your-authentication-token で設定した認証情報を取得します
AIKIDO_API_KEY = credentials('aikido-local-scanner-api-key')
AIKIDO_REPO_NAME = 'my-repo'
}
stages {
stage('Aikido PR Gating') {
// CHANGE_ID はプルリクエストのビルドでのみ設定されます
when { expression { env.CHANGE_ID != null } }
steps {
script {
// 対象(宛先)ブランチがローカルで利用可能であることを確認します
sh "git fetch origin ${env.CHANGE_TARGET}"
// ヘッド = PR ソースブランチの先端(マージされる内容)
def headCommit = sh(
script: 'git rev-parse HEAD',
returnStdout: true
).trim()
// ベース = 宛先ブランチの先端(マージ先)
def baseCommit = sh(
script: "git rev-parse origin/${env.CHANGE_TARGET}",
returnStdout: true
).trim()
echo "PR #${env.CHANGE_ID}: ${env.CHANGE_BRANCH} -> ${env.CHANGE_TARGET}"
echo "ベースコミット: ${baseCommit}"
echo "ヘッドコミット: ${headCommit}"
// Docker 版です。新しい問題が
// --fail-on 以上で見つかった場合、ビルドが失敗します。
sh """
docker run --rm \
-v "\$(pwd):/scan-target" \
aikidosecurity/local-scanner \
scan /scan-target \
--apikey "\$AIKIDO_API_KEY" \
--repositoryname "\$AIKIDO_REPO_NAME" \
--branchname "${env.CHANGE_BRANCH}" \
--gating-mode pr \
--fail-on critical \
--base-commit-id ${baseCommit} \
--head-commit-id ${headCommit}
"""
}
}
}
}
}sh """
aikido-local-scanner scan ./ \
--apikey "\$AIKIDO_API_KEY" \
--repositoryname "\$AIKIDO_REPO_NAME" \
--branchname "${env.CHANGE_BRANCH}" \
--gating-mode pr \
--fail-on critical \
--base-commit-id ${baseCommit} \
--head-commit-id ${headCommit}
"""