Jenkins 是一個開源工具自動化工具,用於設置整個軟件交付管道——持續交付。 這使開發人員能夠在整個生命週期內管理和控制軟件交付流程,例如可靠地構建、測試和部署他們的軟件。
Jenkins 擁有一個可擴展且充滿活力的活躍社區。 它是用Java編寫的。 通常,Jenkins 作為獨立的內置 Java servlet 應用程序運行。 也可以在 Java servlet 容器中運行,例如 Apache Tomcat 或 GlassFish。
在本教程中,我們將學習如何 配置詹金斯 和 Nginx 背後的 SSL 在 Ubuntu 20.04.
先決條件
- 一個 Ubuntu 20.04 服務器
- 一個用戶 sudo 規定
- 最少 1 GB RAM
- 已安裝 Oracle JDK 11 或更高版本。
第 1 步:在 Ubuntu 上安裝 Jenkins
默認 Ubuntu 存儲庫中可用的 Jenkins 包很可能落後於最新版本。 建議從官方存儲庫中提供的計劃維護包中安裝 Jenkins。
我們將首先將存儲庫密鑰添加到系統中。
$ wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
編寫本指南時,該過程將安裝版本 2.303.3
詹金斯的
接下來,讓我們將包存儲庫添加到 sources.list
文件:
$ sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
我們應該更新存儲庫的緩存
$ sudo apt update
現在你可以安裝 Jenkins:
$ sudo apt install jenkins
然後啟動服務
$ sudo systemctl start jenkins
讓我們將服務配置為隨服務器自動啟動
$ sudo systemctl enable jenkins
您可以檢查服務的狀態
$ sudo systemctl status jenkins
您可以通過查看文件來檢查版本 /var/lib/jenkins/config.xml
$ cat /var/lib/jenkins/config.xml
<?xml version='1.1' encoding='UTF-8'?>
<hudson>
<disabledAdministrativeMonitors/>
<version>2.303.3</version>
...
...
</hudson>
第 2 步:使用 SSL 證書配置 Nginx
現在我們將使用 Nginx 代理通信,我們首先需要安裝它
$ sudo apt install nginx
現在您需要復製文件夾中的證書以使用。 我們會認為您已經擁有 SSL 證書。
我們會復印證書
$ sudo cp jenkins.domain.com.crt /etc/nginx/certs/jenkins.domain.com.crt
然後復制key
$ sudo cp jenkins.domain.com.key /etc/nginx/certs/jenkins.domain.com.key
為避免與 Nginx 的默認配置發生衝突,我們將從 sites-enabled
目錄
sudo rm /etc/nginx/sites-enabled/default
現在讓我們創建Jenkins的配置文件。 Jenkins 通常使用 8080 端口運行,但由於我們使用的是 Nginx,它會監聽 80 和 443 端口,然後根據域名信息,它會在內部代理 Jenkins 8080 端口上的通信。
我們將設置的配置將自動強制所有 HTTP 請求為 HTTPS
$ sudo vim /etc/nginx/sites-available/jenkins.conf
upstream jenkins.domain.com {
server SERVER_IP:8080;
}
server {
server_name jenkins.domain.com;
listen 80 ;
access_log /var/log/nginx/jenkins.log;
return 301 https://$host$request_uri;
}
server {
server_name jenkins.domain.com;
listen 443 ssl http2 ;
access_log /var/log/nginx/jenkins.log;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;
ssl_session_timeout 5m;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_certificate /etc/nginx/certs/jenkins.domain.com.crt;
ssl_certificate_key /etc/nginx/certs/jenkins.domain.com.key;
add_header Strict-Transport-Security "max-age=31536000";
location / {
proxy_pass https://jenkins.domain.com;
}
}
除了 Jenkins Nginx 配置之外,我們還添加了一些必需的 nginx 衍生產品。 您可以根據您的網絡服務器要求使用和優化。
現在創建配置文件的符號以啟用它
$ sudo ln -s /etc/nginx/sites-available/jenkins.conf /etc/nginx/sites-enabled/jenkins.conf
現在啟動 Nginx 服務
$ sudo systemctl start nginx
然後在啟動時啟用它
$ sudo systemctl enable nginx
現在您可以測試您的 Nginx 配置
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
現在重新啟動 Nginx 服務以考慮配置
$ sudo systemctl restart nginx
現在打開防火牆上的端口 80 和 443:
$ sudo ufw allow 80,443/tcp
另外,請確保在啟用 UFW 之前打開 ssh 端口,否則,如果出現問題,您可能會丟失 ssh 連接
$ sudo ufw allow 'OpenSSH'
如果還沒有,現在啟用 UFW
$ sudo ufw enable
第 3 步:訪問和配置 Jenkins
現在使用 URL https://jenkins.domain.com 打開瀏覽器,然後您將看到 Jenkins 頁面要求您輸入密碼
要獲得密碼,您應該顯示所指示的文件內容
$ sudo cat /var/lib/jenkins/secrets/initialAdminPassword
88ba484d8cff4150a90683a07c89ea7c
然後粘貼密碼並繼續下一頁。 您現在將看到要求安裝默認插件或選擇要安裝的插件的頁面。 在我們的例子中,我們將保留默認的

然後你會看到安裝過程

現在您需要創建 admin 用戶。

現在驗證 Jenkins 的 URL。

現在你可以開始使用你的 Jenkins

結論
在本教程中,我們學習瞭如何在 Ubuntu 20.04 上使用 Nginx 後面的 SSL 配置 Jenkins。 您可以開始配置 CI/CD 流程的作業和管道。