我正试图使用Github Actions在Azure中为我的flask应用程序构建一个CI/CD管道。
然而,当运行测试(使用pytest(时,我已经能够构建工作流,我收到错误
pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'ODBC Driver 18 for SQL Server' : file not found (0) (SQLDriverConnect)")
这似乎是由于Ubuntu VM/容器上缺少odbc驱动程序,GitHub操作用来运行代码。
因此,我尝试在建筑环境中安装驱动程序,使用:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list > /etc/apt/sources.list.d/mssql-release.list
apt-get update
ACCEPT_EULA=Y apt-get install -y msodbcsql18
ACCEPT_EULA=Y apt-get install -y mssql-tools18
echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install -y unixodbc-dev
这里也提出了同样的建议。
然而,当运行操作时,我收到以下错误:
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0Warning: apt-key output should not be parsed (stdout is not a terminal)
E: This command can only be used by root.
100 983 100 983 0 0 8776 0 --:--:-- --:--:-- --:--:-- 8776
(23) Failed writing body
Error: Process completed with exit code 1.
这似乎是由curl命令引起的。
所以我的问题是,使用GitHub操作测试我的应用程序的最佳方式是什么?我需要安装odbc驱动程序吗?如果是,我该怎么做?
提前谢谢。
您只需要apt-get包即可安装驱动程序:
steps:
- uses: actions/checkout@v3
- name: Install Microsoft ODBC
run: sudo ACCEPT_EULA=Y apt-get install msodbcsql18 -y
它成功地为我安装了。但值得指出的是,当你连接时,你需要使用映射到容器的端口:
env:
PORT: ${{ job.services.mssql.ports[1433] }}
这假设SQL Server的设置方式如下:
mssql:
image: mcr.microsoft.com/mssql/server:2022-latest
ports: [1433]
env:
MSSQL_PID: Developer
SA_PASSWORD: iugeshrigsuerbiwer
ACCEPT_EULA: Y
因为以上所有内容有时只是出于某种原因对我有用。我写了一个操作,按照微软的确切说明为任何发行版安装mssql-odbc驱动程序。在这里https://github.com/Yarden-zamir/install-mssql-odbc.如果将来有人像我一样偶然来到这里,并发现这很有用,那将是非常棒的。
你可以像一样使用它
- uses: Yarden-zamir/install-mssql-odbc@main
或
# all inputs
- uses: Yarden-zamir/install-mssql-odbc@main
with:
ODBC_VERSION: 17
DISTRO: Alpine
DOCS_URL: https://yarden-zamir.com/alternate-docs-path.md
REMOVE_EXITS: true
您需要使用提升的权限运行命令。简单地,将shell
与sudo
相加,如下所示:
- name: Install dependencies
run: |
python -m pip install --upgrade pip
...
sudo apt-get install -y unixodbc-dev
shell: sudo bash {0}