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"