docker安裝參考鏈接
docker官網
jenkins中文官網
我的博客網站已經遷移到了https://johnnyting.github.io/,如果有興趣的可以關注下。
下面文章格式可能有點亂,可以查看我的博客原文: https://johnnyting.github.io/posts/%E4%BD%BF%E7%94%A8jenkinsdocker%E8%87%AA%E5%8A%A8%E5%8C%96%E9%83%A8%E7%BD%B2rails%E5%BA%94%E7%94%A8/
服務器環境為Ubuntu 16.04.2 LTS
1.卸載舊版本docker
sudo apt-get remove docker \
docker-engine \
docker.io
2.安裝docker,使用腳本自動安裝
curl -fsSL get.docker.com -o get-docker.sh
sudo sh get-docker.sh --mirror Aliyun
3.啟動docker
# 設置開啟自啟動
sudo systemctl enable docker
# 啟動docker
sudo systemctl start docker
# 查看版本
docker -v # docker --version
Docker version 18.09.5, build e8ff056
4.安裝docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 添加執行權限
sudo chmod +x /usr/local/bin/docker-compose
# 查看版本
docker-compose -v # docker-compose --version
5.安裝compose bash補全命令
curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose
6.如果需要卸載docker-compose,刪除可執行文件即可
sudo rm /usr/local/bin/docker-compose
7.配置docker鏡像加速
在/etc/docker/daemon.json 中寫入如下內容,如果沒有此文件新建即可:
{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://reg-mirror.qiniu.com"
]
}
重新啟動服務:
sudo systemctl daemon-reload
sudo systemctl restart docker
檢查加速器是否生效:
docker info
如果出現下面內容則配置成功
Registry Mirrors:
https://dockerhub.azk8s.cn/
https://reg-mirror.qiniu.com/
8.安裝jenkins,使用blue ocean鏡像,來創建流水線項目
docker run \
--name jenkins \
-u root \
-d \
-p 8090:8080 \
-v /home/oliver/jenkins_home:/var/jenkins_home \
-v /home/oliver/.ssh:/root/.ssh \
--restart=always \
jenkinsci/blueocean
# 將jenkins的數據目錄掛載出來,防止數據丟失
# 這里把.ssh目錄掛載出來的原因是:
# 1.之后需要將rails應用部署到其他服務器上,需要通過ssh認證來遠程部署應用,所以主機host需要保證和部署服務器連通。
# 2.需要將ssh公鑰傳入到git服務器上,保證能正常拉取代碼
➜ ~ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a210c6d643a3 jenkinsci/blueocean "/sbin/tini -- /usr/…" 3 minutes ago Up 3 minutes 50000/tcp, 0.0.0.0:8090->8080/tcp jenkins
# 查看jenkins日志
➜ ~ sudo docker logs -f --tail=50 a210c6d643a3

看到密碼后復制,或者進入容器內的/var/jenkins_home/secrets/initialAdminPassword 查看,因為jenkins容器目錄掛載到了/home/oliver/jenkins_home下,所以也可以查看
/home/oliver/jenkins_home/secrets/initialAdminPassword 文件中的內容。

10.選擇安裝推薦插件就行

11.然后等待安裝完成,如果安裝失敗就重新安裝。

12.然后下一步提示創建一個管理員賬號,填寫完就進入jenkins首頁。

13.配置憑據


添加全局憑據:

添加ssh私鑰,在/home/oliver/.ssh/id_rsa中

14.在本地rails項目中添加 Jenkinsfile:
pipeline {
agent any
stages {
stage('start') {
steps {
echo 'jenkins構建開始...'
}
}
stage('build') {
steps {
sh 'sh ssh.sh'
}
}
}
post {
success {
echo 'jenkins構建成功'
}
failure {
echo 'jenkins構建失敗'
}
}
}
15.連接應用部署服務器ssh.sh(jenkins所在服務器與應用部署服務器區分開):
16.根據部署腳本deploy.sh啟動容器:
17.構建所需要的Dockerfile:
FROM ruby:2.5.3
RUN apt-get update -qq && apt-get install -y curl netcat && \
curl -sL https://deb.nodesource.com/setup_10.x | bash - && \
apt-get install -y nodejs postgresql-client openjdk-8-jdk && \
npm install -g yarn --registry=https://registry.npm.taobao.org &&\
yarn config set registry https://registry.npm.taobao.org -g &&\
yarn config set sass_binary_site http://cdn.npm.taobao.org/dist/node-sass -g && \
apt-get purge -y --auto-remove curl && apt-get clean && \
rm -rf /var/lib/apt/lists/*
ENV LANG=C.UTF-8 RAILS_ROOT=/myapp
WORKDIR $RAILS_ROOT
VOLUME $RAILS_ROOT
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
18.入口點entrypoint.sh
version: '3'
services:
web:
build: .
volumes:
- .:/myapp
ports:
- "3000:3000"
restart: always
20.然后創建jenkins項目,打開blue ocean

21.選擇git代碼倉庫,填入git地址

填入地址后根據提示需要將你的ssh公鑰key配置到git服務器上,然后創建流水線。創建后多分支項目根目錄有Jenkinsfile的自動構建。
22.在項目配置中,選擇掃描項目的時間間隔,分支有改動自動觸發構建

這里設置每五分鍾掃描一次git倉庫

之后就是每次推送了代碼,jenkins發現代碼有改動就會觸發構建並使用docker部署到指定的服務器上,可以在jenkins后台查看構建過程,也可以在部署服務器查看容器日志。
