如何在 jenkins 管道调用的 python 脚本中使用全局凭据

How to use global credentials in python script invoked by jenkins pipeline

我对使用 jenkins 还很陌生,到目前为止,我能够通过简单的 pip 安装 运行 简单的管道,但我需要将来自 Jenkins 的全局凭据传递到 python 脚本 test.py 由 jenkinsfile 调用。

pipeline {
    options { timeout(time: 30, unit: 'MINUTES')
            buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '30')) }
    agent { label 'ops_slave' }
    stages {
        stage('Environment  Build') {
            steps {
                echo "Hello World!"
                sh "echo Hello from the shell"
                sh "hostname"
                sh "uptime"
                sh "python3 -m venv test_env"
                sh "source ./test_env/bin/activate"
                sh "pip3 install pandas psycopg2"
                sh """echo the script is working"""
                withCredentials([[
                    $class: 'UsernamePasswordMultiBinding',
                    credentialsId: 98,
                    usernameVariable: 'user',
                    passwordVariable: 'pw',
                ]])
                sh """python3 bartek-jenkins-testing/python/test.py"""
            }
        }
    }
}

我见过你使用 argparse 的实现,但它在这一点上超出了我的水平,我相信有一种方法可以从 python 脚本或 jenkins 直接引用它以传递给 python 脚本。我在谷歌上搜索了一段时间,但我不确定我问的问题是否正确。

我的 python 脚本应该能够从 Jenkins 全局凭据 ID98 获取用户名和密码:

print('Hello World this is python')
import pandas as pd
print(pd.__version__)
import pyodbc
import psycopg2
# can pass environemtn variables

connection = psycopg2.connect(
    host="saturn-dv",
    database="saturn_dv",
    port='8080',
    user='saturn_user_bartek_malysz',
    password='')
connection.set_session(readonly=True)
query = """
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'public'
ORDER BY table_schema,table_name;"""
data = pd.read_sql(query, connection)
print(data)

一个简单的方法是如下利用环境变量

// Jenkinsfile

withCredentials([[
    $class: 'UsernamePasswordMultiBinding',
    credentialsId: 98,
    usernameVariable: 'user',
    passwordVariable: 'pw',
]]) {
    sh """
       export DB_USERNAME="${user}"
       export DB_PASSWORD="${pw}"
       python3 bartek-jenkins-testing/python/test.py
    """
}

// test.py
connection = psycopg2.connect(
    host="saturn-dv",
    database="saturn_dv",
    port='8080',
    user=os.getenv('DB_USERNAME'),
    password=os.getenv('DB_PASSWORD'))