目录
pipeline
Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。
所以Pipeline相对自由风格或者其他的项目风格更容易操作。
安装ssh agent 插件
新建流水线项目
复制一下脚本并做相应修改
pipeline {
agent any #定义在所有agent跑
stages {
stage('check out') {
steps { #通过git拉取代码,将之前的交互式变成标准化
git credentialsId: '2916f70d-6740-45dc-b4ca-50dd5aecfb8f', url: 'git@192.168.56.175:root/project1.git', branch: 'main'
}
}
stage('docker build') { #构建
steps {
sh '''
cd $WORKSPACE
docker build -t reg.westos.org/library/demo:${BUILD_NUMBER} .
'''
}
}
stage('docker push') {#推送到仓库
steps {
sh '''
REPOSITORY=reg.westos.org/library/demo:${BUILD_NUMBER}
docker tag $REPOSITORY reg.westos.org/library/demo:latest
docker login reg.westos.org -u admin -p westos
docker push $REPOSITORY
docker push reg.westos.org/library/demo:latest
'''
}
}
stage('docker deploy') {#部署
steps {
sshagent(credentials: ['2916f70d-6740-45dc-b4ca-50dd5aecfb8f']) {
sh '''
ssh -o StrictHostKeyChecking=no root@192.168.56.177 """
docker ps -a |grep myapp && docker rm -f myapp
docker rmi demo:latest #删除以上新镜像
docker run -d --name myapp -p 80:80 demo:latest """
'''
}
}
}
}
}
保存并立即构建
jenkins结合ansible参数化构建
净化环境,恢复master节点工作任务数2,去掉agent节点,禁用了docker项目
jenkins结合ansible部署apache
主机环境
主机 | IP | 角色 |
vm6 | 192.168.56.176 | jenkins、ansible |
vm7 | 192.168.56.177 | 测试机、devops sudo |
vm8 | 192.168.56.178 | 测试机、devops sudo |
在ansible主机上以jenkins身份配置ssh免密到所有测试机
devops是测试机的ssh免密用户,并且配置sudo
安装ansible,解决依赖性
gitlab上新建ansible项目,使用gitlab托管playbook文件
[root@vm5 ~]# git clone git@192.168.56.175:root/ansible.git
[root@vm5 ~]# cd ansible/
创建管理对象文件,生产的和测试的端口不同
[root@vm5 ansible]# mkdir inventory
[root@vm5 ansible]# cd inventory/
[root@vm5 inventory]# vim prod
[prod]
192.168.56.177 http_port=80
[root@vm5 inventory]# vim test
[root@vm5 inventory]# cat test
[test]
192.168.56.178 http_port=8080
配置文件
[root@vm5 inventory]# cd ..
[root@vm5 ansible]# vim ansible.cfg
[defaults]
command_warnings=False
remote_user=devops
[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False
[root@vm5 ansible]# vim playbook.yml
- hosts: all
tasks:
- name: install apache
yum:
name: httpd
state: present
- name: configure apache
template:
src: httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
notify: restart apache
- name: start apache
service:
name: httpd
state: started
enabled: yes
handlers:
- name: restart apache
service:
name: httpd
state: restarted
修改端口,测试和生产用变量取传递
[root@vm5 ansible]# yum install -y httpd
[root@vm5 ansible]# cp /etc/httpd/conf/httpd.conf ~/ansible/httpd.conf.j2
[root@vm5 ansible]# vim httpd.conf.j2
...
Listen {{ http_port }}
当前目录全部提交
[root@vm5 ansible]# git add .
[root@vm5 ansible]# git commit -m "add playbook"
[root@vm5 ansible]# git push -u origin main
jenkins新建项目playbook
执行shell脚本,切到工作目录,运行指令
开始构建,测试环境
输出成功
生产环境同理