教程較簡潔,不清楚的部分請腦補。
1.部署docker環境
此步略過,網上教程很多,安裝後最好配置爲國內源。
2.安裝jenkins
先去這裏看一下最新lts的版本號:
https://jenkins.io/zh/download/
目前是2.204.1。
mkdir -p /data/jenkins
chown -R 1000:1000 /data/jenkins
docker run --name jenkins \
-v /data/jenkins:/var/jenkins_home:z \
-p 12001:8080 \
-p 12002:50000 \
-e TZ="Asia/Shanghai" \
--restart=always \
--add-host=updates.jenkins-ci.org:172.17.0.1 \
jenkins/jenkins:2.204.1
"--add-host=updates.jenkins-ci.org:172.17.0.1 \"這一步請配合後面的nginx反向代理使用,否則將無法下載插件,172.17.0.1是宿主機的ip。
記住終端輸出的密碼,在“Please use the following password to proceed to installation:”文字下方。
3.配置nginx反向代理
由於上一步處於阻塞狀態中,這裏可以新開一個終端來進行操作。
server {
listen 443 ssl;
ssl on;
server_name jenkins.xxx.com;
ssl_certificate /etc/letsencrypt/live/xxx.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/xxx.com/privkey.pem;
location / {
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_redirect http:// https://;
proxy_pass http://127.0.0.1:12001;
# Required for new HTTP-based CLI
proxy_http_version 1.1;
proxy_request_buffering off;
client_max_body_size 10M;
proxy_buffering off; # Required for HTTP-based CLI to work over SSL
# workaround for https://issues.jenkins-ci.org/browse/JENKINS-45651
add_header 'X-SSH-Endpoint' 'jenkins.xxx.com:50022' always;
}
}
4.初次配置jenkins
因爲上一步使用nginx配置了反向代理,所以這裏使用https://jenkins.xxx.com來訪問jenkins網址。
輸入之前記住的密碼,進行解鎖,然後稍等一會兒。
插件建議什麼都不要裝,因爲源在國外,很慢很難裝成功,等會兒換了源之後再裝,先把“推薦插件”記住。
之後,設定一個管理員用戶。
這時初步配置完畢,自動跳轉到了首頁,現在開始安裝插件。
5.安裝插件
入口路徑位於Manage Jenkins-Plugin Manager-Advanced-Upload Plugin。將Update Site的值換成“https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json”。
更改hosts
vim /etc/hosts
宿主機藉助nginx做一下反向代理
server {
listen 80;
server_name updates.jenkins-ci.org;
location ^~ /download/ {
proxy_redirect off;
proxy_pass https://mirrors.tuna.tsinghua.edu.cn/jenkins/;
}
}
之後開始一個個安裝之前的推薦插件。
這麼做的原因是,因爲下載插件的url都是jenkins官方的,如果要將它換成其它源,就需要用換host和反向代理的方式,“欺騙”插件從其它源中下載,畢竟這個下載url是無法直接更改的。
6.深入配置
如果使用了gradle,需要在系統管理-全局工具配置中添加一下gradle。
如果使用了maven,配置方法和gradle一樣,但是maven官方源下載速度很慢,建議手動下載安裝。手動下載好maven好之後,將解壓後根目錄下的文件複製到docker的/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/3.6.3中,權限要有rwxr-xr-x。其中3.6.3是我的maven版本號,更換成自己的版本號即可。然後到jenkins設置中,設置MAVEN_HOME。
安裝Publish Over SSH插件,這樣就可以在編譯結束後,將jar包傳送給遠程服務器了。
安裝好後到系統管理-系統配置,最下方,輸入遠程服務器的相關參數(比如宿主機就可以作爲一個遠程服務器)。
如果之前沒有生成過私鑰,可以進入jenkins的容器中,使用“ssh-keygen -t rsa -m pem”的命令生成公私鑰,然後記住私鑰(沒有後綴名那個)的位置,之後將公鑰追加到宿主機/root/.ssh/authorized_keys文件中(沒有就創建一個,裏面可以放多個公鑰,每個公鑰佔一行)。
回到剛纔的設置,“Path to key”中輸入私鑰在容器中的位置,“Name”輸入遠程服務器的標識,“Hostname”輸入遠程服務器的ip或者域名,“Username”輸入登陸遠程服務器的用戶名(比如用root),之後保存。
新建一個任務,選擇“構建一個自由風格的軟件項目”。
任務配置,“源碼管理-Git”中,“Repository URL”輸入git項目地址,“Credentials”輸入能訪問這個git的用戶和密碼。
“構建”中,選擇“Invoke Gradle”,並且選擇之前添加的gradle版本。
“構建後操作”中,“Name”選擇之前添加的遠程服務器,“Source files”中輸入要發送給遠程服務器的文件,“Remove prefix”爲發送文件時要截去的路徑,“Remote directory”爲將文件發送到遠程服務器的目錄(這個目錄會拼接在之前ssh設置中的“Remote Directory”之後),“Exec command”爲文件傳輸完成後在遠程服務器上執行的命令(命令執行的默認目錄爲登陸用戶的home目錄)。這個指令很關鍵,需要根據實際情況編寫,從服務器拿到一個jar包之後如何進行發佈爲止。
填好之後,保存,立即構建。第一次構建會下載gradle,所以速度比較慢,可以進入“控制檯輸出”看看實時日誌。