我在尝试使用 Github Action 将 CI/CD 应用到我们的项目时遇到了问题。服务器有防火墙,只能访问列出的IP。
我找到了一个使用Github meta api https://api.github.com/meta的方法,但他们拒绝申请。
还有其他方法可以应用这个吗?
我们现在的
ci.yml
name: remote ssh
on:
push:
branches: [ master ]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: execute ssh command via using private key
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.REMOTE_HOST }}
username: ${{ secrets.REMOTE_USER }}
key: ${{ secrets.CICD_SSH_KEY }}
port: ${{ secrets.PORT }}
script:
pwd
就我而言,我使用 OpenVPN 访问服务器。
关于安全。我认为你不应该将文件 VPN 配置加载到 Git。
这是我的配置文件。
name: remote ssh command to deploy
on:
push:
branches: [ master ]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install Open VPN
run: |
sudo apt-get install openvpn
echo "${{ secrets.VPN_FILE }}" > .github/vpn/config.ovpn
- name: Connect VPN
uses: golfzaptw/action-connect-ovpn@master
id: connect_vpn
with:
PING_URL: ${{ secrets.REMOTE_HOST }}
FILE_OVPN: '.github/vpn/config.ovpn'
env:
CA_CRT: ${{ secrets.CA_CRT}}
USER_CRT: ${{ secrets.USER_CRT }}
USER_KEY: ${{ secrets.USER_KEY }}
- name: Check Connect VPN
run: echo ${{ steps.connect_vpn.outputs.STATUS }}
- name: Execute ssh command via using private key
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.REMOTE_HOST }}
username: ${{ secrets.REMOTE_USER }}
key: ${{ secrets.CICD_SSH_KEY }}
port: ${{ secrets.PORT }}
script: |
pwd
cd ${{ secrets.REMOTE_TARGET }}
git pull
- name: kill vpn
if: always()
run: sudo killall openvpn
关注https://github.com/marketplace/actions/connect-vpn#Example-prepare-file-.ovpn:
复制标签内的数据以进行base64编码,然后保存到秘密环境github操作
删除标签并替换为 ca ca.crt cert user.crt key user.key
除了 OpenVPN,您还可以使用 Cloudflare WARP 1.1.1.1,它易于使用,无需运行任何服务器或任何类型的登录。
只是找份工作
name: remote ssh command to deploy
on:
push:
branches: [ master ]
jobs:
build:
name: Build
runs-on: ubuntu-latest
steps:
- name: Check Connect VPN
run: |
curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflare-client.list
sudo apt update
sudo apt install cloudflare-warp
warp-cli --accept-tos register
warp-cli --accept-tos connect
把这个放在那里。 Boom,您已经准备好去任何地方冲浪了。 注:
apt
主机列表,因为 apt
仅使用 microsoft 托管的 pkg,而且它不在那里。第二行出于同样的原因。完整文档在这里:
我的解决方法是使用自托管的 GitHub 运行程序。
阅读更多这里。
自托管运行器只需在您的服务器上设置一个侦听器应用程序,该应用程序将根据来自 GitHub 的事件做出反应,从而无需从 GitHub ssh 进入您的服务器。您的服务器不会让 github 通知您的服务器有新的更改,而是不断检查 Github 是否有任何新更改。
on:
push:
branches: [ "main", "stage" ]
permissions:
contents: read
jobs:
deploy-prod:
runs-on: self-hosted
if: github.ref == 'refs/heads/main'
steps:
- name: Pull Updated Code
run: |
cd /home/odoo/odoo && git pull origin main
- name: Updating Prod Server
run: |
export TMPDIR=$HOME/tmp && cd /home/odoo/odoo && sh scripts/update_server.sh
deploy-stage:
runs-on: self-hosted
if: github.ref == 'refs/heads/stage'
steps:
- name: Pull Updated Code
run: |
cd /home/odoo/stage && git pull origin stage
- name: Updating Stage Server
run: |
export TMPDIR=$HOME/tmp && cd /home/odoo/stage && sh scripts/update_server.sh