- 我有以下服务器:Ubuntu v22.04.1(Linux)和 LEMP(PHP v5.6(我知道它很旧,但旧版应用程序需要它)、MySQL v8.0.36 和 Nginx)。
- 我还有一个私人 GitHub 存储库,里面有我想放在我的 Ubuntu 服务器上的应用程序代码。
- 我想使用 Github Actions 通过 SSH 连接到 Ubuntu 服务器,并使用 SSH 连接到私有仓库并在主分支每次获得推送时提取代码。
这是我的 .yaml 文件中的代码,GitHub Actions 使用它来连接 Ubuntu 服务器并提取 GitHub 仓库代码(这是我正在努力的部分)。
# Workflow to deploy code to the Ubuntu LEMP server every time there's a push to the main branch.
name: Deploy to Ubuntu Server
# Control when the actions happen.
on:
# Triggers the workflow on push or pull request events but only for the main branch.
push:
branches: [ main ]
pull_request:
branches: [ main ]
# Allows you to run this workflow manually from the Actions tab.
workflow_dispatch:
# A workflow run is made up of one or more jobs that can run sequentially or in parallel.
jobs:
# This workflow contains a single job called "deploy".
deploy:
name: Deploy
# The type of runner that the job will run on.
runs-on: ubuntu-latest
# Steps represent a sequence of tasks that will be executed as part of the job.
steps:
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it.
- name: Checkout code
uses: actions/checkout@v4
## Deploy using SSH to server
- name: Execute remote SSH commands and deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.REMOTE_IP }}
username: ${{ secrets.REMOTE_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
port: ${{ secrets.SSH_PORT }}
script: |
cd ${{ secrets.REMOTE_PATH }} &&
git init &&
git pull origin main [email protected]:<username>/<repo-name>.git &&
git pull origin main &&
php cli/migrate.php -v -d &&
php cli/migrate.php -v &&
rm -Rf shared/cache &&
ln -nfs shared/cache files &&
rm -Rf Capfile &&
rm -Rf config/deploy* &&
rm -Rf .gitignore &&
rm -Rf .git &&
rm -Rf README.md &&
php cli/update_revision.php &&
php cli/update_crontab.php &&
mkdir -p shared/certs &&
mkdir -p shared/files &&
mkdir -p shared/cache &&
touch shared/config.php &&
if [ -d shared/pids ]; then rmdir shared/pids; fi &&
if [ -d shared/system ]; then rmdir shared/system; fi &&
if (crontab -l | grep -q LEAF_PRODUCTION=1); then echo /dev/null; else { crontab -l; echo "LEAF_PRODUCTION=1"; } | crontab -; fi &&
if (grep -q LEAF_PRODUCTION=1 ~/.profile); then echo /dev/null; else echo "export LEAF_PRODUCTION=1" >> ~/.profile; fi
问题出在这部分代码上
git pull origin main [email protected]:<username>/<repo-name>.git &&
我需要使用两组SHH密钥。
- 一套用于连接 Ubuntu 服务器(我已将公钥放在服务器中,私钥存储为 GitHub 密钥)这部分代码有效。
- 另一个是连接到私有 GitHub repo 并在那里克隆代码(基本上相反,私钥在服务器上,但公钥存储为私有 GitHub repo 部署密钥)。
连接到 Ubuntu 服务器是可行的,但我不明白如何为代码提供第二组 SHH 密钥来连接和克隆 GitHub 存储库。现在编写代码的方式,它仅使用第一组 SHH 密钥连接到 Ubuntu 服务器。
答案1
在等待评论时我尝试了不同的方法并且成功了。
- 我没有使用 SSH,而是尝试创建一个 Github 访问令牌,该令牌提供对该存储库的访问,但容量有限。您可以在 GitHub 个人资料设置 >> 开发人员设置 >> 个人访问令牌 >> 细粒度个人访问令牌中完成此操作。
- 我获取了访问令牌并将其添加到我的 Github Action 机密中。
- 我使用该密钥从以下 HTTPS URL 生成并提取代码:https://:<access_token>@github.com//<repo_name>.git
这种方法的问题在于,为了使它工作,我必须放弃 SSH。我相信有一种方法可以解决 SSH 问题,但目前,我的解决方案有效。