linux系統----Ansible中的playbook簡單應用

目錄

Playbooks中tasks語法使用

1、file

創建文件:touch

創建目錄:directory

2、lineinfile

修改文件某一行文本

3、replace

根據正則表達式替換文件內容(指定換字符串)

5、template/copy

模板作用類似于copy,可將文件分發到不同節點上,可以在模板文件中引入變量

?8、wait_for

等待某些操作完成以后再進行后續操作

9、when

條件判斷,滿足后再執行任務


環境準備:

? ? ? ? 下載ansible

? ? ? ? 配置兩臺web主機,一臺ansible服務器

? ? ? ? ansible主機ip:192.168.158.150

? ? ? ? web1主機IP:192.168.158.158

? ? ? ? web2主機IP:192.168.158.161

? ? ? ? 修改好配置文件

? ? ? ? 關閉防火墻和安全上下文

[root@bogon ~]# hostnamectl set-hostname ansible
[root@bogon ~]# setenforce 0

ansible主機

創建playbook,編輯yml文件

[root@bogon ~]# mkdir playbook
[root@bogon ~]# cd playbook/
[root@bogon playbook]# vim test.yml

操作如下

Playbooks中tasks語法使用

1、file

操作文件,比如創建文件或目錄、刪除文件或目錄、修改文件權限等

常用參數:

  • path:指定要操作的文件或目錄

  • state:參數非常靈活,可以包含的值及含義如下

    • directory - 與path結合說明我們要操作的是一個目錄

    • touch - 與path結合說明我們要操作的是一個文件

    • link - 創建軟連接

    • hard - 創建硬鏈接

    • absent - 刪除目標

  • src:當state設置為link或hard創建鏈接時,用于說明鏈接哪個文件,指定鏈接源

  • force:值為yes表示強制創建

  • owner:指定被操作文件的屬主

  • group:指定被操作文件的屬組

  • mode:指定被操作文件的權限

示例:

- name: 創建一個testfile文件file: path=/tmp/testfile state=touch
- name: 創建一個目錄,并指定目錄權限file: path=/tmp/data state=directory mode=0755
- name: 刪除一個目錄file: path=/tmp/data state=absent ?
- name: recurse默認為no,指定為yes代表以遞歸方式指定文件權限file: dest=/user/bin mode=0755 recurse=yes

示例:

創建文件:touch

vim test.yml

?測試成功

[root@bogon playbook]# ansible-playbook -C test.yml 
PLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.161]
ok: [192.168.158.158]TASK [在/opt/目錄下創建文件f1.txt文件] *******************************************
changed: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP ***********************************************************************
192.168.158.158            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

翻譯:

執行結果匯總 ***********************************************************************
192.168.158.158            : 成功=2    已變更=1    不可達=0    失敗=0    跳過=0    救援=0    忽略=0
各字段含義詳解:
?ok=2? (成功=2)
該主機上成功完成了2個任務(無論是否產生變更)
?changed=1? (已變更=1)
其中有1個任務實際修改了系統狀態(例如:創建了文件/安裝了軟件)
?unreachable=0? (不可達=0)
主機連接正常(SSH/WinRM等連接成功)
?failed=0? (失敗=0)
沒有任務執行失敗
?skipped=0? (跳過=0)
沒有任務因條件不滿足而被跳過
?rescued=0? (救援=0)
沒有觸發任何錯誤恢復機制(block-rescue結構)
?ignored=0? (忽略=0)
沒有主動忽略任何錯誤

執行成功:

[root@bogon playbook]# ansible-playbook test.yml PLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.161]
ok: [192.168.158.158]TASK [在/opt/目錄下創建文件f1.txt文件] *******************************************
changed: [192.168.158.158]
changed: [192.168.158.161]PLAY RECAP ***********************************************************************
192.168.158.158            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

查驗:已成功創建

? ? ? ? web主機

[root@web1 ~]# cd /opt/
[root@web1 opt]# ls
f1.txt
創建目錄:directory
[root@bogon playbook]# vim test.yml---
- name: addahosts: alltasks:- name: 在/opt/目錄下創建文件f1.txt文件file:path: /opt/f1.txtstate: touch- name: 在/opt/目錄下創建dir目錄file:path: /opt/dir/state: directory

?測試:

[root@bogon playbook]# ansible-playbook -C test.yml PLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.161]
ok: [192.168.158.158]TASK [在/opt/目錄下創建文件f1.txt文件] *******************************************
changed: [192.168.158.161]
changed: [192.168.158.158]TASK [在/opt/目錄下創建dir目錄] **************************************************
changed: [192.168.158.158]
changed: [192.168.158.161]PLAY RECAP ***********************************************************************
192.168.158.158            : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

執行

[root@bogon playbook]# ansible-playbook  test.yml PLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.161]
ok: [192.168.158.158]TASK [在/opt/目錄下創建文件f1.txt文件] *******************************************
changed: [192.168.158.161]
changed: [192.168.158.158]TASK [在/opt/目錄下創建dir目錄] **************************************************
changed: [192.168.158.158]
changed: [192.168.158.161]PLAY RECAP ***********************************************************************
192.168.158.158            : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=3    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0  

?查驗:

[root@web1 opt]# ls
dir  f1.txt

2、lineinfile

修改文件某一行文本

常用參數:

* ? path:操作的文件路徑
* ? regexp:正則表達式,要替換的內容
* ? line:指定修改后的文本內容
* ? state:當設置為absent代表刪除匹配的行
* ? backrefs:默認為no,當未匹配到時line對應的內容會被插入到文本的末尾,為yes表示不插入
* ? insertafter:借助insertafter參數可以將文本插入到“指定的行”之后
* ? insertbefore:借助insertbefore參數可以將文本插入到“指定的行”之前
* ? backup:是否進行備份
* ? create:操作的文件不存在時是否創建

示例:

- name: 替換文件中包含line123的行為testlinelineinfile: path=/tmp/test regexp="^line" line="testline"

?vim? test.yml? ? ? ? ?(注意縮進)

---
- name: addagather_facts: nohosts: alltasks:- name: 在/opt/目錄下創建文件f1.txt文件file:path: /opt/f1.txtstate: touch- name: 在/opt/目錄下創建dir目錄file:path: /opt/dir/state: directory- name: 精確替換包含line123的行lineinfile:path: /opt/f1.txtregexp: "^line"line: "test"tags: t1

[root@web1 opt]# cat f1.txt 
line1231
lineoqoweiqwe
opoiline

?

測試:? ? ?只在web1上f1.txt有內容

[root@ansible playbook]# ansible-playbook -C -t t1 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [精確替換包含line123的行] ***************************************************
changed: [192.168.158.158]
ok: [192.168.158.161]PLAY RECAP ***********************************************************************
192.168.158.158            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

?

執行成功

[root@ansible playbook]# ansible-playbook  -t t1 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [精確替換包含line123的行] ***************************************************
ok: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP ***********************************************************************
192.168.158.158            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0 

查驗:?

? ? ? ? 因為沒有循環,一次只能執行一個

[root@web1 opt]# cat f1.txt 
line1231
test
opoiline
[root@web1 opt]# cat f1.txt 
test
test
opoiline

?第二次

?

??

3、replace

根據正則表達式替換文件內容(指定換字符串)

常用參數:

  • path:操作文件的路徑

  • regexp:正則表達式

  • replace:指定最終要替換的字符串

  • backup:是否在修改文件之前對文件進行備份,yes是進行備份

?vim test.yml?

    - name: 將/opt/f1.txt文件中的test替換為linereplace:path: /opt/f1.txtregexp: "test"replace: linetags: t2

?測試:

[root@ansible playbook]# ansible-playbook -C -t t2 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [將/opt/f1.txt文件中的test替換為line] ***************************************
changed: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP ***********************************************************************
192.168.158.158            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

執行

[root@ansible playbook]# ansible-playbook -t t2 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.161]
ok: [192.168.158.158]TASK [將/opt/f1.txt文件中的test替換為line] ***************************************
changed: [192.168.158.158]
changed: [192.168.158.161]PLAY RECAP ***********************************************************************
192.168.158.158            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

查驗

?

?

5、template/copy

模板作用類似于copy,可將文件分發到不同節點上,可以在模板文件中引入變量

常用參數:

  • src: 源文件路徑

  • dest:目標文件路徑

  • group:目標文件屬組

  • mode:目標文件權限

  • backup:如果目標文件存在,則先備份目標文件

  • force:是否強制覆蓋,默認為yes

  • validate:在復制之前通過命令驗證目標文件,如果驗證通過則復制

示例:

- template: src=/mytemplates/tt.j2 dest=/etc/file.conf
- template: src=/mytemplates/tt.j2 dest=/etc/file.conf group=wheel mode=0644
- template: src=/mytemplates/suzuka.j2 dest=/etc/suzuka validate='visudo -cf %s'

示例:

第一步:先從遠程主機拷貝一份nginx配置文件

[root@ansible playbook]# scp 192.168.158.158:/etc/nginx/nginx.conf ./
nginx.conf                                      100% 2334     1.0MB/s   00:00   

第二步:編輯yml文件

?mag(輸出文本)

vim? test.yml????????

    - name: print facts variabledebug:msg: "The {{ ansible_default_ipv4.interface }} IPV4 address is {{ ansible_default_ipv4.address }}"

?第三步:執行

[root@ansible playbook]# ansible-playbook -t t3 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [print facts variable] ******************************************************
ok: [192.168.158.158] => {"msg": "The default IPV4 address is 192.168.158.158"
}
ok: [192.168.158.161] => {"msg": "The default IPV4 address is 192.168.158.161"
}PLAY RECAP ***********************************************************************
192.168.158.158            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

?我們可以將default改為變量

第四步:過濾之后拷貝到一個文件里

[root@ansible playbook]# ansible 192.168.158.158 -m setup | grep -n ansible_default_ipv4
57:        "ansible_default_ipv4": {

?

[root@ansible playbook]# ansible 192.168.158.158 -m setup > facts.txt

?interface是ens33

?第五步:將變量引用到文本里

    - name: print facts variabledebug:msg: "The {{ ansible_default_ipv4.interface }} IPV4 address is {{ ansible_default_ipv4.address }}"tags: t3- name: 拷貝nginx配置文件template: src=./nginx.j2 dest=/etc/nginx/nginx.conftags: t4

?執行看一下

? ? ? ? 變量引用了

[root@ansible playbook]# ansible-playbook -t t3 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [print facts variable] ******************************************************
ok: [192.168.158.158] => {"msg": "The ens33 IPV4 address is 192.168.158.158"
}
ok: [192.168.158.161] => {"msg": "The ens33 IPV4 address is 192.168.158.161"
}PLAY RECAP ***********************************************************************
192.168.158.158            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

?將變量引用到nginx配置文件里

[root@ansible playbook]# ls
facts.txt  nginx.conf  test.yml
[root@ansible playbook]# vim nginx.conf ----------------------server {listen       {{ ansible_default_ipv4.address }}:80;listen       [::]:80;server_name  _;root         /usr/share/nginx/html;
-------------------------

?修改文件后綴

[root@ansible playbook]# mv nginx.conf nginx.j2
[root@ansible playbook]# ls
facts.txt  nginx.j2  test.yml

?執行成功

[root@ansible playbook]# ansible-playbook -t t4 test.ymlPLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [拷貝nginx配置文件] *********************************************************
changed: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP ***********************************************************************
192.168.158.158            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

去web主機上查驗nginx配置文件

成功引用

?

?8、wait_for

等待某些操作完成以后再進行后續操作

**常用參數:**

* ? connect\_timeout:在下一個任務執行之前等待連接的超時時間
* ? delay:指在等待過程中輪詢的時間間隔
* ? host:等待的主機地址,默認是127.0.0.1
* ? port:等待的主機端口
* ? path:文件路徑,只有當這個文件存在時才開始執行下一個任務
* ? state:等待的狀態,值可以為started/stoped/absent/present
* ? timeout:等待的超時時間,默認300秒

**示例:**


- name: 每隔10s檢查一次,等待8080端口正常監聽,才開始下一個任務,直到超時
? wait_for: port=8080 state=started delay=10
- name: 等待文件創建
? wait_for: path=/tmp/tt
?

?示例

此時web兩臺主機都是啟用nginx了的,此時80號端口已被監聽

vim test.yml

    - name: 每隔10s檢查一次,等待80端口正常監聽,才開始下一個任務,直到超時wait_for: port=80 state=started delay=10- name: 如果上個任務為真執行下一個,創建文件file:path: /opt/1.txtstate: touch

?當80號端口被監聽后,才執行下一個任務創建文件

?執行

[root@ansible playbook]# ansible-playbook test.yml PLAY [adda] **********************************************************************TASK [Gathering Facts] ***********************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [每隔10s檢查一次,等待80端口正常監聽,才開始下一個任務,直到超時] ***********
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [如果上個任務為真執行下一個,創建文件] ***************************************
changed: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP ***********************************************************************
192.168.158.158            : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

?查驗:成功執行

9、when

條件判斷,滿足后再執行任務

示例: when是條件

- name: 判斷變量tt是否定義shell: echo "I've got {{ tt }}"when: tt is defined

?當主機名是web1時,下載httpd軟件包 (此時只有一臺web1,另一臺web2)

vim test.yml

    - name: outputdebug:msg: "{{ ansible_hostname }}"- name: 條件任務yum:name: httpdstate: present when: ansible_hostname == "web1"

?

執行成功

[root@ansible playbook]# ansible-playbook test.yml PLAY [adda] *************************************************************************************************TASK [Gathering Facts] **************************************************************************************
ok: [192.168.158.158]
ok: [192.168.158.161]TASK [output] ***********************************************************************************************
ok: [192.168.158.158] => {"msg": "web1"
}
ok: [192.168.158.161] => {"msg": "agent2"
}TASK [條件任務] *********************************************************************************************
skipping: [192.168.158.161]
changed: [192.168.158.158]PLAY RECAP **************************************************************************************************
192.168.158.158            : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.158.161            : ok=2    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

?

?去web主機查驗

hostname為web1的主機安裝了httpd軟件包

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/917185.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/917185.shtml
英文地址,請注明出處:http://en.pswp.cn/news/917185.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

bmcweb工作流程

在openbmc中,bmcweb是一個web服務程序,類似于lighttpd,提供web服務。本文將簡單介紹這個服務進程的執行流程。 bmcweb的入口函數main(). main() -> run() run()先注冊routes,最后調用app.run(). 第一個注冊的route為crow::webassets:requestRoutes(). crow::webasse…

傘狀Meta分析重構癌癥幸存者照護指南:從矛盾證據到精準決策

還記得你第一次做出Meta分析時的成就感嗎?那種從海量文獻中抽絲剝繭,最終得出可靠結論的感覺,簡直不要太爽!但是,時代在進步,科研在卷動,Meta分析也有它的"升級版"——傘狀Meta分析&a…

IOMMU Client設備DMA配置過程分析(九)

1.設備樹 cp0_pcie0是一個PCIe RC控制器,使用SMMU將PCIe設備的IOVA轉換成物理地址,使用iommu-map-mask和iommu-map定義PCIe設備使用的Stream ID。設備樹定義如下所示。 [arch/arm64/boot/dts/marvell/armada-ap80x.dtsi] smmu: iommu100000 {compatibl…

使用node-cron實現Node.js定時任務

1. 簡介 node-cron 是一個輕量級的Node.js庫,用于在指定時間或間隔執行任務。它是Unix系統cron工具的JavaScript實現,適用于需要定時執行腳本的場景(如數據備份、定期爬蟲等)。 2. 安裝 npm install node-cron # 或 yarn add node…

前綴和-525.連續數組-力扣(LeetCode)

一、題目解析1、只包含0、1的二進制數組2、找到含有相同數量的0和1,并返回其子數組長度二、算法原理解法1:暴力枚舉 時間復雜度O(N^2)解法2:前綴和哈希表對于統計子數組中的0和1的數量有點困難,我們可以將其轉化一下轉化&#xff…

汽車電子控制系統開發的整體安全理念

1. 摘要在汽車制造商和一級供應商避免責任的背景下,公認的技術規則作為法律要求的標準具有重要的實際意義。道路車輛電子控制單元的安全性目前主要通過 ISO 26262 的要求和流程來保障。特別是隨著道路交通自動化程度的不斷提高以及現代車輛隨之而來的復雜性&#xf…

IDEA重新安裝常用設置

IDEA重新安裝常用設置 展示固定導航欄 項目構建和運行操作委托給maven 參考:IDEA build委托到Maven build

微服務的編程測評系統9-競賽新增-競賽編輯

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄前言1. 競賽新增1.1 競賽基本信息增加-后端開發1.2 競賽新增題目-后端1.3 競賽基本信息-前端1.4 競賽新增題目-前端2. 競賽編輯2.1 競賽詳情-后端2.2 競賽詳情-前端2…

《零基礎入門AI:線性回歸進階(梯度下降算法詳解)》

在上一篇博客中,我們學習了線性回歸的基本概念、損失函數(如MSE)以及最小二乘法。最小二乘法通過求解解析解(直接計算出最優參數)的方式得到線性回歸模型,但它有一個明顯的局限:當特征數量很多時…

基于C語言實現的KV存儲引擎(一)

基于C語言實現的KV存儲引擎項目簡介整體架構網絡模塊的實現recatorproactorNtyco項目簡介 本文主要是基于 C 語言來實現一個簡單的 KV 存儲架構,目的就是將網絡模塊跟實際開發結合起來。 首先我們知道對于數據的存儲可以分為兩種方式,一種是在內存中進…

c++和python聯合編程示例

安裝 C與 Python 綁定工具 pip install pybind11這其實相當于使用 python 安裝了一個 c的庫 pybind11,這個庫只由頭文件構成, 支持基礎數據類型傳遞以及 python 的 numpy 和 c的 eigen 庫之間的自動轉換。 編寫 CMakeList.txt cmake_minimum_required(VERSION 3.14)…

【OD機試題解法筆記】貪心歌手

題目描述 一個歌手準備從A城去B城參加演出。 按照合同,他必須在 T 天內趕到歌手途經 N 座城市歌手不能往回走每兩座城市之間需要的天數都可以提前獲知。歌手在每座城市都可以在路邊賣唱賺錢。 經過調研,歌手提前獲知了每座城市賣唱的收入預期&#xff1a…

AI: 告別過時信息, 用RAG和一份PDF 為LLM打造一個隨需更新的“外腦”

嘿,各位技術同學!今天,我們來聊一個大家在使用大語言模型(LLM)時都會遇到的痛點:知識過時。 無論是像我一樣,用 Gemini Pro 學習日新月異的以太坊,還是希望它能精確掌握某個特定工具…

深度學習(魚書)day08--誤差反向傳播(后三節)

深度學習(魚書)day08–誤差反向傳播(后三節)一、激活函數層的實現 這里,我們把構成神經網絡的層實現為一個類。先來實現激活函數的ReLU層和Sigmoid層。ReLU層 激活函數ReLU(Rectified Linear Unit&#xff…

C# 中生成隨機數的常用方法

1. 使用 Random 類(簡單場景) 2. 使用 RandomNumberGenerator 類(安全場景) 3. 生成指定精度的隨機小數 C# 中生成隨機數的常用方法: 隨機數類型實現方式示例代碼特點與適用場景隨機整數(無范圍&#xf…

Flink 算子鏈設計和源代碼實現

1、JobGraph (JobManager) JobGraph 生成時,通過 ChainingStrategy 連接算子,最終在 Task 中生成 ChainedDriver 鏈表。StreamingJobGraphGeneratorcreateJobGraph() 構建jobGrapch 包含 JobVertex setChaining() 構建算子鏈isCha…

對接八大應用渠道

背景最近公司想把游戲包上到各個渠道上,因此需要對接各種渠道,渠道如下,oppo、vivo、華為、小米、應用寶、taptap、榮耀、三星等應用渠道 主要就是對接登錄、支付接口(后續不知道會不會有其他的)&#x…

學習:入門uniapp Vue3組合式API版本(17)

42.打包發行微信小程序的上線全流程 域名 配置 發行 綁定手機號 上傳 提交后等待,上傳 43.打包H5并發布上線到unicloud的前端頁面托管 完善配置 unicloud 手機號實名信息不一致:請確保手機號的實名信息與開發者姓名、身份證號一致,請前往開…

SOLIDWORKS材料明細表設置,屬于自己的BOM表模板

上一期我們了解了如何在SOLIDWORKS工程圖中添加材料明細表?接下來,我們將進行對SOLIDWORKS材料明細表的設置、查看縮略圖、模板保存的深度講解。01 材料明細表設置菜單欄生成表格后左側菜單欄會顯示關于材料明細表的相關設置信息。我們先了解一下菜單欄設置詳情&am…

全棧:Maven的作用是什么?本地倉庫,私服還有中央倉庫的區別?Maven和pom.xml配置文件的關系是什么?

Maven和pom.xml配置文件的關系是什么: Maven是一個構建工具和依賴管理工具,而pom.xml(Project Object Model)是Maven的核心配置文件。 SSM 框架的項目不一定是 Maven 項目,但推薦使用 Maven進行管理。 SSM 框架的項目可…