環境html
Windows 10 git
Docker Version 18.06.1-ce-win73 (19507)github
運行jenkins 容器web
docker run -d --name lnmp-jenkins --user root -p 8080:8080 -p 50000:50000 jenkins/jenkins:2.165
一、請使用 root 帳戶運行,不然使用默認jenkins帳戶運行的時間將會有問題。docker
二、因爲是Windows 環境,因此這裏不建議掛在數據卷。不然將會有一些插件安裝不成功的問題出現。若是非要掛在請求使用 Kitematic.exe vim
三、方便區分,請給容器給個名字segmentfault
設置帳戶api
經過http://you_host:8080
登錄查看bash
在Getting Started界面會須要初始的密碼Unlock Jenkins。密碼會在輸出終端,也可根據頁面提示到容器的jenkins_home中查找服務器
查看密碼請進入容器內查看
docker exec -it lnmp-jenkins bash
密碼文件路徑
root@52c33b1a61ba:/var/jenkins_home/secrets#
有了密碼,輸入後安裝建議的插件。完畢後,根據提示設置登錄帳戶。
首頁 -> 點擊系統管理 -> 管理插件 ->可選插件 -> 過濾:ssh -> 選擇Publish Over SSH插件,點擊直接安裝。
首先在容器中生成rsa密鑰:
# 從宿主機客戶進入容器,目前容器名lnmp-jenkins,也可經過docker ps 查看
$ docker exec -it lnmp-jenkins /bin/bash
# 進入容器後創建.ssh目錄,建立密鑰文件私鑰id_rsa,公鑰id_rsa.pub
~ mkdir ~/.ssh && cd ~/.ssh
~ ssh-keygen -t rsa
# 一直回車便可
添加公鑰到宿主機
將id_rsa.pub中字符串添加到authorized_keys文件末尾,重啓ssh服務sudo service ssh restart
注意宿主機是否開啓ssh服務。
能夠在容器終端中使用下面的命令添加到宿主機中。也可手動複製id_rsa.pub到宿主機的.ssh/authorized_keys文件中。
ssh-copy-id -i ~/.ssh/id_rsa.pub <username>@<host>
這裏會要求咱們輸入遠程服務器的密碼。
ssh-server
配置文件位於:/etc/ssh/sshd_config
中,須要設置ssh-server
容許使用私鑰/公鑰對的方式登陸,打開配置文件:
vim /etc/ssh/sshd_config
增長設置:
RSAAuthentication yes
PubkeyAuthentication yes
而後重啓ssh-server:
sudo /etc/init.d/ssh restart
設置完成以後就可使用命令ssh <username>@<host>
直接登陸服務器了,不須要再輸入密碼了。
項目配置
首先,新建一個任務。填寫項目名稱。 選擇源碼管理爲:Git,填寫項目庫的URL。私有項目須要添加Git帳號。
構建環境:選擇Send files or execute commands over SSH after the build runs
,選擇服務器,以及添加Exec command
。保存。
添加私鑰
jenkins首頁,系統管理 -> 系統設置 -> 下拉,找到Publish over SSH,填寫Key 和 SSH Server -> 保存
高級選項可以配置ssh服務器端口和超時。Test可測試,顯示success
配置成功。
配置webhook,實現自動部署
獲取API tonken:首頁 -> 用戶 -> 選擇當前的用戶 -> 設置 -> 在API Tonken 項中點擊Show API Token...
http://jenkins.tinywan.top/buildWithParameters?token=11216ee77000c52461ad16e5c4502427bb&cause=Cause+Text
http://jenkins.tinywan.top/job/Python%E8%87%AA%E5%8A%A8%E5%8C%96%E6%B5%8B%E8%AF%95/build?token=11216ee77000c52461ad16e5c4502427bb&cause=Cause+Text
添加令牌:返回首頁 -> 項目 -> 配置 -> 構建觸發器 -> 選擇 "觸發遠程構建" ->粘貼"API Token"內容到"身份驗證令牌"
注意:這裏的身份驗證令牌是隨意生成的。不是非必須後臺生成的token api
測試結果
修改本地代碼而後提交、Jenkins自動構建部署
查看構建日誌記錄
控制檯輸出
Started by remote host 192.30.252.37 with note: Cause Text
Building in workspace /var/jenkins_home/workspace/Python自動化測試
No credentials specified
> git rev-parse --is-inside-work-tree # timeout=10
Fetching changes from the remote Git repository
> git config remote.origin.url https://github.com/Tinywan/t_log.git # timeout=10
Fetching upstream changes from https://github.com/Tinywan/t_log.git
> git --version # timeout=10
> git fetch --tags --progress https://github.com/Tinywan/t_log.git +refs/heads/*:refs/remotes/origin/*
> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
> git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10
Checking out Revision 34f8b6beaf5ebc8f400e2da3432fd798c64acc83 (refs/remotes/origin/master)
> git config core.sparsecheckout # timeout=10
> git checkout -f 34f8b6beaf5ebc8f400e2da3432fd798c64acc83
Commit message: "使用Docker+Jenkins自動構建部署【Python自動化測試】"
> git rev-list --no-walk fd1c8499da56077ce84accfd3d0b1843c859398a # timeout=10
SSH: Connecting from host [52c33b1a61ba]
SSH: Connecting with configuration [www.tinywan.com] ...
SSH: EXEC: STDOUT/STDERR from command [pwd
cd /home/www/data/t_log
echo "jenkins before" >> jenkins.log
git pull
echo "jenkins after" >> jenkins.log] ...
/home/www
From https://github.com/Tinywan/t_log
fd1c849..34f8b6b master -> origin/master
Updating fd1c849..34f8b6b
Fast-forward
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
SSH: EXEC: completed after 4,005 ms
SSH: Disconnecting configuration [www.tinywan.com] ...
SSH: Transferred 0 file(s)
Finished: SUCCESS
參考