<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # Running Composer and NPM scripts with deployment via SCP in GitLab CI/CD > 原文:[https://docs.gitlab.com/ee/ci/examples/deployment/composer-npm-deploy.html](https://docs.gitlab.com/ee/ci/examples/deployment/composer-npm-deploy.html) * [How to transfer files to a live server](#how-to-transfer-files-to-a-live-server) * [Security tip](#security-tip) * [How to deploy](#how-to-deploy) * [Why we do it this way](#why-we-do-it-this-way) * [Where to go next](#where-to-go-next) # Running Composer and NPM scripts with deployment via SCP in GitLab CI/CD[](#running-composer-and-npm-scripts-with-deployment-via-scp-in-gitlab-cicd "Permalink") 本指南涵蓋了在使用[GitLab CI / CD](../../README.html)通過 NPM 腳本編譯資產時,如何構建 PHP 項目的依賴項. 雖然可以使用自定義的 PHP 和 Node.js 版本創建自己的映像,但為了簡便起見,我們將使用既包含 PHP 又安裝 Node.js 的現有[Docker 映像](https://hub.docker.com/r/tetraweb/php/) . ``` image: tetraweb/php ``` 下一步是安裝 zip / unzip 軟件包并使 composer 可用. 我們將它們放在`before_script`部分中: ``` before_script: - apt-get update - apt-get install zip unzip - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - php composer-setup.php - php -r "unlink('composer-setup.php');" ``` 這將確保我們已準備好所有要求. 接下來,我們要運行`composer install`來獲取所有 PHP 依賴項,然后運行`npm install`來加載 Node.js 包,然后運行`npm`腳本. 我們需要將它們附加到`before_script`部分: ``` before_script: # ... - php composer.phar install - npm install - npm run deploy ``` 在此特定情況下, `npm deploy`腳本是執行以下操作的 Gulp 腳本: 1. 編譯 CSS 和 JS 2. Create sprites 3. 復制各種資產(圖像,字體) 4. 替換一些字符串 所有這些操作會將所有文件放入一個`build`文件夾,該文件夾準備好部署到實時服務器中. ## How to transfer files to a live server[](#how-to-transfer-files-to-a-live-server "Permalink") 您有多種選擇:rsync,SCP,SFTP 等. 現在,我們將使用 SCP. 為此,您需要添加一個 GitLab CI / CD 變量(可在`gitlab.example/your-project-name/variables` ). 該變量將稱為`STAGING_PRIVATE_KEY` ,它是服務器的**私密** SSH 密鑰. ### Security tip[](#security-tip "Permalink") 創建一個**僅**可以訪問需要更新的文件夾的用戶. 創建該變量后,需要確保在運行時將密鑰添加到 Docker 容器中: ``` before_script: # - .... - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - mkdir -p ~/.ssh - eval $(ssh-agent -s) - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' ``` 按順序,這意味著: 1. 我們檢查`ssh-agent`是否可用,如果沒有,則安裝它. 2. 我們創建`~/.ssh`文件夾. 3. 我們確保正在運行 bash. 4. 我們禁用主機檢查(當我們首次連接到服務器時,我們不要求用戶接受,并且由于每個作業都將等同于首次連接,因此我們有點需要這樣做). 這基本上是您在`before_script`部分中所需要的. ## How to deploy[](#how-to-deploy "Permalink") 如上所述,我們需要將 Docker 鏡像中的`build`文件夾部署到我們的服務器. 為此,我們創建了一個新作業: ``` stage_deploy: artifacts: paths: - build/ only: - dev script: - ssh-add <(echo "$STAGING_PRIVATE_KEY") - ssh -p22 server_user@server_host "mkdir htdocs/wp-content/themes/_tmp" - scp -P22 -r build/* server_user@server_host:htdocs/wp-content/themes/_tmp - ssh -p22 server_user@server_host "mv htdocs/wp-content/themes/live htdocs/wp-content/themes/_old && mv htdocs/wp-content/themes/_tmp htdocs/wp-content/themes/live" - ssh -p22 server_user@server_host "rm -rf htdocs/wp-content/themes/_old" ``` 這是細分: 1. `only:dev`表示僅當將某些內容推送到`dev`分支時,此構建才會運行. 您可以完全刪除此塊,并在每次推送時都運行所有內容(但是這可能是您不想要的) 2. `ssh-add ...`我們會將您在 Web UI 上添加的私鑰添加到 Docker 容器中 3. 我們將通過`ssh`連接并創建一個新的`_tmp`文件夾 4. 我們將通過`scp`連接并將`build`文件夾(由`npm`腳本生成)上傳到我們先前創建的`_tmp`文件夾中 5. 我們將再次通過`ssh`連接,然后將`live`文件夾移至`_old`文件夾,然后將`_tmp`移至`live` . 6. 我們連接到 SSH 并刪除`_old`文件夾 這些文物怎么處理? 我們只是告訴 GitLab CI / CD 保留`build`目錄(以后,您可以根據需要下載該目錄). ### Why we do it this way[](#why-we-do-it-this-way "Permalink") 如果僅將其用于舞臺服務器,則可以分兩個步驟進行操作: ``` - ssh -p22 server_user@server_host "rm -rf htdocs/wp-content/themes/live/*" - scp -P22 -r build/* server_user@server_host:htdocs/wp-content/themes/live ``` 問題在于,服務器將在短時間內沒有該應用程序. 因此,對于生產環境,我們使用其他步驟來確保在任何給定時間都可以使用功能正常的應用程序. ## Where to go next[](#where-to-go-next "Permalink") 由于這是一個 WordPress 項目,因此我給出了真實的代碼片段. 您可以追求一些進一步的想法: * `master`分支的腳本稍有不同,將使您可以從該分支部署到生產服務器,并從任何其他分支部署到階段服務器. * 除了將其實時發布之外,您還可以將其推送到 WordPress 官方存儲庫(創建 SVN 提交等). * 您可以動態生成 i18n 文本域. * * * 我們最終的`.gitlab-ci.yml`將如下所示: ``` image: tetraweb/php before_script: - apt-get update - apt-get install zip unzip - php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" - php composer-setup.php - php -r "unlink('composer-setup.php');" - php composer.phar install - npm install - npm run deploy - 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )' - mkdir -p ~/.ssh - eval $(ssh-agent -s) - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' stage_deploy: artifacts: paths: - build/ only: - dev script: - ssh-add <(echo "$STAGING_PRIVATE_KEY") - ssh -p22 server_user@server_host "mkdir htdocs/wp-content/themes/_tmp" - scp -P22 -r build/* server_user@server_host:htdocs/wp-content/themes/_tmp - ssh -p22 server_user@server_host "mv htdocs/wp-content/themes/live htdocs/wp-content/themes/_old && mv htdocs/wp-content/themes/_tmp htdocs/wp-content/themes/live" - ssh -p22 server_user@server_host "rm -rf htdocs/wp-content/themes/_old" ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看