有没有一种方法可以让Jenkins中的脚本使用AAD自动执行,数据来自SQL

monwx1rj  于 2022-12-29  发布在  Jenkins
关注(0)|答案(1)|浏览(172)

我们有一个第三方客户端,我们使用AAD认证从SQL中提取数据。下面是我们使用Python在本地系统中运行的方法。

server = 'XXX.database.windows.net'
database = 'xxx-production'
username ='xxx'
Authentication='ActiveDirectoryPassword'
password = 'xxx'

driver= '{ODBC Driver 17 for SQL Server}'
conn = pyodbc.connect('DRIVER='+driver+
                      ';SERVER='+server+
                      ';PORT=1433;DATABASE='+database+
                      ';UID='+username+
                      ';PWD='+ password+
                      ';AUTHENTICATION='+Authentication

                      )
df=pd.read_sql(''' select xxxx from tablename.. ''',conn)

但是我们现在必须在Jenkins安排这个,看起来AAD正在制造一个问题。我们有什么办法可以在Jenkins安排吗?

lyfkaqu1

lyfkaqu11#

我已经通过启用Azure AD登录部署了Azure SQL数据库,并为数据库设置了一个管理员。

我能够在本地使用Azure AD对SQL Server进行身份验证,并使用以下代码获得所需表的输出:


输出:

现在,我已经在Azure上的Linux VM中安装了Jenkins,并尝试在Jenkins中运行此脚本。
我已经将上面的代码上传到了我的Git-hub仓库中,这样Jenkins服务器就可以连接到我们的Git-hub仓库并运行上面的代码。
上面的文件被添加到我的git-hub repo中,如下所示:-

现在,让我们转到Jenkins服务器,创建一个自由样式项目来手动运行Python脚本,并使用CRON表达式对其进行调度:-
手动运行Python脚本:-

  • 我使用我的存储库名称

    创建了一个新项目

  • 添加了基本描述:-

  • 添加了我的Git仓库URL和我的凭据,并将分支设置为python(我们的项目所在的位置):-

  • 由于我的Jenkins在Azure中的Linux VM上运行,因此我将"生成"设置保留为"执行Shell"。如果你的Jenkins在Windows计算机上运行,则可以选择"执行Windows批处理

  • 现在,我应用这些设置保存并运行构建,我成功地获得了Azure SQL DB表输出,如下所示:

解决错误:-

  1. Check which machine your Jenkins is running on: - If its running on windows machine, Select Execute Windows Batch and write command – python <your-script-name.py - If your Jenkins is running on Linux machine or VM > Select Execute Shell in Build Steps and write command – python3 <your-script-name.py>
    1.由于我们的SQL身份验证需要ODBC驱动程序,
-   First install ODBC driver 17 in your host machine where your Jenkins is running following this link according to your OS: [Microsoft ODBC Driver for SQL Server - ODBC Driver for SQL Server | Microsoft Learn](https://learn.microsoft.com/en-us/sql/connect/odbc/microsoft-odbc-driver-for-sql-server?view=sql-server-ver16#documentation)
- Make sure to install python in your host machine that runs Jenkins. In my lab, I installed python3 in my Ubuntu VM – **sudo apt update** **sudo apt install python3**. If you’re using Windows machine, directly install python from python.org.
- You need to install and import pip module in your host machine that runs Jenkins, In my lab, I ran
    • sudo apt更新sudo apt安装python3-pippip安装pyodbc**
    • 调度python脚本:-**

每1分钟运行此作业的说明

选择BuildPeriodically(定期生成**)并编写CRON表达式以调度脚本。

我已经安排脚本每1分钟运行一次,您可以更改CRON表达式以将Build设置为所需的时间。

生成每分钟成功运行一次:

另一个示例-每15分钟自动生成一次

您可以根据自己的要求更改CRON表达式并计划生成。
除了使用自由样式项目,还可以使用Pipeline构建此脚本。

相关问题