Gitlab CI中使用openvpn連線

2022/05/11

首先

openvpn包含三個檔案

  • ca.crt: 憑證
  • openvpn.ovpn: openvpn連線設定檔
  • pw.txt: 帳號密碼文字檔(第一行為帳號,第二行為密碼)

 

Gitlab CI/CI變數設定

接著要前往Gitlab CI/CD的變數設定頁面

將上述三個openvpn檔案設定為變數(需要設定為file類型)

以下為範例變數對照的檔案

  • OPENVPN_CA: ca.crt
  • OPENVPN_CONFIG: openvpn.ovpn
  • OPENVPN_PW: pw.txt

 

.gitlab-ci.yml

最主要要注意

openvpn執行的時候要啟用在背景(daemon)

另外要透過auth-user-pass參數設定密碼文字檔(pw.txt)的位置

image: ciaochung/ci-nodejs12-php:stable

before_script:
  - apt-get install openvpn -y
  - node -v

backend_test:
  stage: test
  only:
    variables:
      - $CI_COMMIT_MESSAGE =~ /test/
      - $CI_COMMIT_TAG =~ /test/
  script:
    # 透過CI/CD變數建立openvpn相關設定檔案
    - mkdir -p $CI_PROJECT_DIR/config
    - cat "$CA" > $CI_PROJECT_DIR/config/ca.crt
    - cat "$OPENVPN_CONFIG" > $CI_PROJECT_DIR/config/openvpn.ovpn
    - cat "$PW" > $CI_PROJECT_DIR/config/pw.txt
    - cd $CI_PROJECT_DIR/config
    - echo "nameserver 8.8.8.8" >> /etc/resolv.conf
    - echo "nameserver 114.114.114.114" >> /etc/resolv.conf
    # 啟動openvpn背景連線(daemon)
    - openvpn --config $CI_PROJECT_DIR/config/openvpn.ovpn
      --daemon
      --log $CI_PROJECT_DIR/config/openvpn.log
      --auth-user-pass $CI_PROJECT_DIR/config/pw.txt
    # 停留5秒等待openvpn連線
    - sleep 5s
    # 透過curl測試私有網域內的web連線
    - curl http://your-private-website --connect-timeout 20
    - echo "Connect Successfully"