【问题标题】:github action is running on feature branches and it should only run on main branch or release branchgithub 操作在功能分支上运行,它应该只在主分支或发布分支上运行
【发布时间】:2023-02-08 22:16:15
【问题描述】:

我有以下 github 操作,即使我创建了一个名称不是 mainmasterrelease 的功能分支,它也会运行该操作

我究竟做错了什么?

#see https://raw.githubusercontent.com/zellwk/zellwk.com/master/.github/workflows/deploy.yml
name: deploy
on:
  push:
    branches:
      - main
      - master
      - release
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1

      - name: Install SSH Key
        uses: shimataro/ssh-key-action@v2
        with:
          key: ${{ secrets.SSH_PRIVATE_KEY }}
          known_hosts: unnecessary

      - name: Adding Known Hosts
        run: ssh-keyscan -p ${{ secrets.SSH_PORT}} -H ${{ secrets.SSH_HOST }}  >> ~/.ssh/known_hosts

      - name: Set env file and jwk.json for release
        if: ${{ contains(github.ref_name, 'release') || github.ref == 'refs/heads/release' }}
        run: |
          echo "${{secrets.PRODUCTION_ENV }}" > .env.prod
          ln -sf .env.prod .env
          echo "${{secrets.PRODUCTION_JWK}}" | base64 --decode > jwk.json

      - name: Set env file and jwk.json for development
        if: ${{ !contains(github.ref_name, 'release') || github.ref != 'refs/heads/release' }}
        run: |
          echo "${{secrets.DEVELOPMENT_ENV }}" > .env.dev
          ln -sf .env.dev .env
          echo "${{secrets.DEVELOPMENT_JWK}}" | base64 --decode > jwk.json

      - name: Deploy with rsync for release
        if: ${{ contains(github.ref_name, 'release') || github.ref == 'refs/heads/release' }}
        # from ./bin/deploy.sh
        run: rsync -azvP -e "ssh -p ${{ secrets.SSH_PORT }}" --delete --exclude=node_modules --exclude=redis-data --exclude=.idea --exclude=.git --exclude=mongo_data --exclude=data01 --exclude=uploads --exclude=emails.txt --exclude=main --exclude=deno --exclude=app --exclude=database.sqlite --exclude=database.sqlite-journal --exclude=data ./ ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:www/${{secrets.HOST_PATH_PROD}}/${{secrets.HOST_PROJECT}}
      #        run: rsync -avz -e "ssh -p ${{ secrets.SSH_PORT }}" ./dist/ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/var/www/zellwk.com/

      - name: Deploy with rsync for development
        if: ${{ !contains(github.ref_name, 'release') && github.ref != 'refs/heads/release' }}
        # from ./bin/deploy.sh
        run: rsync -azvP -e "ssh -p ${{ secrets.SSH_PORT }}" --delete --exclude=node_modules --exclude=redis-data --exclude=.idea --exclude=.git --exclude=mongo_data --exclude=data01 --exclude=uploads --exclude=emails.txt --exclude=main --exclude=deno --exclude=app --exclude=database.sqlite --exclude=database.sqlite-journal --exclude=data ./ ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}}:www/${{secrets.HOST_PATH_DEV}}/${{secrets.HOST_PROJECT}}

      - name: Post-Deploy script for release
        if: ${{ contains(github.ref_name, 'release') || github.ref == 'refs/heads/release' }}
        # from ./bin/deploy.sh
        run: ssh -t ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} -p ${{secrets.SSH_PORT}} \$HOME/www/${{secrets.HOST_PATH_PROD}}/${{secrets.HOST_PROJECT}}/bin/post-deploy.sh


      - name: Post-Deploy script for development
        if: ${{ !contains(github.ref_name, 'release') && github.ref != 'refs/heads/release' }}
        # from ./bin/deploy.sh
        run: ssh -t ${{secrets.SSH_USER}}@${{secrets.SSH_HOST}} -p ${{secrets.SSH_PORT}} \$HOME/www/${{secrets.HOST_PATH_DEV}}/${{secrets.HOST_PROJECT}}/bin/post-deploy.sh
  

      # - name: Restart App Server
      #   uses: appleboy/ssh-action@master
      #   with:
      #     host: ${{ secrets.SSH_HOST }}
      #     username: ${{ secrets.SSH_USER }}
      #     key: ${{ secrets.SSH_PRIVATE_KEY }}
      #     port: ${{ secrets.SSH_PORT }}
      #     debug: true
      #     # from ./bin/post-deploy.sh
      #     #            if [ ${{ contains(github.ref_name, 'release') || github.ref == 'refs/heads/release' }} ]; then
      #     #           else
      #     #             cd $HOME/www/${{secrets.HOST_PATH_DEV}}/${{secrets.HOST_PROJECT}}
      #     #             deno upgrade
      #     #             sudo /etc/init.d/nginx reload
      #     #             sudo systemctl daemon-reload
      #     #             sudo systemctl restart ${{secrets.META_SERVICE_DEV}}
      #     #           fi
      #     script: |
      #       cd $HOME/www/${{secrets.HOST_PATH_DEV}}/${{secrets.HOST_PROJECT}}
      #       deno upgrade
      #       sudo /etc/init.d/nginx reload
      #       sudo systemctl daemon-reload
      #       sudo systemctl restart ${{secrets.META_SERVICE_DEV}}

它不应该在推送到不同的分支时运行操作,即:feature1

【问题讨论】:

  • 在此处创建分支时,您的工作流文件也会提交到该新分支。您可以只从新分支中删除工作流文件。
  • 您还可以将 environment: xxxxxx 添加到您的部署作业并将其分支过滤器设置为这 3 个分支。

标签: github-actions


【解决方案1】:

有两件事正在发生。即使您已经更新了 main/master 分支中的 YAMl 文件,现有分支也可能有一份没有过滤器的 YAML 文件副本。您可以通过将新的 YAML 文件挑选到现有分支中来解决这个问题。

您可以做的另一件事是定义一个环境并将 environment: xxxxx 添加到 YAML 文件和环境上的分支过滤器。这将阻止人们对环境运行部署作业。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-09
    • 2015-03-29
    • 1970-01-01
    • 2017-06-08
    • 2020-03-20
    • 2020-03-06
    • 2022-01-26
    • 1970-01-01
    相关资源
    最近更新 更多